]> source.dussan.org Git - sonarqube.git/commitdiff
generate js coverage report from casperjs tests
authorStas Vilchik <vilchiks@gmail.com>
Thu, 19 Feb 2015 08:08:26 +0000 (09:08 +0100)
committerStas Vilchik <vilchiks@gmail.com>
Wed, 4 Mar 2015 12:22:52 +0000 (13:22 +0100)
315 files changed:
pom.xml
server/sonar-web/Gruntfile.coffee
server/sonar-web/package.json
server/sonar-web/pom.xml
server/sonar-web/src/main/js/tests/e2e/lib.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/server.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-active-severity-facet.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-active-severity-facet/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-active-severity-facet/search-BLOCKER.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-active-severity-facet/search-qprofile.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-active-severity-facet/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-available-since.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-available-since/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-available-since/search-limited.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-available-since/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/search-inherited.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/search-not-inherited.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/search-overriden.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/search-qprofile.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/search-qprofile2.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-no-available-profiles-for-activation.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-no-available-profiles-for-activation/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-no-available-profiles-for-activation/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-no-available-profiles-for-activation/show.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/search-qprofile-active.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/search-qprofile-inactive.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-query-facet.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-query-facet/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-query-facet/search-query.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-query-facet/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-rule-permalink/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-rule-permalink/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-rule-permalink/show.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-rule-should-have-permalink.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-activate-profile.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-activate-profile/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-activate-profile/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-activate-profile/show-with-profile.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-activate-profile/show.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-custom-rules.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-custom-rules/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-custom-rules/search-custom-rules.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-custom-rules/search-custom-rules2.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-custom-rules/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-custom-rules/show.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-manual-rules.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-manual-rules/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-manual-rules/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-manual-rules/show.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-custom-rules.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-custom-rules/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-custom-rules/search-custom-rules.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-custom-rules/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-custom-rules/show.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-manual-rules.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-manual-rules/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-manual-rules/search-after.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-manual-rules/search-before.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-manual-rules/show.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-custom-rules.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-custom-rules/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-custom-rules/search-custom-rules.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-custom-rules/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-custom-rules/show.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-deprecated-label.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-deprecated-label/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-deprecated-label/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-details.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-details/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-details/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-details/show.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-empty-list.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-empty-list/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-empty-list/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-facets.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rule-issues.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rule-issues/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rule-issues/issues-search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rule-issues/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rule-issues/show.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rule.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rules.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/coding-rules/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/design-spec.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/design-spec/dependencies.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/design-spec/resources.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/issues-page-should-open-issue-permalink.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/issues-page-should-open-issue-permalink/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/issues-page-should-open-issue-permalink/components-app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/issues-page-should-open-issue-permalink/lines.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/issues-page-should-open-issue-permalink/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/issues-page-spec.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/file-level/components-app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/file-level/lines.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/file-level/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/search-reopened.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/search-with-tags.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/show-open.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/show-resolved.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/show-with-tags.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/show.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/tags-modified.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/tags.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/quality-gates-spec.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/quality-gates-spec/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/quality-gates-spec/list.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/quality-gates-spec/show.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-create-manual-issue.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-create-manual-issue/api-rules-search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-create-manual-issue/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-create-manual-issue/create-issue.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-create-manual-issue/issues.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-create-manual-issue/lines.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-favorite-spec.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-link-to-raw-spec.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-not-show-source-if-no-permission.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-not-show-source-if-no-permission/api-components-app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-not-show-source-if-no-permission/api-issues-search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-open-in-new-window-with-line.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-open-in-new-window.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-open-in-new-window/api-components-app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-open-in-new-window/api-issues-search.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-open-in-new-window/api-sources-lines.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/app-not-logged-in.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/coverage.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/cross-project-duplications.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/duplications-in-deleted-files.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/duplications.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/issues.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/lines.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/resources-without-ncloc-data.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/resources.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/scm.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/source.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/test-cases.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/tests/app.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/tests/lines.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/tests/tests.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/treemap-spec.js [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/treemap-spec/treemap-resources.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/tests/treemap-spec/treemap.json [deleted file]
server/sonar-web/src/main/js/tests/e2e/views/coding-rules.jade [deleted file]
server/sonar-web/src/main/js/tests/e2e/views/design.jade [deleted file]
server/sonar-web/src/main/js/tests/e2e/views/issues.jade [deleted file]
server/sonar-web/src/main/js/tests/e2e/views/layouts/main.jade [deleted file]
server/sonar-web/src/main/js/tests/e2e/views/quality-gates.jade [deleted file]
server/sonar-web/src/main/js/tests/e2e/views/source-viewer.jade [deleted file]
server/sonar-web/src/main/js/tests/e2e/views/treemap.jade [deleted file]
server/sonar-web/src/test/js/coding-rules-page-active-severity-facet.js [new file with mode: 0644]
server/sonar-web/src/test/js/coding-rules-page-available-since.js [new file with mode: 0644]
server/sonar-web/src/test/js/coding-rules-page-inheritance-facet.js [new file with mode: 0644]
server/sonar-web/src/test/js/coding-rules-page-no-available-profiles-for-activation.js [new file with mode: 0644]
server/sonar-web/src/test/js/coding-rules-page-quality-profile-facet.js [new file with mode: 0644]
server/sonar-web/src/test/js/coding-rules-page-query-facet.js [new file with mode: 0644]
server/sonar-web/src/test/js/coding-rules-page-rule-should-have-permalink.js [new file with mode: 0644]
server/sonar-web/src/test/js/coding-rules-page-should-activate-profile.js [new file with mode: 0644]
server/sonar-web/src/test/js/coding-rules-page-should-create-custom-rules.js [new file with mode: 0644]
server/sonar-web/src/test/js/coding-rules-page-should-create-manual-rules.js [new file with mode: 0644]
server/sonar-web/src/test/js/coding-rules-page-should-delete-custom-rules.js [new file with mode: 0644]
server/sonar-web/src/test/js/coding-rules-page-should-delete-manual-rules.js [new file with mode: 0644]
server/sonar-web/src/test/js/coding-rules-page-should-show-custom-rules.js [new file with mode: 0644]
server/sonar-web/src/test/js/coding-rules-page-should-show-deprecated-label.js [new file with mode: 0644]
server/sonar-web/src/test/js/coding-rules-page-should-show-details.js [new file with mode: 0644]
server/sonar-web/src/test/js/coding-rules-page-should-show-empty-list.js [new file with mode: 0644]
server/sonar-web/src/test/js/coding-rules-page-should-show-facets.js [new file with mode: 0644]
server/sonar-web/src/test/js/coding-rules-page-should-show-rule-issues.js [new file with mode: 0644]
server/sonar-web/src/test/js/coding-rules-page-should-show-rule.js [new file with mode: 0644]
server/sonar-web/src/test/js/coding-rules-page-should-show-rules.js [new file with mode: 0644]
server/sonar-web/src/test/js/design-spec.js [new file with mode: 0644]
server/sonar-web/src/test/js/issues-page-should-open-issue-permalink.js [new file with mode: 0644]
server/sonar-web/src/test/js/issues-page-spec.js [new file with mode: 0644]
server/sonar-web/src/test/js/quality-gates-spec.js [new file with mode: 0644]
server/sonar-web/src/test/js/source-viewer-create-manual-issue.js [new file with mode: 0644]
server/sonar-web/src/test/js/source-viewer-favorite-spec.js [new file with mode: 0644]
server/sonar-web/src/test/js/source-viewer-link-to-raw-spec.js [new file with mode: 0644]
server/sonar-web/src/test/js/source-viewer-should-not-show-source-if-no-permission.js [new file with mode: 0644]
server/sonar-web/src/test/js/source-viewer-should-open-in-new-window-with-line.js [new file with mode: 0644]
server/sonar-web/src/test/js/source-viewer-should-open-in-new-window.js [new file with mode: 0644]
server/sonar-web/src/test/js/source-viewer-spec.js [new file with mode: 0644]
server/sonar-web/src/test/js/treemap-spec.js [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-active-severity-facet/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-active-severity-facet/search-BLOCKER.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-active-severity-facet/search-qprofile.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-active-severity-facet/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-available-since/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-available-since/search-limited.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-available-since/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/search-inherited.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/search-not-inherited.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/search-overriden.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/search-qprofile.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/search-qprofile2.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-no-available-profiles-for-activation/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-no-available-profiles-for-activation/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-no-available-profiles-for-activation/show.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-quality-profile-facet/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-quality-profile-facet/search-qprofile-active.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-quality-profile-facet/search-qprofile-inactive.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-quality-profile-facet/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-query-facet/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-query-facet/search-query.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-query-facet/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-rule-permalink/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-rule-permalink/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-rule-permalink/show.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-activate-profile/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-activate-profile/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-activate-profile/show-with-profile.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-activate-profile/show.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-create-custom-rules/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-create-custom-rules/search-custom-rules.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-create-custom-rules/search-custom-rules2.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-create-custom-rules/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-create-custom-rules/show.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-create-manual-rules/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-create-manual-rules/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-create-manual-rules/show.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-delete-custom-rules/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-delete-custom-rules/search-custom-rules.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-delete-custom-rules/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-delete-custom-rules/show.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-delete-manual-rules/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-delete-manual-rules/search-after.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-delete-manual-rules/search-before.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-delete-manual-rules/show.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-show-custom-rules/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-show-custom-rules/search-custom-rules.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-show-custom-rules/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-show-custom-rules/show.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-show-deprecated-label/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-show-deprecated-label/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-show-details/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-show-details/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-show-details/show.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-show-empty-list/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-show-empty-list/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-show-rule-issues/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-show-rule-issues/issues-search.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-show-rule-issues/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules-page-should-show-rule-issues/show.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/coding-rules/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/design-spec/dependencies.json [new file with mode: 0644]
server/sonar-web/src/test/json/design-spec/resources.json [new file with mode: 0644]
server/sonar-web/src/test/json/issues-page-should-open-issue-permalink/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/issues-page-should-open-issue-permalink/components-app.json [new file with mode: 0644]
server/sonar-web/src/test/json/issues-page-should-open-issue-permalink/lines.json [new file with mode: 0644]
server/sonar-web/src/test/json/issues-page-should-open-issue-permalink/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/issues-spec/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/issues-spec/file-level/components-app.json [new file with mode: 0644]
server/sonar-web/src/test/json/issues-spec/file-level/lines.json [new file with mode: 0644]
server/sonar-web/src/test/json/issues-spec/file-level/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/issues-spec/search-reopened.json [new file with mode: 0644]
server/sonar-web/src/test/json/issues-spec/search-with-tags.json [new file with mode: 0644]
server/sonar-web/src/test/json/issues-spec/search.json [new file with mode: 0644]
server/sonar-web/src/test/json/issues-spec/show-open.json [new file with mode: 0644]
server/sonar-web/src/test/json/issues-spec/show-resolved.json [new file with mode: 0644]
server/sonar-web/src/test/json/issues-spec/show-with-tags.json [new file with mode: 0644]
server/sonar-web/src/test/json/issues-spec/show.json [new file with mode: 0644]
server/sonar-web/src/test/json/issues-spec/tags-modified.json [new file with mode: 0644]
server/sonar-web/src/test/json/issues-spec/tags.json [new file with mode: 0644]
server/sonar-web/src/test/json/quality-gates-spec/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/quality-gates-spec/list.json [new file with mode: 0644]
server/sonar-web/src/test/json/quality-gates-spec/show.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-create-manual-issue/api-rules-search.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-create-manual-issue/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-create-manual-issue/create-issue.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-create-manual-issue/issues.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-create-manual-issue/lines.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-should-not-show-source-if-no-permission/api-components-app.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-should-not-show-source-if-no-permission/api-issues-search.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-should-open-in-new-window/api-components-app.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-should-open-in-new-window/api-issues-search.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-should-open-in-new-window/api-sources-lines.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-spec/app-not-logged-in.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-spec/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-spec/coverage.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-spec/cross-project-duplications.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-spec/duplications-in-deleted-files.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-spec/duplications.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-spec/issues.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-spec/lines.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-spec/resources-without-ncloc-data.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-spec/resources.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-spec/scm.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-spec/source.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-spec/test-cases.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-spec/tests/app.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-spec/tests/lines.json [new file with mode: 0644]
server/sonar-web/src/test/json/source-viewer-spec/tests/tests.json [new file with mode: 0644]
server/sonar-web/src/test/json/treemap-spec/treemap-resources.json [new file with mode: 0644]
server/sonar-web/src/test/json/treemap-spec/treemap.json [new file with mode: 0644]
server/sonar-web/src/test/lib.js [new file with mode: 0644]
server/sonar-web/src/test/server-coverage.js [new file with mode: 0644]
server/sonar-web/src/test/server.js [new file with mode: 0644]
server/sonar-web/src/test/views/coding-rules.jade [new file with mode: 0644]
server/sonar-web/src/test/views/design.jade [new file with mode: 0644]
server/sonar-web/src/test/views/issues.jade [new file with mode: 0644]
server/sonar-web/src/test/views/layouts/main.jade [new file with mode: 0644]
server/sonar-web/src/test/views/quality-gates.jade [new file with mode: 0644]
server/sonar-web/src/test/views/source-viewer.jade [new file with mode: 0644]
server/sonar-web/src/test/views/treemap.jade [new file with mode: 0644]

diff --git a/pom.xml b/pom.xml
index c2ea68ba43d4f6741fe6f33d6cd0b19b0f2814eb..03d2aae55e45cd3098cf805727fceff992376978 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -85,6 +85,7 @@
     <skipBatchTests>false</skipBatchTests>
     <skipServerTests>false</skipServerTests>
     <skipWebTests>false</skipWebTests>
+    <jsCoverage>nocoverage</jsCoverage>
 
     <version.maven-license.plugin>1.9.0</version.maven-license.plugin>
     <skipSanityChecks>false</skipSanityChecks>
         </plugins>
       </build>
     </profile>
+
+    <profile>
+      <id>analysis</id>
+      <properties>
+        <jsCoverage>coverage</jsCoverage>
+      </properties>
+    </profile>
   </profiles>
 
 </project>
index a6858a6a19dbe6e107a4f688c590b8fe64f35bca..852d958474bbc05e5d32deed78fb593b05105a91 100644 (file)
@@ -1,6 +1,8 @@
 module.exports = (grunt) ->
   require('jit-grunt')(grunt, {
     express: 'grunt-express-server'
+    unzip: 'grunt-zip'
+    replace: 'grunt-text-replace'
   });
 
   pkg = grunt.file.readJSON('package.json')
@@ -325,12 +327,16 @@ module.exports = (grunt) ->
     express:
       test:
         options:
-          script: '<%= pkg.sources %>js/tests/e2e/server.js'
+          script: 'src/test/server.js'
+          port: expressPort
+      testCoverage:
+        options:
+          script: 'src/test/server-coverage.js'
           port: expressPort
       dev:
         options:
           background: false
-          script: '<%= pkg.sources %>js/tests/e2e/server.js'
+          script: 'src/test/server.js'
 
 
     casper:
@@ -342,14 +348,22 @@ module.exports = (grunt) ->
           concise: true
           parallel: true
           port: expressPort
-        src: ['<%= pkg.sources %>js/tests/e2e/tests/**/*.js']
+        src: ['src/test/js/**/*.js']
+      testCoverage:
+        options:
+          test: true
+          'no-colors': true
+          'fail-fast': true
+          concise: true
+          port: expressPort
+        src: ['src/test/js/**/*.js']
       single:
         options:
           test: true
           verbose: true
           'fail-fast': true
           port: expressPort
-        src: ['<%= pkg.sources %>js/tests/e2e/tests/<%= grunt.option("spec") %>-spec.js']
+        src: ['src/test/js/<%= grunt.option("spec") %>-spec.js']
       testfile:
         options:
           test: true
@@ -370,6 +384,32 @@ module.exports = (grunt) ->
         ]
 
 
+    curl:
+      resetCoverage:
+        src:
+          url: 'http://localhost:' + expressPort + '/coverage/reset'
+          method: 'POST'
+        dest: 'target/reset_coverage.dump'
+
+      downloadCoverage:
+        src: 'http://localhost:' + expressPort + '/coverage/download'
+        dest: 'target/coverage.zip'
+
+
+    unzip:
+      'target/js-coverage': 'target/coverage.zip'
+
+
+    replace:
+      lcov:
+        src: 'target/js-coverage/lcov.info'
+        dest: 'target/js-coverage/lcov.info'
+        replacements: [{
+          from: '/webapp'
+          to: ''
+        }]
+
+
     jshint:
       dev:
         src: [
@@ -422,6 +462,9 @@ module.exports = (grunt) ->
   grunt.registerTask 'test',
       ['dev', 'express:test', 'casper:test']
 
+  grunt.registerTask 'testCoverage',
+      ['dev', 'express:testCoverage', 'curl:resetCoverage', 'casper:testCoverage', 'curl:downloadCoverage', 'unzip', 'replace:lcov']
+
   grunt.registerTask 'single',
       ['dev', 'express:test', 'casper:single']
 
@@ -429,8 +472,11 @@ module.exports = (grunt) ->
       ['dev', 'express:test', 'casper:testfile']
 
   # tasks used by Maven build (see pom.xml)
-  grunt.registerTask 'maven-build-skip-tests-true',
+  grunt.registerTask 'maven-build-skip-tests-true-nocoverage',
       ['build']
 
-  grunt.registerTask 'maven-build-skip-tests-false',
+  grunt.registerTask 'maven-build-skip-tests-false-nocoverage',
       ['test', 'build']
+
+  grunt.registerTask 'maven-build-skip-tests-false-coverage',
+      ['testCoverage', 'build']
index f9beeb0882aafe834ac550262677db4acc9cd1ec..d0150e2b137e86f19248b72d1f80945aef008904 100644 (file)
     "grunt-contrib-uglify": "0.4.0",
     "grunt-contrib-watch": "0.5.3",
     "grunt-css-url-rewrite": "0.3.5",
+    "grunt-curl": "2.1.0",
     "grunt-express-server": "0.4.17",
+    "grunt-text-replace": "0.4.0",
     "grunt-uglify-parallel": "0.0.1",
+    "grunt-zip": "0.16.2",
+    "istanbul": "0.3.5",
+    "istanbul-middleware": "0.2.0",
     "jade": "1.4.2",
     "jit-grunt": "0.9.1",
     "phantomjs": "1.9.7-12",
index bbb9f202700da8b18388579bff7ec3fe7bc363ee..9b7e9ac2ee97707baa3c09c07da88bc39786825f 100644 (file)
@@ -15,6 +15,7 @@
     <!-- self-analysis -->
     <sonar.sources>src/main/js,src/main/coffee,src/main/hbs,src/main/less</sonar.sources>
     <sonar.exclusions>src/main/js/third-party/**/*,src/main/js/require.js,src/main/js/tests/**/*</sonar.exclusions>
+    <sonar.javascript.lcov.reportPath>target/js-coverage/lcov.info</sonar.javascript.lcov.reportPath>
   </properties>
 
   <build>
               <goal>grunt</goal>
             </goals>
             <configuration>
-              <arguments>maven-build-skip-tests-${skipWebTests} --port=${jsTestPort} --no-color</arguments>
+              <arguments>maven-build-skip-tests-${skipWebTests}-${jsCoverage} --port=${jsTestPort} --no-color</arguments>
             </configuration>
           </execution>
         </executions>
diff --git a/server/sonar-web/src/main/js/tests/e2e/lib.js b/server/sonar-web/src/main/js/tests/e2e/lib.js
deleted file mode 100644 (file)
index 2c66e0e..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* globals casper: false, exports: false */
-
-var fs = require('fs');
-
-var getPort = function () {
-  return casper.cli.options.port;
-};
-
-var BASE_URL = 'http://localhost:' + getPort() + '/pages/',
-    WINDOW_WIDTH = 1200,
-    WINDOW_HEIGHT = 800;
-
-
-exports.initMessages = function () {
-  if (casper.cli.options.verbose) {
-    // Dump log messages
-    casper.removeAllListeners('remote.message');
-    casper.on('remote.message', function (message) {
-      this.echo('Log: ' + message, 'LOG');
-    });
-
-    // Dump uncaught errors
-    casper.removeAllListeners('page.error');
-    casper.on('page.error', function (msg) {
-      this.echo('Error: ' + msg, 'ERROR');
-    });
-  }
-};
-
-
-exports.changeWorkingDirectory = function (dir) {
-  var commandLineArgs = require('system').args;
-  // Since Casper has control, the invoked script is deep in the argument stack
-  // commandLineArgs = casper/bin/bootstrap.js,--casper-path=.../casperjs,--cli,--test,[file(s) under test],[options]
-  var currentFile = commandLineArgs[4];
-  var curFilePath = fs.absolute(currentFile).split(fs.separator);
-  if (curFilePath.length > 1) {
-    curFilePath.pop(); // PhantomJS does not have an equivalent path.baseName()-like method
-    curFilePath.push(dir);
-    fs.changeWorkingDirectory(curFilePath.join(fs.separator));
-  }
-};
-
-
-exports.configureCasper = function () {
-  casper.options.waitTimeout = 30000;
-};
-
-
-exports.testName = function () {
-  var head = Array.prototype.slice.call(arguments, 0);
-  return function () {
-    var tail = Array.prototype.slice.call(arguments, 0),
-        body = head.concat(tail);
-    return body.join(' :: ');
-  };
-};
-
-
-var mockRequest = function (url, response, options) {
-  return casper.evaluate(function (url, response, options) {
-    return jQuery.mockjax(_.extend({ url: url, responseText: response}, options));
-  }, url, response, options || {});
-};
-exports.mockRequest = mockRequest;
-
-
-exports.mockRequestFromFile = function (url, fileName, options) {
-  var response = fs.read(fileName);
-  return mockRequest(url, response, options);
-};
-
-
-exports.clearRequestMocks = function () {
-  casper.evaluate(function() {
-    jQuery.mockjaxClear();
-  });
-};
-
-
-exports.clearRequestMock = function (mockId) {
-  casper.evaluate(function(mockId) {
-    jQuery.mockjaxClear(mockId);
-  }, mockId);
-};
-
-
-function patchWithTimestamp(url) {
-  var t = Date.now(),
-      hashStart = url.indexOf('#'),
-      hash =  hashStart !== -1 ? url.substr(hashStart) : '',
-      base = hashStart !== -1 ? url.substr(0, hashStart) : url;
-  return base + '?' + t + hash;
-}
-
-
-exports.buildUrl = function (urlTail) {
-  return patchWithTimestamp(BASE_URL + urlTail);
-};
-
-
-exports.setDefaultViewport = function () {
-  casper.viewport(WINDOW_WIDTH, WINDOW_HEIGHT);
-};
-
-
-exports.capture = function (fileName) {
-  if (!fileName) {
-    fileName = 'screenshot.png';
-  }
-  casper.capture(fileName, { top: 0, left: 0, width: WINDOW_WIDTH, height: WINDOW_HEIGHT });
-};
-
-
-exports.waitForElementCount = function (selector, count, callback) {
-  return casper.waitFor(function () {
-    return casper.evaluate(function (selector, count) {
-      return document.querySelectorAll(selector).length === count;
-    }, selector, count);
-  }, callback);
-};
-
-exports.assertLinkHref = function assertElementCount(selector, href, message) {
-  var linkHref = this.casper.evaluate(function(selector) {
-      return document.querySelector(selector);
-  }, selector);
-  return this.assert(elementCount === count, message, {
-    type: "assertElementCount",
-    standard: f('%d element%s matching selector "%s" found',
-        count,
-        count > 1 ? 's' : '',
-        selector),
-    values: {
-      selector: selector,
-      expected: count,
-      obtained: elementCount
-    }
-  });
-};
diff --git a/server/sonar-web/src/main/js/tests/e2e/server.js b/server/sonar-web/src/main/js/tests/e2e/server.js
deleted file mode 100644 (file)
index 14acf2f..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-var express = require('express'),
-    path = require('path'),
-    errorhandler = require('errorhandler'),
-    serveStatic = require('serve-static'),
-    app = express();
-
-app.set('views', __dirname + '/views');
-app.set('view engine', 'jade');
-
-app.use(errorhandler({ dumpExceptions: true, showStack: true }));
-
-// Serve static files
-app.use('/', serveStatic(path.join(__dirname, '../../../webapp')));
-
-app.get('/pages/:page', function (req, res) {
-  res.render(req.param('page'));
-});
-
-// Get the port from environment variables
-var port = process.env.PORT || 8000;
-
-app.listen(port);
-
-console.log('Server running on port %d', port);
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-active-severity-facet.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-active-severity-facet.js
deleted file mode 100644 (file)
index bfaebe6..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules-page-active-severity-facet');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-active-severity-facet', 7, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        lib.mockRequestFromFile('/api/rules/search', 'search-BLOCKER.json', { data: { active_severities: 'BLOCKER' } });
-        lib.mockRequestFromFile('/api/rules/search', 'search-qprofile.json',
-            { data: { qprofile: 'java-default-with-mojo-conventions-49307' } });
-        lib.mockRequestFromFile('/api/rules/search', 'search.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rule');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '609');
-        test.assertExists('.search-navigator-facet-box-forbidden[data-property="active_severities"]');
-        casper.click('[data-property="qprofile"] .js-facet-toggle');
-        casper.waitForSelector('.js-facet[data-value="java-default-with-mojo-conventions-49307"]');
-      })
-
-      .then(function () {
-        casper.click('.js-facet[data-value="java-default-with-mojo-conventions-49307"]');
-        casper.waitForSelectorTextChange('#coding-rules-total');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '407');
-        test.assertDoesntExist('.search-navigator-facet-box-forbidden[data-property="active_severities"]');
-        casper.click('[data-property="active_severities"] .js-facet-toggle');
-        casper.waitForSelector('[data-property="active_severities"] [data-value="BLOCKER"]');
-      })
-
-      .then(function () {
-        casper.click('[data-property="active_severities"] [data-value="BLOCKER"]');
-        casper.waitForSelectorTextChange('#coding-rules-total');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '4');
-        casper.click('[data-property="qprofile"] .js-facet-toggle');
-        casper.waitForSelectorTextChange('#coding-rules-total');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '609');
-        test.assertExists('.search-navigator-facet-box-forbidden[data-property="active_severities"]');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-active-severity-facet/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-active-severity-facet/app.json
deleted file mode 100644 (file)
index 0eb43bc..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-{
-  "canWrite": false,
-  "qualityprofiles": [
-    {
-      "key": "java-default-with-mojo-conventions-49307",
-      "name": "Default - Maven Conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-default-with-sonarsource-conventions-27339",
-      "name": "Default - SonarSource conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-top-profile-without-formatting-conventions-50037",
-      "name": "Default - Top",
-      "lang": "java"
-    },
-    {
-      "key": "java-findbugs-14954",
-      "name": "FindBugs",
-      "lang": "java"
-    },
-    {
-      "key": "java-for-sq-java-plugin-only-92289",
-      "name": "For SQ Java Plugin Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "java-for-sq-only-95381",
-      "name": "For SQ Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "php-psr-2-06315",
-      "name": "PSR-2",
-      "lang": "php"
-    },
-    {
-      "key": "java-sonar-way-80423",
-      "name": "Sonar way",
-      "lang": "java"
-    },
-    {
-      "key": "js-sonar-way",
-      "name": "Sonar way",
-      "lang": "js"
-    },
-    {
-      "key": "php-sonar-way-05548",
-      "name": "Sonar way",
-      "lang": "php"
-    },
-    {
-      "key": "py-sonar-way-80265",
-      "name": "Sonar way",
-      "lang": "py"
-    },
-    {
-      "key": "java-without-findbugs",
-      "name": "Without Findbugs",
-      "lang": "java"
-    }
-  ],
-  "languages": {
-    "py": "Python",
-    "js": "JavaScript",
-    "php": "PHP",
-    "java": "Java"
-  },
-  "repositories": [
-    {
-      "key": "common-java",
-      "name": "Common SonarQube",
-      "language": "java"
-    },
-    {
-      "key": "common-js",
-      "name": "Common SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "common-php",
-      "name": "Common SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "common-py",
-      "name": "Common SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "Pylint",
-      "name": "Pylint",
-      "language": "py"
-    },
-    {
-      "key": "javascript",
-      "name": "SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "php",
-      "name": "SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "python",
-      "name": "SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "squid",
-      "name": "SonarQube",
-      "language": "java"
-    }
-  ],
-  "statuses": {
-    "BETA": "Beta",
-    "DEPRECATED": "Deprecated",
-    "READY": "Ready"
-  },
-  "characteristics": [
-    {
-      "key": "UNDERSTANDABILITY",
-      "name": "Understandability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "MAINTAINABILITY",
-      "name": "Maintainability"
-    },
-    {
-      "key": "TIME_ZONE_RELATED_PORTABILITY",
-      "name": "Time zone related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "READABILITY",
-      "name": "Readability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "SECURITY_FEATURES",
-      "name": "Security features",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_RELIABILITY",
-      "name": "Architecture related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "OS_RELATED_PORTABILITY",
-      "name": "OS related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "EXCEPTION_HANDLING",
-      "name": "Exception handling",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_CHANGEABILITY",
-      "name": "Logic related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "SOFTWARE_RELATED_PORTABILITY",
-      "name": "Software related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
-      "name": "Input validation and representation",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "LANGUAGE_RELATED_PORTABILITY",
-      "name": "Language related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "ERRORS",
-      "name": "Errors",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "SECURITY",
-      "name": "Security"
-    },
-    {
-      "key": "RELIABILITY",
-      "name": "Reliability"
-    },
-    {
-      "key": "PORTABILITY",
-      "name": "Portability"
-    },
-    {
-      "key": "HARDWARE_RELATED_PORTABILITY",
-      "name": "Hardware related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "SYNCHRONIZATION_RELIABILITY",
-      "name": "Synchronization related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "TRANSPORTABILITY",
-      "name": "Transportability",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "COMPILER_RELATED_PORTABILITY",
-      "name": "Compiler related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "RESOURCE_RELIABILITY",
-      "name": "Resource",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "CPU_EFFICIENCY",
-      "name": "Processor use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "EFFICIENCY",
-      "name": "Efficiency"
-    },
-    {
-      "key": "CHANGEABILITY",
-      "name": "Changeability"
-    },
-    {
-      "key": "DATA_CHANGEABILITY",
-      "name": "Data related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "API_ABUSE",
-      "name": "API abuse",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_CHANGEABILITY",
-      "name": "Architecture related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "UNIT_TESTS",
-      "name": "Unit tests",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "INSTRUCTION_RELIABILITY",
-      "name": "Instruction related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "REUSABILITY",
-      "name": "Reusability"
-    },
-    {
-      "key": "MODULARITY",
-      "name": "Modularity",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "UNIT_TESTABILITY",
-      "name": "Unit level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "TESTABILITY",
-      "name": "Testability"
-    },
-    {
-      "key": "INTEGRATION_TESTABILITY",
-      "name": "Integration level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "NETWORK_USE",
-      "name": "Network use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "MEMORY_EFFICIENCY",
-      "name": "Memory use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "DATA_RELIABILITY",
-      "name": "Data related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "FAULT_TOLERANCE",
-      "name": "Fault tolerance",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_RELIABILITY",
-      "name": "Logic related reliability",
-      "parent": "RELIABILITY"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-active-severity-facet/search-BLOCKER.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-active-severity-facet/search-BLOCKER.json
deleted file mode 100644 (file)
index 3dc49f0..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-{
-  "total": 4,
-  "p": 1,
-  "ps": 25,
-  "rules": [
-    {
-      "key": "squid:S2077",
-      "name": "Values passed to SQL commands should be sanitized",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security",
-        "sql"
-      ],
-      "tags": [
-        "custom-tag"
-      ]
-    },
-    {
-      "key": "php:S107",
-      "name": "Functions should not have too many parameters",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1192",
-      "name": "String literals should not be duplicated",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1145",
-      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "bug",
-        "cwe",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S108",
-      "name": "Nested blocks of code should not be left empty",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1301",
-      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S103",
-      "name": "Lines should not be too long",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1144",
-      "name": "Unused private method should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S105",
-      "name": "Tabulation characters should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1481",
-      "name": "Unused local variables should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1142",
-      "name": "Functions should not contain too many return statements",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S104",
-      "name": "Files should not have too many lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1605",
-      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1448",
-      "name": "Classes should not have too many methods",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1603",
-      "name": "PHP 4 constructor declarations should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1779",
-      "name": "Only LF character (Unix-like) should be used to end lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1185",
-      "name": "Overriding methods should do more than simply call the same method in the super class",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1600",
-      "name": "Deprecated predefined variables should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1109",
-      "name": "A close curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2001",
-      "name": "Functions deprecated in PHP 5 should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "obsolete"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2002",
-      "name": "Errors should not be silenced",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2000",
-      "name": "Files should not contain characters before \"<?php\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "user-experience"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1105",
-      "name": "An open curly brace should be located at the end of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1200",
-      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1106",
-      "name": "An open curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "convention",
-          "count": 67
-        },
-        {
-          "val": "brain-overload",
-          "count": 36
-        },
-        {
-          "val": "bug",
-          "count": 36
-        },
-        {
-          "val": "cwe",
-          "count": 17
-        },
-        {
-          "val": "unused",
-          "count": 16
-        },
-        {
-          "val": "security",
-          "count": 14
-        },
-        {
-          "val": "pitfall",
-          "count": 12
-        },
-        {
-          "val": "psr2",
-          "count": 12
-        },
-        {
-          "val": "error-handling",
-          "count": 11
-        },
-        {
-          "val": "pitfail",
-          "count": 10
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 212
-        },
-        {
-          "val": "py",
-          "count": 212
-        },
-        {
-          "val": "php",
-          "count": 103
-        },
-        {
-          "val": "js",
-          "count": 77
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 206
-        },
-        {
-          "val": "Pylint",
-          "count": 180
-        },
-        {
-          "val": "php",
-          "count": 97
-        },
-        {
-          "val": "javascript",
-          "count": 73
-        },
-        {
-          "val": "python",
-          "count": 28
-        },
-        {
-          "val": "common-java",
-          "count": 6
-        },
-        {
-          "val": "common-php",
-          "count": 6
-        },
-        {
-          "val": "manual",
-          "count": 5
-        },
-        {
-          "val": "common-js",
-          "count": 4
-        },
-        {
-          "val": "common-py",
-          "count": 4
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-active-severity-facet/search-qprofile.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-active-severity-facet/search-qprofile.json
deleted file mode 100644 (file)
index cbbb272..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-{
-  "total": 407,
-  "p": 1,
-  "ps": 25,
-  "rules": [
-    {
-      "key": "squid:S2077",
-      "name": "Values passed to SQL commands should be sanitized",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security",
-        "sql"
-      ],
-      "tags": [
-        "custom-tag"
-      ]
-    },
-    {
-      "key": "php:S107",
-      "name": "Functions should not have too many parameters",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1192",
-      "name": "String literals should not be duplicated",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1145",
-      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "bug",
-        "cwe",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S108",
-      "name": "Nested blocks of code should not be left empty",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1301",
-      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S103",
-      "name": "Lines should not be too long",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1144",
-      "name": "Unused private method should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S105",
-      "name": "Tabulation characters should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1481",
-      "name": "Unused local variables should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1142",
-      "name": "Functions should not contain too many return statements",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S104",
-      "name": "Files should not have too many lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1605",
-      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1448",
-      "name": "Classes should not have too many methods",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1603",
-      "name": "PHP 4 constructor declarations should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1779",
-      "name": "Only LF character (Unix-like) should be used to end lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1185",
-      "name": "Overriding methods should do more than simply call the same method in the super class",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1600",
-      "name": "Deprecated predefined variables should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1109",
-      "name": "A close curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2001",
-      "name": "Functions deprecated in PHP 5 should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "obsolete"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2002",
-      "name": "Errors should not be silenced",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2000",
-      "name": "Files should not contain characters before \"<?php\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "user-experience"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1105",
-      "name": "An open curly brace should be located at the end of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1200",
-      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1106",
-      "name": "An open curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "convention",
-          "count": 67
-        },
-        {
-          "val": "brain-overload",
-          "count": 36
-        },
-        {
-          "val": "bug",
-          "count": 36
-        },
-        {
-          "val": "cwe",
-          "count": 17
-        },
-        {
-          "val": "unused",
-          "count": 16
-        },
-        {
-          "val": "security",
-          "count": 14
-        },
-        {
-          "val": "pitfall",
-          "count": 12
-        },
-        {
-          "val": "psr2",
-          "count": 12
-        },
-        {
-          "val": "error-handling",
-          "count": 11
-        },
-        {
-          "val": "pitfail",
-          "count": 10
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 212
-        },
-        {
-          "val": "py",
-          "count": 212
-        },
-        {
-          "val": "php",
-          "count": 103
-        },
-        {
-          "val": "js",
-          "count": 77
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 206
-        },
-        {
-          "val": "Pylint",
-          "count": 180
-        },
-        {
-          "val": "php",
-          "count": 97
-        },
-        {
-          "val": "javascript",
-          "count": 73
-        },
-        {
-          "val": "python",
-          "count": 28
-        },
-        {
-          "val": "common-java",
-          "count": 6
-        },
-        {
-          "val": "common-php",
-          "count": 6
-        },
-        {
-          "val": "manual",
-          "count": 5
-        },
-        {
-          "val": "common-js",
-          "count": 4
-        },
-        {
-          "val": "common-py",
-          "count": 4
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-active-severity-facet/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-active-severity-facet/search.json
deleted file mode 100644 (file)
index c17c58d..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-{
-  "total": 609,
-  "p": 1,
-  "ps": 25,
-  "rules": [
-    {
-      "key": "squid:S2077",
-      "name": "Values passed to SQL commands should be sanitized",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security",
-        "sql"
-      ],
-      "tags": [
-        "custom-tag"
-      ]
-    },
-    {
-      "key": "php:S107",
-      "name": "Functions should not have too many parameters",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1192",
-      "name": "String literals should not be duplicated",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1145",
-      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "bug",
-        "cwe",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S108",
-      "name": "Nested blocks of code should not be left empty",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1301",
-      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S103",
-      "name": "Lines should not be too long",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1144",
-      "name": "Unused private method should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S105",
-      "name": "Tabulation characters should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1481",
-      "name": "Unused local variables should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1142",
-      "name": "Functions should not contain too many return statements",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S104",
-      "name": "Files should not have too many lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1605",
-      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1448",
-      "name": "Classes should not have too many methods",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1603",
-      "name": "PHP 4 constructor declarations should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1779",
-      "name": "Only LF character (Unix-like) should be used to end lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1185",
-      "name": "Overriding methods should do more than simply call the same method in the super class",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1600",
-      "name": "Deprecated predefined variables should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1109",
-      "name": "A close curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2001",
-      "name": "Functions deprecated in PHP 5 should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "obsolete"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2002",
-      "name": "Errors should not be silenced",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2000",
-      "name": "Files should not contain characters before \"<?php\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "user-experience"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1105",
-      "name": "An open curly brace should be located at the end of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1200",
-      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1106",
-      "name": "An open curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "convention",
-          "count": 67
-        },
-        {
-          "val": "brain-overload",
-          "count": 36
-        },
-        {
-          "val": "bug",
-          "count": 36
-        },
-        {
-          "val": "cwe",
-          "count": 17
-        },
-        {
-          "val": "unused",
-          "count": 16
-        },
-        {
-          "val": "security",
-          "count": 14
-        },
-        {
-          "val": "pitfall",
-          "count": 12
-        },
-        {
-          "val": "psr2",
-          "count": 12
-        },
-        {
-          "val": "error-handling",
-          "count": 11
-        },
-        {
-          "val": "pitfail",
-          "count": 10
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 212
-        },
-        {
-          "val": "py",
-          "count": 212
-        },
-        {
-          "val": "php",
-          "count": 103
-        },
-        {
-          "val": "js",
-          "count": 77
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 206
-        },
-        {
-          "val": "Pylint",
-          "count": 180
-        },
-        {
-          "val": "php",
-          "count": 97
-        },
-        {
-          "val": "javascript",
-          "count": 73
-        },
-        {
-          "val": "python",
-          "count": 28
-        },
-        {
-          "val": "common-java",
-          "count": 6
-        },
-        {
-          "val": "common-php",
-          "count": 6
-        },
-        {
-          "val": "manual",
-          "count": 5
-        },
-        {
-          "val": "common-js",
-          "count": 4
-        },
-        {
-          "val": "common-py",
-          "count": 4
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-available-since.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-available-since.js
deleted file mode 100644 (file)
index e13424e..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules-page-available-since');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-available-since', 2, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        lib.mockRequestFromFile('/api/rules/search', 'search-limited.json',
-            { data: { available_since: '2014-12-01' } });
-        lib.mockRequestFromFile('/api/rules/search', 'search.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rule');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '609');
-        casper.click('[data-property="available_since"] .js-facet-toggle');
-        casper.evaluate(function () {
-          jQuery('[data-property="available_since"] input').val('2014-12-01').change();
-        });
-      })
-
-      .then(function () {
-        casper.waitForSelectorTextChange('#coding-rules-total');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '101');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-available-since/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-available-since/app.json
deleted file mode 100644 (file)
index 0eb43bc..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-{
-  "canWrite": false,
-  "qualityprofiles": [
-    {
-      "key": "java-default-with-mojo-conventions-49307",
-      "name": "Default - Maven Conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-default-with-sonarsource-conventions-27339",
-      "name": "Default - SonarSource conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-top-profile-without-formatting-conventions-50037",
-      "name": "Default - Top",
-      "lang": "java"
-    },
-    {
-      "key": "java-findbugs-14954",
-      "name": "FindBugs",
-      "lang": "java"
-    },
-    {
-      "key": "java-for-sq-java-plugin-only-92289",
-      "name": "For SQ Java Plugin Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "java-for-sq-only-95381",
-      "name": "For SQ Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "php-psr-2-06315",
-      "name": "PSR-2",
-      "lang": "php"
-    },
-    {
-      "key": "java-sonar-way-80423",
-      "name": "Sonar way",
-      "lang": "java"
-    },
-    {
-      "key": "js-sonar-way",
-      "name": "Sonar way",
-      "lang": "js"
-    },
-    {
-      "key": "php-sonar-way-05548",
-      "name": "Sonar way",
-      "lang": "php"
-    },
-    {
-      "key": "py-sonar-way-80265",
-      "name": "Sonar way",
-      "lang": "py"
-    },
-    {
-      "key": "java-without-findbugs",
-      "name": "Without Findbugs",
-      "lang": "java"
-    }
-  ],
-  "languages": {
-    "py": "Python",
-    "js": "JavaScript",
-    "php": "PHP",
-    "java": "Java"
-  },
-  "repositories": [
-    {
-      "key": "common-java",
-      "name": "Common SonarQube",
-      "language": "java"
-    },
-    {
-      "key": "common-js",
-      "name": "Common SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "common-php",
-      "name": "Common SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "common-py",
-      "name": "Common SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "Pylint",
-      "name": "Pylint",
-      "language": "py"
-    },
-    {
-      "key": "javascript",
-      "name": "SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "php",
-      "name": "SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "python",
-      "name": "SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "squid",
-      "name": "SonarQube",
-      "language": "java"
-    }
-  ],
-  "statuses": {
-    "BETA": "Beta",
-    "DEPRECATED": "Deprecated",
-    "READY": "Ready"
-  },
-  "characteristics": [
-    {
-      "key": "UNDERSTANDABILITY",
-      "name": "Understandability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "MAINTAINABILITY",
-      "name": "Maintainability"
-    },
-    {
-      "key": "TIME_ZONE_RELATED_PORTABILITY",
-      "name": "Time zone related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "READABILITY",
-      "name": "Readability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "SECURITY_FEATURES",
-      "name": "Security features",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_RELIABILITY",
-      "name": "Architecture related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "OS_RELATED_PORTABILITY",
-      "name": "OS related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "EXCEPTION_HANDLING",
-      "name": "Exception handling",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_CHANGEABILITY",
-      "name": "Logic related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "SOFTWARE_RELATED_PORTABILITY",
-      "name": "Software related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
-      "name": "Input validation and representation",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "LANGUAGE_RELATED_PORTABILITY",
-      "name": "Language related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "ERRORS",
-      "name": "Errors",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "SECURITY",
-      "name": "Security"
-    },
-    {
-      "key": "RELIABILITY",
-      "name": "Reliability"
-    },
-    {
-      "key": "PORTABILITY",
-      "name": "Portability"
-    },
-    {
-      "key": "HARDWARE_RELATED_PORTABILITY",
-      "name": "Hardware related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "SYNCHRONIZATION_RELIABILITY",
-      "name": "Synchronization related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "TRANSPORTABILITY",
-      "name": "Transportability",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "COMPILER_RELATED_PORTABILITY",
-      "name": "Compiler related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "RESOURCE_RELIABILITY",
-      "name": "Resource",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "CPU_EFFICIENCY",
-      "name": "Processor use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "EFFICIENCY",
-      "name": "Efficiency"
-    },
-    {
-      "key": "CHANGEABILITY",
-      "name": "Changeability"
-    },
-    {
-      "key": "DATA_CHANGEABILITY",
-      "name": "Data related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "API_ABUSE",
-      "name": "API abuse",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_CHANGEABILITY",
-      "name": "Architecture related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "UNIT_TESTS",
-      "name": "Unit tests",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "INSTRUCTION_RELIABILITY",
-      "name": "Instruction related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "REUSABILITY",
-      "name": "Reusability"
-    },
-    {
-      "key": "MODULARITY",
-      "name": "Modularity",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "UNIT_TESTABILITY",
-      "name": "Unit level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "TESTABILITY",
-      "name": "Testability"
-    },
-    {
-      "key": "INTEGRATION_TESTABILITY",
-      "name": "Integration level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "NETWORK_USE",
-      "name": "Network use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "MEMORY_EFFICIENCY",
-      "name": "Memory use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "DATA_RELIABILITY",
-      "name": "Data related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "FAULT_TOLERANCE",
-      "name": "Fault tolerance",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_RELIABILITY",
-      "name": "Logic related reliability",
-      "parent": "RELIABILITY"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-available-since/search-limited.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-available-since/search-limited.json
deleted file mode 100644 (file)
index ca5b331..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-{
-  "total": 101,
-  "p": 1,
-  "ps": 25,
-  "rules": [
-    {
-      "key": "squid:S2077",
-      "name": "Values passed to SQL commands should be sanitized",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security",
-        "sql"
-      ],
-      "tags": [
-        "custom-tag"
-      ]
-    },
-    {
-      "key": "php:S107",
-      "name": "Functions should not have too many parameters",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1192",
-      "name": "String literals should not be duplicated",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1145",
-      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "bug",
-        "cwe",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S108",
-      "name": "Nested blocks of code should not be left empty",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1301",
-      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S103",
-      "name": "Lines should not be too long",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1144",
-      "name": "Unused private method should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S105",
-      "name": "Tabulation characters should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1481",
-      "name": "Unused local variables should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1142",
-      "name": "Functions should not contain too many return statements",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S104",
-      "name": "Files should not have too many lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1605",
-      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1448",
-      "name": "Classes should not have too many methods",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1603",
-      "name": "PHP 4 constructor declarations should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1779",
-      "name": "Only LF character (Unix-like) should be used to end lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1185",
-      "name": "Overriding methods should do more than simply call the same method in the super class",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1600",
-      "name": "Deprecated predefined variables should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1109",
-      "name": "A close curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2001",
-      "name": "Functions deprecated in PHP 5 should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "obsolete"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2002",
-      "name": "Errors should not be silenced",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2000",
-      "name": "Files should not contain characters before \"<?php\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "user-experience"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1105",
-      "name": "An open curly brace should be located at the end of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1200",
-      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1106",
-      "name": "An open curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "convention",
-          "count": 67
-        },
-        {
-          "val": "brain-overload",
-          "count": 36
-        },
-        {
-          "val": "bug",
-          "count": 36
-        },
-        {
-          "val": "cwe",
-          "count": 17
-        },
-        {
-          "val": "unused",
-          "count": 16
-        },
-        {
-          "val": "security",
-          "count": 14
-        },
-        {
-          "val": "pitfall",
-          "count": 12
-        },
-        {
-          "val": "psr2",
-          "count": 12
-        },
-        {
-          "val": "error-handling",
-          "count": 11
-        },
-        {
-          "val": "pitfail",
-          "count": 10
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 212
-        },
-        {
-          "val": "py",
-          "count": 212
-        },
-        {
-          "val": "php",
-          "count": 103
-        },
-        {
-          "val": "js",
-          "count": 77
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 206
-        },
-        {
-          "val": "Pylint",
-          "count": 180
-        },
-        {
-          "val": "php",
-          "count": 97
-        },
-        {
-          "val": "javascript",
-          "count": 73
-        },
-        {
-          "val": "python",
-          "count": 28
-        },
-        {
-          "val": "common-java",
-          "count": 6
-        },
-        {
-          "val": "common-php",
-          "count": 6
-        },
-        {
-          "val": "manual",
-          "count": 5
-        },
-        {
-          "val": "common-js",
-          "count": 4
-        },
-        {
-          "val": "common-py",
-          "count": 4
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-available-since/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-available-since/search.json
deleted file mode 100644 (file)
index c17c58d..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-{
-  "total": 609,
-  "p": 1,
-  "ps": 25,
-  "rules": [
-    {
-      "key": "squid:S2077",
-      "name": "Values passed to SQL commands should be sanitized",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security",
-        "sql"
-      ],
-      "tags": [
-        "custom-tag"
-      ]
-    },
-    {
-      "key": "php:S107",
-      "name": "Functions should not have too many parameters",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1192",
-      "name": "String literals should not be duplicated",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1145",
-      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "bug",
-        "cwe",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S108",
-      "name": "Nested blocks of code should not be left empty",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1301",
-      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S103",
-      "name": "Lines should not be too long",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1144",
-      "name": "Unused private method should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S105",
-      "name": "Tabulation characters should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1481",
-      "name": "Unused local variables should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1142",
-      "name": "Functions should not contain too many return statements",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S104",
-      "name": "Files should not have too many lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1605",
-      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1448",
-      "name": "Classes should not have too many methods",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1603",
-      "name": "PHP 4 constructor declarations should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1779",
-      "name": "Only LF character (Unix-like) should be used to end lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1185",
-      "name": "Overriding methods should do more than simply call the same method in the super class",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1600",
-      "name": "Deprecated predefined variables should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1109",
-      "name": "A close curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2001",
-      "name": "Functions deprecated in PHP 5 should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "obsolete"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2002",
-      "name": "Errors should not be silenced",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2000",
-      "name": "Files should not contain characters before \"<?php\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "user-experience"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1105",
-      "name": "An open curly brace should be located at the end of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1200",
-      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1106",
-      "name": "An open curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "convention",
-          "count": 67
-        },
-        {
-          "val": "brain-overload",
-          "count": 36
-        },
-        {
-          "val": "bug",
-          "count": 36
-        },
-        {
-          "val": "cwe",
-          "count": 17
-        },
-        {
-          "val": "unused",
-          "count": 16
-        },
-        {
-          "val": "security",
-          "count": 14
-        },
-        {
-          "val": "pitfall",
-          "count": 12
-        },
-        {
-          "val": "psr2",
-          "count": 12
-        },
-        {
-          "val": "error-handling",
-          "count": 11
-        },
-        {
-          "val": "pitfail",
-          "count": 10
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 212
-        },
-        {
-          "val": "py",
-          "count": 212
-        },
-        {
-          "val": "php",
-          "count": 103
-        },
-        {
-          "val": "js",
-          "count": 77
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 206
-        },
-        {
-          "val": "Pylint",
-          "count": 180
-        },
-        {
-          "val": "php",
-          "count": 97
-        },
-        {
-          "val": "javascript",
-          "count": 73
-        },
-        {
-          "val": "python",
-          "count": 28
-        },
-        {
-          "val": "common-java",
-          "count": 6
-        },
-        {
-          "val": "common-php",
-          "count": 6
-        },
-        {
-          "val": "manual",
-          "count": 5
-        },
-        {
-          "val": "common-js",
-          "count": 4
-        },
-        {
-          "val": "common-py",
-          "count": 4
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet.js
deleted file mode 100644 (file)
index 6208f9c..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules-page-inheritance-facet');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-inheritance-facet', 11, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        lib.mockRequestFromFile('/api/rules/search', 'search-not-inherited.json', { data: { inheritance: 'NONE' } });
-        lib.mockRequestFromFile('/api/rules/search', 'search-inherited.json', { data: { inheritance: 'INHERITED' } });
-        lib.mockRequestFromFile('/api/rules/search', 'search-overriden.json', { data: { inheritance: 'OVERRIDES' } });
-        lib.mockRequestFromFile('/api/rules/search', 'search-qprofile.json',
-            { data: { qprofile: 'java-default-with-mojo-conventions-49307' } });
-        lib.mockRequestFromFile('/api/rules/search', 'search-qprofile2.json',
-            { data: { qprofile: 'java-top-profile-without-formatting-conventions-50037' } });
-        lib.mockRequestFromFile('/api/rules/search', 'search.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rule');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '609');
-        test.assertExists('.search-navigator-facet-box-forbidden[data-property="inheritance"]');
-        casper.click('[data-property="qprofile"] .js-facet-toggle');
-        casper.waitForSelector('.js-facet[data-value="java-default-with-mojo-conventions-49307"]');
-      })
-
-      .then(function () {
-        casper.click('.js-facet[data-value="java-default-with-mojo-conventions-49307"]');
-        casper.waitForSelectorTextChange('#coding-rules-total');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '407');
-        test.assertDoesntExist('.search-navigator-facet-box-forbidden[data-property="inheritance"]');
-        casper.click('[data-property="inheritance"] .js-facet-toggle');
-        casper.waitForSelector('[data-property="inheritance"] [data-value="NONE"]');
-      })
-
-      .then(function () {
-        casper.click('[data-property="inheritance"] [data-value="NONE"]');
-        casper.waitForSelectorTextChange('#coding-rules-total');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '103');
-        casper.click('[data-property="inheritance"] [data-value="INHERITED"]');
-        casper.waitForSelectorTextChange('#coding-rules-total');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '101');
-        casper.click('[data-property="inheritance"] [data-value="OVERRIDES"]');
-        casper.waitForSelectorTextChange('#coding-rules-total');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '102');
-        casper.click('.js-facet[data-value="java-top-profile-without-formatting-conventions-50037"]');
-        casper.waitForSelectorTextChange('#coding-rules-total');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '408');
-        test.assertExists('.search-navigator-facet-box-forbidden[data-property="inheritance"]');
-        casper.click('[data-property="qprofile"] .js-facet-toggle');
-        casper.waitForSelectorTextChange('#coding-rules-total');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '609');
-        test.assertExists('.search-navigator-facet-box-forbidden[data-property="inheritance"]');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/app.json
deleted file mode 100644 (file)
index 0eb43bc..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-{
-  "canWrite": false,
-  "qualityprofiles": [
-    {
-      "key": "java-default-with-mojo-conventions-49307",
-      "name": "Default - Maven Conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-default-with-sonarsource-conventions-27339",
-      "name": "Default - SonarSource conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-top-profile-without-formatting-conventions-50037",
-      "name": "Default - Top",
-      "lang": "java"
-    },
-    {
-      "key": "java-findbugs-14954",
-      "name": "FindBugs",
-      "lang": "java"
-    },
-    {
-      "key": "java-for-sq-java-plugin-only-92289",
-      "name": "For SQ Java Plugin Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "java-for-sq-only-95381",
-      "name": "For SQ Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "php-psr-2-06315",
-      "name": "PSR-2",
-      "lang": "php"
-    },
-    {
-      "key": "java-sonar-way-80423",
-      "name": "Sonar way",
-      "lang": "java"
-    },
-    {
-      "key": "js-sonar-way",
-      "name": "Sonar way",
-      "lang": "js"
-    },
-    {
-      "key": "php-sonar-way-05548",
-      "name": "Sonar way",
-      "lang": "php"
-    },
-    {
-      "key": "py-sonar-way-80265",
-      "name": "Sonar way",
-      "lang": "py"
-    },
-    {
-      "key": "java-without-findbugs",
-      "name": "Without Findbugs",
-      "lang": "java"
-    }
-  ],
-  "languages": {
-    "py": "Python",
-    "js": "JavaScript",
-    "php": "PHP",
-    "java": "Java"
-  },
-  "repositories": [
-    {
-      "key": "common-java",
-      "name": "Common SonarQube",
-      "language": "java"
-    },
-    {
-      "key": "common-js",
-      "name": "Common SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "common-php",
-      "name": "Common SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "common-py",
-      "name": "Common SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "Pylint",
-      "name": "Pylint",
-      "language": "py"
-    },
-    {
-      "key": "javascript",
-      "name": "SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "php",
-      "name": "SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "python",
-      "name": "SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "squid",
-      "name": "SonarQube",
-      "language": "java"
-    }
-  ],
-  "statuses": {
-    "BETA": "Beta",
-    "DEPRECATED": "Deprecated",
-    "READY": "Ready"
-  },
-  "characteristics": [
-    {
-      "key": "UNDERSTANDABILITY",
-      "name": "Understandability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "MAINTAINABILITY",
-      "name": "Maintainability"
-    },
-    {
-      "key": "TIME_ZONE_RELATED_PORTABILITY",
-      "name": "Time zone related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "READABILITY",
-      "name": "Readability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "SECURITY_FEATURES",
-      "name": "Security features",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_RELIABILITY",
-      "name": "Architecture related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "OS_RELATED_PORTABILITY",
-      "name": "OS related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "EXCEPTION_HANDLING",
-      "name": "Exception handling",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_CHANGEABILITY",
-      "name": "Logic related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "SOFTWARE_RELATED_PORTABILITY",
-      "name": "Software related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
-      "name": "Input validation and representation",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "LANGUAGE_RELATED_PORTABILITY",
-      "name": "Language related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "ERRORS",
-      "name": "Errors",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "SECURITY",
-      "name": "Security"
-    },
-    {
-      "key": "RELIABILITY",
-      "name": "Reliability"
-    },
-    {
-      "key": "PORTABILITY",
-      "name": "Portability"
-    },
-    {
-      "key": "HARDWARE_RELATED_PORTABILITY",
-      "name": "Hardware related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "SYNCHRONIZATION_RELIABILITY",
-      "name": "Synchronization related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "TRANSPORTABILITY",
-      "name": "Transportability",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "COMPILER_RELATED_PORTABILITY",
-      "name": "Compiler related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "RESOURCE_RELIABILITY",
-      "name": "Resource",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "CPU_EFFICIENCY",
-      "name": "Processor use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "EFFICIENCY",
-      "name": "Efficiency"
-    },
-    {
-      "key": "CHANGEABILITY",
-      "name": "Changeability"
-    },
-    {
-      "key": "DATA_CHANGEABILITY",
-      "name": "Data related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "API_ABUSE",
-      "name": "API abuse",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_CHANGEABILITY",
-      "name": "Architecture related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "UNIT_TESTS",
-      "name": "Unit tests",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "INSTRUCTION_RELIABILITY",
-      "name": "Instruction related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "REUSABILITY",
-      "name": "Reusability"
-    },
-    {
-      "key": "MODULARITY",
-      "name": "Modularity",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "UNIT_TESTABILITY",
-      "name": "Unit level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "TESTABILITY",
-      "name": "Testability"
-    },
-    {
-      "key": "INTEGRATION_TESTABILITY",
-      "name": "Integration level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "NETWORK_USE",
-      "name": "Network use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "MEMORY_EFFICIENCY",
-      "name": "Memory use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "DATA_RELIABILITY",
-      "name": "Data related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "FAULT_TOLERANCE",
-      "name": "Fault tolerance",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_RELIABILITY",
-      "name": "Logic related reliability",
-      "parent": "RELIABILITY"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/search-inherited.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/search-inherited.json
deleted file mode 100644 (file)
index ca5b331..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-{
-  "total": 101,
-  "p": 1,
-  "ps": 25,
-  "rules": [
-    {
-      "key": "squid:S2077",
-      "name": "Values passed to SQL commands should be sanitized",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security",
-        "sql"
-      ],
-      "tags": [
-        "custom-tag"
-      ]
-    },
-    {
-      "key": "php:S107",
-      "name": "Functions should not have too many parameters",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1192",
-      "name": "String literals should not be duplicated",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1145",
-      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "bug",
-        "cwe",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S108",
-      "name": "Nested blocks of code should not be left empty",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1301",
-      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S103",
-      "name": "Lines should not be too long",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1144",
-      "name": "Unused private method should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S105",
-      "name": "Tabulation characters should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1481",
-      "name": "Unused local variables should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1142",
-      "name": "Functions should not contain too many return statements",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S104",
-      "name": "Files should not have too many lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1605",
-      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1448",
-      "name": "Classes should not have too many methods",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1603",
-      "name": "PHP 4 constructor declarations should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1779",
-      "name": "Only LF character (Unix-like) should be used to end lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1185",
-      "name": "Overriding methods should do more than simply call the same method in the super class",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1600",
-      "name": "Deprecated predefined variables should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1109",
-      "name": "A close curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2001",
-      "name": "Functions deprecated in PHP 5 should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "obsolete"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2002",
-      "name": "Errors should not be silenced",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2000",
-      "name": "Files should not contain characters before \"<?php\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "user-experience"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1105",
-      "name": "An open curly brace should be located at the end of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1200",
-      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1106",
-      "name": "An open curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "convention",
-          "count": 67
-        },
-        {
-          "val": "brain-overload",
-          "count": 36
-        },
-        {
-          "val": "bug",
-          "count": 36
-        },
-        {
-          "val": "cwe",
-          "count": 17
-        },
-        {
-          "val": "unused",
-          "count": 16
-        },
-        {
-          "val": "security",
-          "count": 14
-        },
-        {
-          "val": "pitfall",
-          "count": 12
-        },
-        {
-          "val": "psr2",
-          "count": 12
-        },
-        {
-          "val": "error-handling",
-          "count": 11
-        },
-        {
-          "val": "pitfail",
-          "count": 10
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 212
-        },
-        {
-          "val": "py",
-          "count": 212
-        },
-        {
-          "val": "php",
-          "count": 103
-        },
-        {
-          "val": "js",
-          "count": 77
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 206
-        },
-        {
-          "val": "Pylint",
-          "count": 180
-        },
-        {
-          "val": "php",
-          "count": 97
-        },
-        {
-          "val": "javascript",
-          "count": 73
-        },
-        {
-          "val": "python",
-          "count": 28
-        },
-        {
-          "val": "common-java",
-          "count": 6
-        },
-        {
-          "val": "common-php",
-          "count": 6
-        },
-        {
-          "val": "manual",
-          "count": 5
-        },
-        {
-          "val": "common-js",
-          "count": 4
-        },
-        {
-          "val": "common-py",
-          "count": 4
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/search-not-inherited.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/search-not-inherited.json
deleted file mode 100644 (file)
index c49bff7..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-{
-  "total": 103,
-  "p": 1,
-  "ps": 25,
-  "rules": [
-    {
-      "key": "squid:S2077",
-      "name": "Values passed to SQL commands should be sanitized",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security",
-        "sql"
-      ],
-      "tags": [
-        "custom-tag"
-      ]
-    },
-    {
-      "key": "php:S107",
-      "name": "Functions should not have too many parameters",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1192",
-      "name": "String literals should not be duplicated",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1145",
-      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "bug",
-        "cwe",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S108",
-      "name": "Nested blocks of code should not be left empty",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1301",
-      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S103",
-      "name": "Lines should not be too long",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1144",
-      "name": "Unused private method should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S105",
-      "name": "Tabulation characters should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1481",
-      "name": "Unused local variables should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1142",
-      "name": "Functions should not contain too many return statements",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S104",
-      "name": "Files should not have too many lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1605",
-      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1448",
-      "name": "Classes should not have too many methods",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1603",
-      "name": "PHP 4 constructor declarations should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1779",
-      "name": "Only LF character (Unix-like) should be used to end lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1185",
-      "name": "Overriding methods should do more than simply call the same method in the super class",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1600",
-      "name": "Deprecated predefined variables should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1109",
-      "name": "A close curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2001",
-      "name": "Functions deprecated in PHP 5 should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "obsolete"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2002",
-      "name": "Errors should not be silenced",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2000",
-      "name": "Files should not contain characters before \"<?php\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "user-experience"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1105",
-      "name": "An open curly brace should be located at the end of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1200",
-      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1106",
-      "name": "An open curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "convention",
-          "count": 67
-        },
-        {
-          "val": "brain-overload",
-          "count": 36
-        },
-        {
-          "val": "bug",
-          "count": 36
-        },
-        {
-          "val": "cwe",
-          "count": 17
-        },
-        {
-          "val": "unused",
-          "count": 16
-        },
-        {
-          "val": "security",
-          "count": 14
-        },
-        {
-          "val": "pitfall",
-          "count": 12
-        },
-        {
-          "val": "psr2",
-          "count": 12
-        },
-        {
-          "val": "error-handling",
-          "count": 11
-        },
-        {
-          "val": "pitfail",
-          "count": 10
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 212
-        },
-        {
-          "val": "py",
-          "count": 212
-        },
-        {
-          "val": "php",
-          "count": 103
-        },
-        {
-          "val": "js",
-          "count": 77
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 206
-        },
-        {
-          "val": "Pylint",
-          "count": 180
-        },
-        {
-          "val": "php",
-          "count": 97
-        },
-        {
-          "val": "javascript",
-          "count": 73
-        },
-        {
-          "val": "python",
-          "count": 28
-        },
-        {
-          "val": "common-java",
-          "count": 6
-        },
-        {
-          "val": "common-php",
-          "count": 6
-        },
-        {
-          "val": "manual",
-          "count": 5
-        },
-        {
-          "val": "common-js",
-          "count": 4
-        },
-        {
-          "val": "common-py",
-          "count": 4
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/search-overriden.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/search-overriden.json
deleted file mode 100644 (file)
index 60bb4a7..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-{
-  "total": 102,
-  "p": 1,
-  "ps": 25,
-  "rules": [
-    {
-      "key": "squid:S2077",
-      "name": "Values passed to SQL commands should be sanitized",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security",
-        "sql"
-      ],
-      "tags": [
-        "custom-tag"
-      ]
-    },
-    {
-      "key": "php:S107",
-      "name": "Functions should not have too many parameters",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1192",
-      "name": "String literals should not be duplicated",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1145",
-      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "bug",
-        "cwe",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S108",
-      "name": "Nested blocks of code should not be left empty",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1301",
-      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S103",
-      "name": "Lines should not be too long",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1144",
-      "name": "Unused private method should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S105",
-      "name": "Tabulation characters should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1481",
-      "name": "Unused local variables should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1142",
-      "name": "Functions should not contain too many return statements",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S104",
-      "name": "Files should not have too many lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1605",
-      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1448",
-      "name": "Classes should not have too many methods",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1603",
-      "name": "PHP 4 constructor declarations should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1779",
-      "name": "Only LF character (Unix-like) should be used to end lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1185",
-      "name": "Overriding methods should do more than simply call the same method in the super class",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1600",
-      "name": "Deprecated predefined variables should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1109",
-      "name": "A close curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2001",
-      "name": "Functions deprecated in PHP 5 should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "obsolete"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2002",
-      "name": "Errors should not be silenced",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2000",
-      "name": "Files should not contain characters before \"<?php\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "user-experience"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1105",
-      "name": "An open curly brace should be located at the end of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1200",
-      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1106",
-      "name": "An open curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "convention",
-          "count": 67
-        },
-        {
-          "val": "brain-overload",
-          "count": 36
-        },
-        {
-          "val": "bug",
-          "count": 36
-        },
-        {
-          "val": "cwe",
-          "count": 17
-        },
-        {
-          "val": "unused",
-          "count": 16
-        },
-        {
-          "val": "security",
-          "count": 14
-        },
-        {
-          "val": "pitfall",
-          "count": 12
-        },
-        {
-          "val": "psr2",
-          "count": 12
-        },
-        {
-          "val": "error-handling",
-          "count": 11
-        },
-        {
-          "val": "pitfail",
-          "count": 10
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 212
-        },
-        {
-          "val": "py",
-          "count": 212
-        },
-        {
-          "val": "php",
-          "count": 103
-        },
-        {
-          "val": "js",
-          "count": 77
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 206
-        },
-        {
-          "val": "Pylint",
-          "count": 180
-        },
-        {
-          "val": "php",
-          "count": 97
-        },
-        {
-          "val": "javascript",
-          "count": 73
-        },
-        {
-          "val": "python",
-          "count": 28
-        },
-        {
-          "val": "common-java",
-          "count": 6
-        },
-        {
-          "val": "common-php",
-          "count": 6
-        },
-        {
-          "val": "manual",
-          "count": 5
-        },
-        {
-          "val": "common-js",
-          "count": 4
-        },
-        {
-          "val": "common-py",
-          "count": 4
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/search-qprofile.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/search-qprofile.json
deleted file mode 100644 (file)
index cbbb272..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-{
-  "total": 407,
-  "p": 1,
-  "ps": 25,
-  "rules": [
-    {
-      "key": "squid:S2077",
-      "name": "Values passed to SQL commands should be sanitized",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security",
-        "sql"
-      ],
-      "tags": [
-        "custom-tag"
-      ]
-    },
-    {
-      "key": "php:S107",
-      "name": "Functions should not have too many parameters",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1192",
-      "name": "String literals should not be duplicated",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1145",
-      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "bug",
-        "cwe",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S108",
-      "name": "Nested blocks of code should not be left empty",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1301",
-      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S103",
-      "name": "Lines should not be too long",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1144",
-      "name": "Unused private method should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S105",
-      "name": "Tabulation characters should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1481",
-      "name": "Unused local variables should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1142",
-      "name": "Functions should not contain too many return statements",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S104",
-      "name": "Files should not have too many lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1605",
-      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1448",
-      "name": "Classes should not have too many methods",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1603",
-      "name": "PHP 4 constructor declarations should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1779",
-      "name": "Only LF character (Unix-like) should be used to end lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1185",
-      "name": "Overriding methods should do more than simply call the same method in the super class",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1600",
-      "name": "Deprecated predefined variables should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1109",
-      "name": "A close curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2001",
-      "name": "Functions deprecated in PHP 5 should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "obsolete"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2002",
-      "name": "Errors should not be silenced",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2000",
-      "name": "Files should not contain characters before \"<?php\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "user-experience"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1105",
-      "name": "An open curly brace should be located at the end of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1200",
-      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1106",
-      "name": "An open curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "convention",
-          "count": 67
-        },
-        {
-          "val": "brain-overload",
-          "count": 36
-        },
-        {
-          "val": "bug",
-          "count": 36
-        },
-        {
-          "val": "cwe",
-          "count": 17
-        },
-        {
-          "val": "unused",
-          "count": 16
-        },
-        {
-          "val": "security",
-          "count": 14
-        },
-        {
-          "val": "pitfall",
-          "count": 12
-        },
-        {
-          "val": "psr2",
-          "count": 12
-        },
-        {
-          "val": "error-handling",
-          "count": 11
-        },
-        {
-          "val": "pitfail",
-          "count": 10
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 212
-        },
-        {
-          "val": "py",
-          "count": 212
-        },
-        {
-          "val": "php",
-          "count": 103
-        },
-        {
-          "val": "js",
-          "count": 77
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 206
-        },
-        {
-          "val": "Pylint",
-          "count": 180
-        },
-        {
-          "val": "php",
-          "count": 97
-        },
-        {
-          "val": "javascript",
-          "count": 73
-        },
-        {
-          "val": "python",
-          "count": 28
-        },
-        {
-          "val": "common-java",
-          "count": 6
-        },
-        {
-          "val": "common-php",
-          "count": 6
-        },
-        {
-          "val": "manual",
-          "count": 5
-        },
-        {
-          "val": "common-js",
-          "count": 4
-        },
-        {
-          "val": "common-py",
-          "count": 4
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/search-qprofile2.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/search-qprofile2.json
deleted file mode 100644 (file)
index 63dd5c4..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-{
-  "total": 408,
-  "p": 1,
-  "ps": 25,
-  "rules": [
-    {
-      "key": "squid:S2077",
-      "name": "Values passed to SQL commands should be sanitized",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security",
-        "sql"
-      ],
-      "tags": [
-        "custom-tag"
-      ]
-    },
-    {
-      "key": "php:S107",
-      "name": "Functions should not have too many parameters",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1192",
-      "name": "String literals should not be duplicated",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1145",
-      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "bug",
-        "cwe",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S108",
-      "name": "Nested blocks of code should not be left empty",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1301",
-      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S103",
-      "name": "Lines should not be too long",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1144",
-      "name": "Unused private method should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S105",
-      "name": "Tabulation characters should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1481",
-      "name": "Unused local variables should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1142",
-      "name": "Functions should not contain too many return statements",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S104",
-      "name": "Files should not have too many lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1605",
-      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1448",
-      "name": "Classes should not have too many methods",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1603",
-      "name": "PHP 4 constructor declarations should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1779",
-      "name": "Only LF character (Unix-like) should be used to end lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1185",
-      "name": "Overriding methods should do more than simply call the same method in the super class",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1600",
-      "name": "Deprecated predefined variables should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1109",
-      "name": "A close curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2001",
-      "name": "Functions deprecated in PHP 5 should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "obsolete"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2002",
-      "name": "Errors should not be silenced",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2000",
-      "name": "Files should not contain characters before \"<?php\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "user-experience"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1105",
-      "name": "An open curly brace should be located at the end of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1200",
-      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1106",
-      "name": "An open curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "convention",
-          "count": 67
-        },
-        {
-          "val": "brain-overload",
-          "count": 36
-        },
-        {
-          "val": "bug",
-          "count": 36
-        },
-        {
-          "val": "cwe",
-          "count": 17
-        },
-        {
-          "val": "unused",
-          "count": 16
-        },
-        {
-          "val": "security",
-          "count": 14
-        },
-        {
-          "val": "pitfall",
-          "count": 12
-        },
-        {
-          "val": "psr2",
-          "count": 12
-        },
-        {
-          "val": "error-handling",
-          "count": 11
-        },
-        {
-          "val": "pitfail",
-          "count": 10
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 212
-        },
-        {
-          "val": "py",
-          "count": 212
-        },
-        {
-          "val": "php",
-          "count": 103
-        },
-        {
-          "val": "js",
-          "count": 77
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 206
-        },
-        {
-          "val": "Pylint",
-          "count": 180
-        },
-        {
-          "val": "php",
-          "count": 97
-        },
-        {
-          "val": "javascript",
-          "count": 73
-        },
-        {
-          "val": "python",
-          "count": 28
-        },
-        {
-          "val": "common-java",
-          "count": 6
-        },
-        {
-          "val": "common-php",
-          "count": 6
-        },
-        {
-          "val": "manual",
-          "count": 5
-        },
-        {
-          "val": "common-js",
-          "count": 4
-        },
-        {
-          "val": "common-py",
-          "count": 4
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-inheritance-facet/search.json
deleted file mode 100644 (file)
index c17c58d..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-{
-  "total": 609,
-  "p": 1,
-  "ps": 25,
-  "rules": [
-    {
-      "key": "squid:S2077",
-      "name": "Values passed to SQL commands should be sanitized",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security",
-        "sql"
-      ],
-      "tags": [
-        "custom-tag"
-      ]
-    },
-    {
-      "key": "php:S107",
-      "name": "Functions should not have too many parameters",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1192",
-      "name": "String literals should not be duplicated",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1145",
-      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "bug",
-        "cwe",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S108",
-      "name": "Nested blocks of code should not be left empty",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1301",
-      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S103",
-      "name": "Lines should not be too long",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1144",
-      "name": "Unused private method should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S105",
-      "name": "Tabulation characters should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1481",
-      "name": "Unused local variables should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1142",
-      "name": "Functions should not contain too many return statements",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S104",
-      "name": "Files should not have too many lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1605",
-      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1448",
-      "name": "Classes should not have too many methods",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1603",
-      "name": "PHP 4 constructor declarations should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1779",
-      "name": "Only LF character (Unix-like) should be used to end lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1185",
-      "name": "Overriding methods should do more than simply call the same method in the super class",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1600",
-      "name": "Deprecated predefined variables should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1109",
-      "name": "A close curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2001",
-      "name": "Functions deprecated in PHP 5 should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "obsolete"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2002",
-      "name": "Errors should not be silenced",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2000",
-      "name": "Files should not contain characters before \"<?php\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "user-experience"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1105",
-      "name": "An open curly brace should be located at the end of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1200",
-      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1106",
-      "name": "An open curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "convention",
-          "count": 67
-        },
-        {
-          "val": "brain-overload",
-          "count": 36
-        },
-        {
-          "val": "bug",
-          "count": 36
-        },
-        {
-          "val": "cwe",
-          "count": 17
-        },
-        {
-          "val": "unused",
-          "count": 16
-        },
-        {
-          "val": "security",
-          "count": 14
-        },
-        {
-          "val": "pitfall",
-          "count": 12
-        },
-        {
-          "val": "psr2",
-          "count": 12
-        },
-        {
-          "val": "error-handling",
-          "count": 11
-        },
-        {
-          "val": "pitfail",
-          "count": 10
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 212
-        },
-        {
-          "val": "py",
-          "count": 212
-        },
-        {
-          "val": "php",
-          "count": 103
-        },
-        {
-          "val": "js",
-          "count": 77
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 206
-        },
-        {
-          "val": "Pylint",
-          "count": 180
-        },
-        {
-          "val": "php",
-          "count": 97
-        },
-        {
-          "val": "javascript",
-          "count": 73
-        },
-        {
-          "val": "python",
-          "count": 28
-        },
-        {
-          "val": "common-java",
-          "count": 6
-        },
-        {
-          "val": "common-php",
-          "count": 6
-        },
-        {
-          "val": "manual",
-          "count": 5
-        },
-        {
-          "val": "common-js",
-          "count": 4
-        },
-        {
-          "val": "common-py",
-          "count": 4
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-no-available-profiles-for-activation.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-no-available-profiles-for-activation.js
deleted file mode 100644 (file)
index 5dc7f30..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules-page-no-available-profiles-for-activation');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-no-available-profiles-for-activation', 2, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        lib.mockRequestFromFile('/api/rules/search', 'search.json');
-        lib.mockRequestFromFile('/api/rules/show', 'show.json');
-        lib.mockRequest('/api/issues/search', '{}');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rule.selected', function () {
-          casper.click('.coding-rule.selected .js-rule');
-        });
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rules-detail-header');
-      })
-
-      .then(function () {
-        test.assertExist('#coding-rules-quality-profile-activate');
-        casper.click('#coding-rules-quality-profile-activate');
-        casper.waitForSelector('.modal');
-      })
-
-      .then(function () {
-        test.assertExists('.modal .message-notice');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-no-available-profiles-for-activation/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-no-available-profiles-for-activation/app.json
deleted file mode 100644 (file)
index 4e69bde..0000000
+++ /dev/null
@@ -1,258 +0,0 @@
-{
-  "canWrite": true,
-  "qualityprofiles": [
-    {
-      "key": "java-default-with-mojo-conventions-49307",
-      "name": "Default - Maven Conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    }
-  ],
-  "languages": {
-    "py": "Python",
-    "js": "JavaScript",
-    "php": "PHP",
-    "java": "Java"
-  },
-  "repositories": [
-    {
-      "key": "common-java",
-      "name": "Common SonarQube",
-      "language": "java"
-    },
-    {
-      "key": "common-js",
-      "name": "Common SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "common-php",
-      "name": "Common SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "common-py",
-      "name": "Common SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "Pylint",
-      "name": "Pylint",
-      "language": "py"
-    },
-    {
-      "key": "javascript",
-      "name": "SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "php",
-      "name": "SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "python",
-      "name": "SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "squid",
-      "name": "SonarQube",
-      "language": "java"
-    }
-  ],
-  "statuses": {
-    "BETA": "Beta",
-    "DEPRECATED": "Deprecated",
-    "READY": "Ready"
-  },
-  "characteristics": [
-    {
-      "key": "UNDERSTANDABILITY",
-      "name": "Understandability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "MAINTAINABILITY",
-      "name": "Maintainability"
-    },
-    {
-      "key": "TIME_ZONE_RELATED_PORTABILITY",
-      "name": "Time zone related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "READABILITY",
-      "name": "Readability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "SECURITY_FEATURES",
-      "name": "Security features",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_RELIABILITY",
-      "name": "Architecture related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "OS_RELATED_PORTABILITY",
-      "name": "OS related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "EXCEPTION_HANDLING",
-      "name": "Exception handling",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_CHANGEABILITY",
-      "name": "Logic related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "SOFTWARE_RELATED_PORTABILITY",
-      "name": "Software related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
-      "name": "Input validation and representation",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "LANGUAGE_RELATED_PORTABILITY",
-      "name": "Language related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "ERRORS",
-      "name": "Errors",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "SECURITY",
-      "name": "Security"
-    },
-    {
-      "key": "RELIABILITY",
-      "name": "Reliability"
-    },
-    {
-      "key": "PORTABILITY",
-      "name": "Portability"
-    },
-    {
-      "key": "HARDWARE_RELATED_PORTABILITY",
-      "name": "Hardware related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "SYNCHRONIZATION_RELIABILITY",
-      "name": "Synchronization related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "TRANSPORTABILITY",
-      "name": "Transportability",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "COMPILER_RELATED_PORTABILITY",
-      "name": "Compiler related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "RESOURCE_RELIABILITY",
-      "name": "Resource",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "CPU_EFFICIENCY",
-      "name": "Processor use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "EFFICIENCY",
-      "name": "Efficiency"
-    },
-    {
-      "key": "CHANGEABILITY",
-      "name": "Changeability"
-    },
-    {
-      "key": "DATA_CHANGEABILITY",
-      "name": "Data related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "API_ABUSE",
-      "name": "API abuse",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_CHANGEABILITY",
-      "name": "Architecture related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "UNIT_TESTS",
-      "name": "Unit tests",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "INSTRUCTION_RELIABILITY",
-      "name": "Instruction related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "REUSABILITY",
-      "name": "Reusability"
-    },
-    {
-      "key": "MODULARITY",
-      "name": "Modularity",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "UNIT_TESTABILITY",
-      "name": "Unit level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "TESTABILITY",
-      "name": "Testability"
-    },
-    {
-      "key": "INTEGRATION_TESTABILITY",
-      "name": "Integration level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "NETWORK_USE",
-      "name": "Network use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "MEMORY_EFFICIENCY",
-      "name": "Memory use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "DATA_RELIABILITY",
-      "name": "Data related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "FAULT_TOLERANCE",
-      "name": "Fault tolerance",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_RELIABILITY",
-      "name": "Logic related reliability",
-      "parent": "RELIABILITY"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-no-available-profiles-for-activation/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-no-available-profiles-for-activation/search.json
deleted file mode 100644 (file)
index b5a6bc2..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-{
-  "total": 10,
-  "p": 1,
-  "ps": 200,
-  "rules": [
-    {
-      "key": "squid:S1181",
-      "name": "Throwable and Error classes should not be caught",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "error-handling"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1849",
-      "name": "\"Iterator.hasNext()\" should not call \"Iterator.next()\"",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1844",
-      "name": "\"Object.wait(...)\" should never be called on objects that implement \"java.util.concurrent.locks.Condition\"",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug",
-        "pitfall"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S2258",
-      "name": "\"javax.crypto.NullCipher\" should not be used for anything other than testing",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S2251",
-      "name": "A \"for\" loop update clause should move the counter in the right direction",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:ObjectFinalizeOverridenCallsSuperFinalizeCheck",
-      "name": "super.finalize() should be called at the end of Object.finalize() implementations",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1143",
-      "name": "Return statements should not occur in finally blocks",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1206",
-      "name": "\"equals(Object obj)\" and \"hashCode()\" should be overridden in pairs",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1451",
-      "name": "Copyright and license headers should be defined in all source files",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1697",
-      "name": "Short-circuit logic should be used to prevent null pointer dereferences in conditionals",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "bug",
-          "count": 7
-        },
-        {
-          "val": "convention",
-          "count": 1
-        },
-        {
-          "val": "cwe",
-          "count": 1
-        },
-        {
-          "val": "error-handling",
-          "count": 1
-        },
-        {
-          "val": "owasp-top10",
-          "count": 1
-        },
-        {
-          "val": "pitfall",
-          "count": 1
-        },
-        {
-          "val": "security",
-          "count": 1
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 10
-        },
-        {
-          "val": "js",
-          "count": 6
-        },
-        {
-          "val": "php",
-          "count": 2
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 10
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-no-available-profiles-for-activation/show.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-no-available-profiles-for-activation/show.json
deleted file mode 100644 (file)
index 1fddeb6..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-  "rule": {
-    "key": "squid:S1181",
-    "repo": "squid",
-    "name": "Throwable and Error classes should not be caught",
-    "createdAt": "2013-08-09T14:40:54+0200",
-    "severity": "BLOCKER",
-    "status": "READY",
-    "internalKey": "S1181",
-    "isTemplate": false,
-    "tags": [],
-    "sysTags": [
-      "error-handling"
-    ],
-    "lang": "java",
-    "langName": "Java",
-    "htmlDesc": "<p>\n<code>Throwable</code> is the superclass of all errors and exceptions in Java.\n<code>Error</code> is the superclass of all errors which are not meant to be caught by applications.\n</p>\n\n<p>\nCatching either <code>Throwable</code> or <code>Error</code> will also catch <code>OutOfMemoryError</code> or <code>InternalError</code> from which an application should not attempt to recover.\n</p>\n\n<p>Only <code>Exception</code> and its subclasses should be caught.</p>\n\n<h2>Noncompliant Code Example</h2>\n\n<pre>\ntry { /* ... */ } catch (Throwable t) { /* ... */ }\ntry { /* ... */ } catch (Error e) { /* ... */ } \n</pre>\n\n<h2>Compliant Solution</h2>\n\n<pre>\ntry { /* ... */ } catch (Exception e) { /* ... */ }  \ntry { /* ... */ } catch (RuntimeException e) { /* ... */ }  \ntry { /* ... */ } catch (MyException e) { /* ... */ }  \n</pre>",
-    "defaultDebtChar": "RELIABILITY",
-    "defaultDebtSubChar": "EXCEPTION_HANDLING",
-    "debtChar": "RELIABILITY",
-    "debtSubChar": "EXCEPTION_HANDLING",
-    "debtCharName": "Reliability",
-    "debtSubCharName": "Exception handling",
-    "defaultDebtRemFnType": "CONSTANT_ISSUE",
-    "defaultDebtRemFnOffset": "20min",
-    "debtOverloaded": true,
-    "debtRemFnType": "LINEAR",
-    "debtRemFnCoeff": "20min",
-    "params": []
-  },
-  "actives": [
-    {
-      "qProfile": "java-default-with-mojo-conventions-49307",
-      "inherit": "NONE",
-      "severity": "BLOCKER",
-      "params": []
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet.js
deleted file mode 100644 (file)
index 44c30eb..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules-page-quality-profile-facet');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-quality-profile-facet', 6, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        lib.mockRequestFromFile('/api/rules/search', 'search-qprofile-active.json',
-            { data: { activation: true } });
-        lib.mockRequestFromFile('/api/rules/search', 'search-qprofile-inactive.json',
-            { data: { activation: 'false' } });
-        lib.mockRequestFromFile('/api/rules/search', 'search.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rule');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '609');
-        casper.click('[data-property="qprofile"] .js-facet-toggle');
-        casper.waitForSelector('.js-facet[data-value="java-default-with-mojo-conventions-49307"]');
-      })
-
-      .then(function () {
-        casper.click('.js-facet[data-value="java-default-with-mojo-conventions-49307"]');
-        casper.waitForSelectorTextChange('#coding-rules-total');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '407');
-        test.assertExists('.js-facet[data-value="java-default-with-mojo-conventions-49307"] .js-active.facet-toggle-active');
-        casper.click('.js-facet[data-value="java-default-with-mojo-conventions-49307"] .js-inactive');
-        casper.waitForSelectorTextChange('#coding-rules-total');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '408');
-        test.assertExists('.js-facet[data-value="java-default-with-mojo-conventions-49307"] .js-inactive.facet-toggle-active');
-        casper.click('[data-property="qprofile"] .js-facet-toggle');
-        casper.waitForSelectorTextChange('#coding-rules-total');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '609');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/app.json
deleted file mode 100644 (file)
index 0eb43bc..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-{
-  "canWrite": false,
-  "qualityprofiles": [
-    {
-      "key": "java-default-with-mojo-conventions-49307",
-      "name": "Default - Maven Conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-default-with-sonarsource-conventions-27339",
-      "name": "Default - SonarSource conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-top-profile-without-formatting-conventions-50037",
-      "name": "Default - Top",
-      "lang": "java"
-    },
-    {
-      "key": "java-findbugs-14954",
-      "name": "FindBugs",
-      "lang": "java"
-    },
-    {
-      "key": "java-for-sq-java-plugin-only-92289",
-      "name": "For SQ Java Plugin Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "java-for-sq-only-95381",
-      "name": "For SQ Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "php-psr-2-06315",
-      "name": "PSR-2",
-      "lang": "php"
-    },
-    {
-      "key": "java-sonar-way-80423",
-      "name": "Sonar way",
-      "lang": "java"
-    },
-    {
-      "key": "js-sonar-way",
-      "name": "Sonar way",
-      "lang": "js"
-    },
-    {
-      "key": "php-sonar-way-05548",
-      "name": "Sonar way",
-      "lang": "php"
-    },
-    {
-      "key": "py-sonar-way-80265",
-      "name": "Sonar way",
-      "lang": "py"
-    },
-    {
-      "key": "java-without-findbugs",
-      "name": "Without Findbugs",
-      "lang": "java"
-    }
-  ],
-  "languages": {
-    "py": "Python",
-    "js": "JavaScript",
-    "php": "PHP",
-    "java": "Java"
-  },
-  "repositories": [
-    {
-      "key": "common-java",
-      "name": "Common SonarQube",
-      "language": "java"
-    },
-    {
-      "key": "common-js",
-      "name": "Common SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "common-php",
-      "name": "Common SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "common-py",
-      "name": "Common SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "Pylint",
-      "name": "Pylint",
-      "language": "py"
-    },
-    {
-      "key": "javascript",
-      "name": "SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "php",
-      "name": "SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "python",
-      "name": "SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "squid",
-      "name": "SonarQube",
-      "language": "java"
-    }
-  ],
-  "statuses": {
-    "BETA": "Beta",
-    "DEPRECATED": "Deprecated",
-    "READY": "Ready"
-  },
-  "characteristics": [
-    {
-      "key": "UNDERSTANDABILITY",
-      "name": "Understandability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "MAINTAINABILITY",
-      "name": "Maintainability"
-    },
-    {
-      "key": "TIME_ZONE_RELATED_PORTABILITY",
-      "name": "Time zone related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "READABILITY",
-      "name": "Readability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "SECURITY_FEATURES",
-      "name": "Security features",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_RELIABILITY",
-      "name": "Architecture related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "OS_RELATED_PORTABILITY",
-      "name": "OS related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "EXCEPTION_HANDLING",
-      "name": "Exception handling",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_CHANGEABILITY",
-      "name": "Logic related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "SOFTWARE_RELATED_PORTABILITY",
-      "name": "Software related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
-      "name": "Input validation and representation",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "LANGUAGE_RELATED_PORTABILITY",
-      "name": "Language related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "ERRORS",
-      "name": "Errors",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "SECURITY",
-      "name": "Security"
-    },
-    {
-      "key": "RELIABILITY",
-      "name": "Reliability"
-    },
-    {
-      "key": "PORTABILITY",
-      "name": "Portability"
-    },
-    {
-      "key": "HARDWARE_RELATED_PORTABILITY",
-      "name": "Hardware related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "SYNCHRONIZATION_RELIABILITY",
-      "name": "Synchronization related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "TRANSPORTABILITY",
-      "name": "Transportability",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "COMPILER_RELATED_PORTABILITY",
-      "name": "Compiler related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "RESOURCE_RELIABILITY",
-      "name": "Resource",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "CPU_EFFICIENCY",
-      "name": "Processor use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "EFFICIENCY",
-      "name": "Efficiency"
-    },
-    {
-      "key": "CHANGEABILITY",
-      "name": "Changeability"
-    },
-    {
-      "key": "DATA_CHANGEABILITY",
-      "name": "Data related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "API_ABUSE",
-      "name": "API abuse",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_CHANGEABILITY",
-      "name": "Architecture related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "UNIT_TESTS",
-      "name": "Unit tests",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "INSTRUCTION_RELIABILITY",
-      "name": "Instruction related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "REUSABILITY",
-      "name": "Reusability"
-    },
-    {
-      "key": "MODULARITY",
-      "name": "Modularity",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "UNIT_TESTABILITY",
-      "name": "Unit level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "TESTABILITY",
-      "name": "Testability"
-    },
-    {
-      "key": "INTEGRATION_TESTABILITY",
-      "name": "Integration level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "NETWORK_USE",
-      "name": "Network use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "MEMORY_EFFICIENCY",
-      "name": "Memory use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "DATA_RELIABILITY",
-      "name": "Data related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "FAULT_TOLERANCE",
-      "name": "Fault tolerance",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_RELIABILITY",
-      "name": "Logic related reliability",
-      "parent": "RELIABILITY"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/search-qprofile-active.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/search-qprofile-active.json
deleted file mode 100644 (file)
index cbbb272..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-{
-  "total": 407,
-  "p": 1,
-  "ps": 25,
-  "rules": [
-    {
-      "key": "squid:S2077",
-      "name": "Values passed to SQL commands should be sanitized",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security",
-        "sql"
-      ],
-      "tags": [
-        "custom-tag"
-      ]
-    },
-    {
-      "key": "php:S107",
-      "name": "Functions should not have too many parameters",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1192",
-      "name": "String literals should not be duplicated",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1145",
-      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "bug",
-        "cwe",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S108",
-      "name": "Nested blocks of code should not be left empty",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1301",
-      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S103",
-      "name": "Lines should not be too long",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1144",
-      "name": "Unused private method should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S105",
-      "name": "Tabulation characters should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1481",
-      "name": "Unused local variables should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1142",
-      "name": "Functions should not contain too many return statements",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S104",
-      "name": "Files should not have too many lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1605",
-      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1448",
-      "name": "Classes should not have too many methods",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1603",
-      "name": "PHP 4 constructor declarations should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1779",
-      "name": "Only LF character (Unix-like) should be used to end lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1185",
-      "name": "Overriding methods should do more than simply call the same method in the super class",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1600",
-      "name": "Deprecated predefined variables should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1109",
-      "name": "A close curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2001",
-      "name": "Functions deprecated in PHP 5 should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "obsolete"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2002",
-      "name": "Errors should not be silenced",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2000",
-      "name": "Files should not contain characters before \"<?php\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "user-experience"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1105",
-      "name": "An open curly brace should be located at the end of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1200",
-      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1106",
-      "name": "An open curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "convention",
-          "count": 67
-        },
-        {
-          "val": "brain-overload",
-          "count": 36
-        },
-        {
-          "val": "bug",
-          "count": 36
-        },
-        {
-          "val": "cwe",
-          "count": 17
-        },
-        {
-          "val": "unused",
-          "count": 16
-        },
-        {
-          "val": "security",
-          "count": 14
-        },
-        {
-          "val": "pitfall",
-          "count": 12
-        },
-        {
-          "val": "psr2",
-          "count": 12
-        },
-        {
-          "val": "error-handling",
-          "count": 11
-        },
-        {
-          "val": "pitfail",
-          "count": 10
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 212
-        },
-        {
-          "val": "py",
-          "count": 212
-        },
-        {
-          "val": "php",
-          "count": 103
-        },
-        {
-          "val": "js",
-          "count": 77
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 206
-        },
-        {
-          "val": "Pylint",
-          "count": 180
-        },
-        {
-          "val": "php",
-          "count": 97
-        },
-        {
-          "val": "javascript",
-          "count": 73
-        },
-        {
-          "val": "python",
-          "count": 28
-        },
-        {
-          "val": "common-java",
-          "count": 6
-        },
-        {
-          "val": "common-php",
-          "count": 6
-        },
-        {
-          "val": "manual",
-          "count": 5
-        },
-        {
-          "val": "common-js",
-          "count": 4
-        },
-        {
-          "val": "common-py",
-          "count": 4
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/search-qprofile-inactive.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/search-qprofile-inactive.json
deleted file mode 100644 (file)
index 63dd5c4..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-{
-  "total": 408,
-  "p": 1,
-  "ps": 25,
-  "rules": [
-    {
-      "key": "squid:S2077",
-      "name": "Values passed to SQL commands should be sanitized",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security",
-        "sql"
-      ],
-      "tags": [
-        "custom-tag"
-      ]
-    },
-    {
-      "key": "php:S107",
-      "name": "Functions should not have too many parameters",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1192",
-      "name": "String literals should not be duplicated",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1145",
-      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "bug",
-        "cwe",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S108",
-      "name": "Nested blocks of code should not be left empty",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1301",
-      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S103",
-      "name": "Lines should not be too long",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1144",
-      "name": "Unused private method should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S105",
-      "name": "Tabulation characters should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1481",
-      "name": "Unused local variables should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1142",
-      "name": "Functions should not contain too many return statements",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S104",
-      "name": "Files should not have too many lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1605",
-      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1448",
-      "name": "Classes should not have too many methods",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1603",
-      "name": "PHP 4 constructor declarations should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1779",
-      "name": "Only LF character (Unix-like) should be used to end lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1185",
-      "name": "Overriding methods should do more than simply call the same method in the super class",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1600",
-      "name": "Deprecated predefined variables should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1109",
-      "name": "A close curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2001",
-      "name": "Functions deprecated in PHP 5 should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "obsolete"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2002",
-      "name": "Errors should not be silenced",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2000",
-      "name": "Files should not contain characters before \"<?php\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "user-experience"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1105",
-      "name": "An open curly brace should be located at the end of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1200",
-      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1106",
-      "name": "An open curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "convention",
-          "count": 67
-        },
-        {
-          "val": "brain-overload",
-          "count": 36
-        },
-        {
-          "val": "bug",
-          "count": 36
-        },
-        {
-          "val": "cwe",
-          "count": 17
-        },
-        {
-          "val": "unused",
-          "count": 16
-        },
-        {
-          "val": "security",
-          "count": 14
-        },
-        {
-          "val": "pitfall",
-          "count": 12
-        },
-        {
-          "val": "psr2",
-          "count": 12
-        },
-        {
-          "val": "error-handling",
-          "count": 11
-        },
-        {
-          "val": "pitfail",
-          "count": 10
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 212
-        },
-        {
-          "val": "py",
-          "count": 212
-        },
-        {
-          "val": "php",
-          "count": 103
-        },
-        {
-          "val": "js",
-          "count": 77
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 206
-        },
-        {
-          "val": "Pylint",
-          "count": 180
-        },
-        {
-          "val": "php",
-          "count": 97
-        },
-        {
-          "val": "javascript",
-          "count": 73
-        },
-        {
-          "val": "python",
-          "count": 28
-        },
-        {
-          "val": "common-java",
-          "count": 6
-        },
-        {
-          "val": "common-php",
-          "count": 6
-        },
-        {
-          "val": "manual",
-          "count": 5
-        },
-        {
-          "val": "common-js",
-          "count": 4
-        },
-        {
-          "val": "common-py",
-          "count": 4
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-quality-profile-facet/search.json
deleted file mode 100644 (file)
index c17c58d..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-{
-  "total": 609,
-  "p": 1,
-  "ps": 25,
-  "rules": [
-    {
-      "key": "squid:S2077",
-      "name": "Values passed to SQL commands should be sanitized",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security",
-        "sql"
-      ],
-      "tags": [
-        "custom-tag"
-      ]
-    },
-    {
-      "key": "php:S107",
-      "name": "Functions should not have too many parameters",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1192",
-      "name": "String literals should not be duplicated",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1145",
-      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "bug",
-        "cwe",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S108",
-      "name": "Nested blocks of code should not be left empty",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1301",
-      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S103",
-      "name": "Lines should not be too long",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1144",
-      "name": "Unused private method should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S105",
-      "name": "Tabulation characters should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1481",
-      "name": "Unused local variables should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1142",
-      "name": "Functions should not contain too many return statements",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S104",
-      "name": "Files should not have too many lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1605",
-      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1448",
-      "name": "Classes should not have too many methods",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1603",
-      "name": "PHP 4 constructor declarations should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1779",
-      "name": "Only LF character (Unix-like) should be used to end lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1185",
-      "name": "Overriding methods should do more than simply call the same method in the super class",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1600",
-      "name": "Deprecated predefined variables should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1109",
-      "name": "A close curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2001",
-      "name": "Functions deprecated in PHP 5 should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "obsolete"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2002",
-      "name": "Errors should not be silenced",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2000",
-      "name": "Files should not contain characters before \"<?php\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "user-experience"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1105",
-      "name": "An open curly brace should be located at the end of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1200",
-      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1106",
-      "name": "An open curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "convention",
-          "count": 67
-        },
-        {
-          "val": "brain-overload",
-          "count": 36
-        },
-        {
-          "val": "bug",
-          "count": 36
-        },
-        {
-          "val": "cwe",
-          "count": 17
-        },
-        {
-          "val": "unused",
-          "count": 16
-        },
-        {
-          "val": "security",
-          "count": 14
-        },
-        {
-          "val": "pitfall",
-          "count": 12
-        },
-        {
-          "val": "psr2",
-          "count": 12
-        },
-        {
-          "val": "error-handling",
-          "count": 11
-        },
-        {
-          "val": "pitfail",
-          "count": 10
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 212
-        },
-        {
-          "val": "py",
-          "count": 212
-        },
-        {
-          "val": "php",
-          "count": 103
-        },
-        {
-          "val": "js",
-          "count": 77
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 206
-        },
-        {
-          "val": "Pylint",
-          "count": 180
-        },
-        {
-          "val": "php",
-          "count": 97
-        },
-        {
-          "val": "javascript",
-          "count": 73
-        },
-        {
-          "val": "python",
-          "count": 28
-        },
-        {
-          "val": "common-java",
-          "count": 6
-        },
-        {
-          "val": "common-php",
-          "count": 6
-        },
-        {
-          "val": "manual",
-          "count": 5
-        },
-        {
-          "val": "common-js",
-          "count": 4
-        },
-        {
-          "val": "common-py",
-          "count": 4
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-query-facet.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-query-facet.js
deleted file mode 100644 (file)
index f071078..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules-page-query-facet');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-query-facet', 3, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        lib.mockRequestFromFile('/api/rules/search', 'search-query.json', { data: { q: 'query' } });
-        lib.mockRequestFromFile('/api/rules/search', 'search.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rule');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '609');
-        casper.evaluate(function () {
-          jQuery('[data-property="q"] input').val('query');
-          jQuery('[data-property="q"] form').submit();
-        });
-        casper.waitForSelectorTextChange('#coding-rules-total');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '4');
-        casper.evaluate(function () {
-          jQuery('[data-property="q"] input').val('');
-          jQuery('[data-property="q"] form').submit();
-        });
-        casper.waitForSelectorTextChange('#coding-rules-total');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', '609');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-query-facet/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-query-facet/app.json
deleted file mode 100644 (file)
index 0eb43bc..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-{
-  "canWrite": false,
-  "qualityprofiles": [
-    {
-      "key": "java-default-with-mojo-conventions-49307",
-      "name": "Default - Maven Conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-default-with-sonarsource-conventions-27339",
-      "name": "Default - SonarSource conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-top-profile-without-formatting-conventions-50037",
-      "name": "Default - Top",
-      "lang": "java"
-    },
-    {
-      "key": "java-findbugs-14954",
-      "name": "FindBugs",
-      "lang": "java"
-    },
-    {
-      "key": "java-for-sq-java-plugin-only-92289",
-      "name": "For SQ Java Plugin Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "java-for-sq-only-95381",
-      "name": "For SQ Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "php-psr-2-06315",
-      "name": "PSR-2",
-      "lang": "php"
-    },
-    {
-      "key": "java-sonar-way-80423",
-      "name": "Sonar way",
-      "lang": "java"
-    },
-    {
-      "key": "js-sonar-way",
-      "name": "Sonar way",
-      "lang": "js"
-    },
-    {
-      "key": "php-sonar-way-05548",
-      "name": "Sonar way",
-      "lang": "php"
-    },
-    {
-      "key": "py-sonar-way-80265",
-      "name": "Sonar way",
-      "lang": "py"
-    },
-    {
-      "key": "java-without-findbugs",
-      "name": "Without Findbugs",
-      "lang": "java"
-    }
-  ],
-  "languages": {
-    "py": "Python",
-    "js": "JavaScript",
-    "php": "PHP",
-    "java": "Java"
-  },
-  "repositories": [
-    {
-      "key": "common-java",
-      "name": "Common SonarQube",
-      "language": "java"
-    },
-    {
-      "key": "common-js",
-      "name": "Common SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "common-php",
-      "name": "Common SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "common-py",
-      "name": "Common SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "Pylint",
-      "name": "Pylint",
-      "language": "py"
-    },
-    {
-      "key": "javascript",
-      "name": "SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "php",
-      "name": "SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "python",
-      "name": "SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "squid",
-      "name": "SonarQube",
-      "language": "java"
-    }
-  ],
-  "statuses": {
-    "BETA": "Beta",
-    "DEPRECATED": "Deprecated",
-    "READY": "Ready"
-  },
-  "characteristics": [
-    {
-      "key": "UNDERSTANDABILITY",
-      "name": "Understandability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "MAINTAINABILITY",
-      "name": "Maintainability"
-    },
-    {
-      "key": "TIME_ZONE_RELATED_PORTABILITY",
-      "name": "Time zone related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "READABILITY",
-      "name": "Readability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "SECURITY_FEATURES",
-      "name": "Security features",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_RELIABILITY",
-      "name": "Architecture related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "OS_RELATED_PORTABILITY",
-      "name": "OS related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "EXCEPTION_HANDLING",
-      "name": "Exception handling",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_CHANGEABILITY",
-      "name": "Logic related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "SOFTWARE_RELATED_PORTABILITY",
-      "name": "Software related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
-      "name": "Input validation and representation",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "LANGUAGE_RELATED_PORTABILITY",
-      "name": "Language related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "ERRORS",
-      "name": "Errors",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "SECURITY",
-      "name": "Security"
-    },
-    {
-      "key": "RELIABILITY",
-      "name": "Reliability"
-    },
-    {
-      "key": "PORTABILITY",
-      "name": "Portability"
-    },
-    {
-      "key": "HARDWARE_RELATED_PORTABILITY",
-      "name": "Hardware related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "SYNCHRONIZATION_RELIABILITY",
-      "name": "Synchronization related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "TRANSPORTABILITY",
-      "name": "Transportability",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "COMPILER_RELATED_PORTABILITY",
-      "name": "Compiler related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "RESOURCE_RELIABILITY",
-      "name": "Resource",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "CPU_EFFICIENCY",
-      "name": "Processor use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "EFFICIENCY",
-      "name": "Efficiency"
-    },
-    {
-      "key": "CHANGEABILITY",
-      "name": "Changeability"
-    },
-    {
-      "key": "DATA_CHANGEABILITY",
-      "name": "Data related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "API_ABUSE",
-      "name": "API abuse",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_CHANGEABILITY",
-      "name": "Architecture related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "UNIT_TESTS",
-      "name": "Unit tests",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "INSTRUCTION_RELIABILITY",
-      "name": "Instruction related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "REUSABILITY",
-      "name": "Reusability"
-    },
-    {
-      "key": "MODULARITY",
-      "name": "Modularity",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "UNIT_TESTABILITY",
-      "name": "Unit level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "TESTABILITY",
-      "name": "Testability"
-    },
-    {
-      "key": "INTEGRATION_TESTABILITY",
-      "name": "Integration level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "NETWORK_USE",
-      "name": "Network use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "MEMORY_EFFICIENCY",
-      "name": "Memory use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "DATA_RELIABILITY",
-      "name": "Data related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "FAULT_TOLERANCE",
-      "name": "Fault tolerance",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_RELIABILITY",
-      "name": "Logic related reliability",
-      "parent": "RELIABILITY"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-query-facet/search-query.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-query-facet/search-query.json
deleted file mode 100644 (file)
index 3dc49f0..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-{
-  "total": 4,
-  "p": 1,
-  "ps": 25,
-  "rules": [
-    {
-      "key": "squid:S2077",
-      "name": "Values passed to SQL commands should be sanitized",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security",
-        "sql"
-      ],
-      "tags": [
-        "custom-tag"
-      ]
-    },
-    {
-      "key": "php:S107",
-      "name": "Functions should not have too many parameters",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1192",
-      "name": "String literals should not be duplicated",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1145",
-      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "bug",
-        "cwe",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S108",
-      "name": "Nested blocks of code should not be left empty",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1301",
-      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S103",
-      "name": "Lines should not be too long",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1144",
-      "name": "Unused private method should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S105",
-      "name": "Tabulation characters should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1481",
-      "name": "Unused local variables should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1142",
-      "name": "Functions should not contain too many return statements",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S104",
-      "name": "Files should not have too many lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1605",
-      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1448",
-      "name": "Classes should not have too many methods",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1603",
-      "name": "PHP 4 constructor declarations should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1779",
-      "name": "Only LF character (Unix-like) should be used to end lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1185",
-      "name": "Overriding methods should do more than simply call the same method in the super class",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1600",
-      "name": "Deprecated predefined variables should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1109",
-      "name": "A close curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2001",
-      "name": "Functions deprecated in PHP 5 should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "obsolete"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2002",
-      "name": "Errors should not be silenced",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2000",
-      "name": "Files should not contain characters before \"<?php\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "user-experience"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1105",
-      "name": "An open curly brace should be located at the end of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1200",
-      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1106",
-      "name": "An open curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "convention",
-          "count": 67
-        },
-        {
-          "val": "brain-overload",
-          "count": 36
-        },
-        {
-          "val": "bug",
-          "count": 36
-        },
-        {
-          "val": "cwe",
-          "count": 17
-        },
-        {
-          "val": "unused",
-          "count": 16
-        },
-        {
-          "val": "security",
-          "count": 14
-        },
-        {
-          "val": "pitfall",
-          "count": 12
-        },
-        {
-          "val": "psr2",
-          "count": 12
-        },
-        {
-          "val": "error-handling",
-          "count": 11
-        },
-        {
-          "val": "pitfail",
-          "count": 10
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 212
-        },
-        {
-          "val": "py",
-          "count": 212
-        },
-        {
-          "val": "php",
-          "count": 103
-        },
-        {
-          "val": "js",
-          "count": 77
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 206
-        },
-        {
-          "val": "Pylint",
-          "count": 180
-        },
-        {
-          "val": "php",
-          "count": 97
-        },
-        {
-          "val": "javascript",
-          "count": 73
-        },
-        {
-          "val": "python",
-          "count": 28
-        },
-        {
-          "val": "common-java",
-          "count": 6
-        },
-        {
-          "val": "common-php",
-          "count": 6
-        },
-        {
-          "val": "manual",
-          "count": 5
-        },
-        {
-          "val": "common-js",
-          "count": 4
-        },
-        {
-          "val": "common-py",
-          "count": 4
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-query-facet/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-query-facet/search.json
deleted file mode 100644 (file)
index c17c58d..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-{
-  "total": 609,
-  "p": 1,
-  "ps": 25,
-  "rules": [
-    {
-      "key": "squid:S2077",
-      "name": "Values passed to SQL commands should be sanitized",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security",
-        "sql"
-      ],
-      "tags": [
-        "custom-tag"
-      ]
-    },
-    {
-      "key": "php:S107",
-      "name": "Functions should not have too many parameters",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1192",
-      "name": "String literals should not be duplicated",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1145",
-      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "bug",
-        "cwe",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S108",
-      "name": "Nested blocks of code should not be left empty",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1301",
-      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S103",
-      "name": "Lines should not be too long",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1144",
-      "name": "Unused private method should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S105",
-      "name": "Tabulation characters should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1481",
-      "name": "Unused local variables should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1142",
-      "name": "Functions should not contain too many return statements",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S104",
-      "name": "Files should not have too many lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1605",
-      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1448",
-      "name": "Classes should not have too many methods",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1603",
-      "name": "PHP 4 constructor declarations should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1779",
-      "name": "Only LF character (Unix-like) should be used to end lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1185",
-      "name": "Overriding methods should do more than simply call the same method in the super class",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1600",
-      "name": "Deprecated predefined variables should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1109",
-      "name": "A close curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2001",
-      "name": "Functions deprecated in PHP 5 should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "obsolete"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2002",
-      "name": "Errors should not be silenced",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2000",
-      "name": "Files should not contain characters before \"<?php\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "user-experience"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1105",
-      "name": "An open curly brace should be located at the end of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1200",
-      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1106",
-      "name": "An open curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "convention",
-          "count": 67
-        },
-        {
-          "val": "brain-overload",
-          "count": 36
-        },
-        {
-          "val": "bug",
-          "count": 36
-        },
-        {
-          "val": "cwe",
-          "count": 17
-        },
-        {
-          "val": "unused",
-          "count": 16
-        },
-        {
-          "val": "security",
-          "count": 14
-        },
-        {
-          "val": "pitfall",
-          "count": 12
-        },
-        {
-          "val": "psr2",
-          "count": 12
-        },
-        {
-          "val": "error-handling",
-          "count": 11
-        },
-        {
-          "val": "pitfail",
-          "count": 10
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 212
-        },
-        {
-          "val": "py",
-          "count": 212
-        },
-        {
-          "val": "php",
-          "count": 103
-        },
-        {
-          "val": "js",
-          "count": 77
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 206
-        },
-        {
-          "val": "Pylint",
-          "count": 180
-        },
-        {
-          "val": "php",
-          "count": 97
-        },
-        {
-          "val": "javascript",
-          "count": 73
-        },
-        {
-          "val": "python",
-          "count": 28
-        },
-        {
-          "val": "common-java",
-          "count": 6
-        },
-        {
-          "val": "common-php",
-          "count": 6
-        },
-        {
-          "val": "manual",
-          "count": 5
-        },
-        {
-          "val": "common-js",
-          "count": 4
-        },
-        {
-          "val": "common-py",
-          "count": 4
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-rule-permalink/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-rule-permalink/app.json
deleted file mode 100644 (file)
index 0eb43bc..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-{
-  "canWrite": false,
-  "qualityprofiles": [
-    {
-      "key": "java-default-with-mojo-conventions-49307",
-      "name": "Default - Maven Conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-default-with-sonarsource-conventions-27339",
-      "name": "Default - SonarSource conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-top-profile-without-formatting-conventions-50037",
-      "name": "Default - Top",
-      "lang": "java"
-    },
-    {
-      "key": "java-findbugs-14954",
-      "name": "FindBugs",
-      "lang": "java"
-    },
-    {
-      "key": "java-for-sq-java-plugin-only-92289",
-      "name": "For SQ Java Plugin Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "java-for-sq-only-95381",
-      "name": "For SQ Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "php-psr-2-06315",
-      "name": "PSR-2",
-      "lang": "php"
-    },
-    {
-      "key": "java-sonar-way-80423",
-      "name": "Sonar way",
-      "lang": "java"
-    },
-    {
-      "key": "js-sonar-way",
-      "name": "Sonar way",
-      "lang": "js"
-    },
-    {
-      "key": "php-sonar-way-05548",
-      "name": "Sonar way",
-      "lang": "php"
-    },
-    {
-      "key": "py-sonar-way-80265",
-      "name": "Sonar way",
-      "lang": "py"
-    },
-    {
-      "key": "java-without-findbugs",
-      "name": "Without Findbugs",
-      "lang": "java"
-    }
-  ],
-  "languages": {
-    "py": "Python",
-    "js": "JavaScript",
-    "php": "PHP",
-    "java": "Java"
-  },
-  "repositories": [
-    {
-      "key": "common-java",
-      "name": "Common SonarQube",
-      "language": "java"
-    },
-    {
-      "key": "common-js",
-      "name": "Common SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "common-php",
-      "name": "Common SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "common-py",
-      "name": "Common SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "Pylint",
-      "name": "Pylint",
-      "language": "py"
-    },
-    {
-      "key": "javascript",
-      "name": "SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "php",
-      "name": "SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "python",
-      "name": "SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "squid",
-      "name": "SonarQube",
-      "language": "java"
-    }
-  ],
-  "statuses": {
-    "BETA": "Beta",
-    "DEPRECATED": "Deprecated",
-    "READY": "Ready"
-  },
-  "characteristics": [
-    {
-      "key": "UNDERSTANDABILITY",
-      "name": "Understandability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "MAINTAINABILITY",
-      "name": "Maintainability"
-    },
-    {
-      "key": "TIME_ZONE_RELATED_PORTABILITY",
-      "name": "Time zone related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "READABILITY",
-      "name": "Readability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "SECURITY_FEATURES",
-      "name": "Security features",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_RELIABILITY",
-      "name": "Architecture related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "OS_RELATED_PORTABILITY",
-      "name": "OS related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "EXCEPTION_HANDLING",
-      "name": "Exception handling",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_CHANGEABILITY",
-      "name": "Logic related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "SOFTWARE_RELATED_PORTABILITY",
-      "name": "Software related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
-      "name": "Input validation and representation",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "LANGUAGE_RELATED_PORTABILITY",
-      "name": "Language related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "ERRORS",
-      "name": "Errors",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "SECURITY",
-      "name": "Security"
-    },
-    {
-      "key": "RELIABILITY",
-      "name": "Reliability"
-    },
-    {
-      "key": "PORTABILITY",
-      "name": "Portability"
-    },
-    {
-      "key": "HARDWARE_RELATED_PORTABILITY",
-      "name": "Hardware related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "SYNCHRONIZATION_RELIABILITY",
-      "name": "Synchronization related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "TRANSPORTABILITY",
-      "name": "Transportability",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "COMPILER_RELATED_PORTABILITY",
-      "name": "Compiler related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "RESOURCE_RELIABILITY",
-      "name": "Resource",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "CPU_EFFICIENCY",
-      "name": "Processor use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "EFFICIENCY",
-      "name": "Efficiency"
-    },
-    {
-      "key": "CHANGEABILITY",
-      "name": "Changeability"
-    },
-    {
-      "key": "DATA_CHANGEABILITY",
-      "name": "Data related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "API_ABUSE",
-      "name": "API abuse",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_CHANGEABILITY",
-      "name": "Architecture related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "UNIT_TESTS",
-      "name": "Unit tests",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "INSTRUCTION_RELIABILITY",
-      "name": "Instruction related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "REUSABILITY",
-      "name": "Reusability"
-    },
-    {
-      "key": "MODULARITY",
-      "name": "Modularity",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "UNIT_TESTABILITY",
-      "name": "Unit level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "TESTABILITY",
-      "name": "Testability"
-    },
-    {
-      "key": "INTEGRATION_TESTABILITY",
-      "name": "Integration level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "NETWORK_USE",
-      "name": "Network use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "MEMORY_EFFICIENCY",
-      "name": "Memory use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "DATA_RELIABILITY",
-      "name": "Data related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "FAULT_TOLERANCE",
-      "name": "Fault tolerance",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_RELIABILITY",
-      "name": "Logic related reliability",
-      "parent": "RELIABILITY"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-rule-permalink/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-rule-permalink/search.json
deleted file mode 100644 (file)
index b5a6bc2..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-{
-  "total": 10,
-  "p": 1,
-  "ps": 200,
-  "rules": [
-    {
-      "key": "squid:S1181",
-      "name": "Throwable and Error classes should not be caught",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "error-handling"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1849",
-      "name": "\"Iterator.hasNext()\" should not call \"Iterator.next()\"",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1844",
-      "name": "\"Object.wait(...)\" should never be called on objects that implement \"java.util.concurrent.locks.Condition\"",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug",
-        "pitfall"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S2258",
-      "name": "\"javax.crypto.NullCipher\" should not be used for anything other than testing",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S2251",
-      "name": "A \"for\" loop update clause should move the counter in the right direction",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:ObjectFinalizeOverridenCallsSuperFinalizeCheck",
-      "name": "super.finalize() should be called at the end of Object.finalize() implementations",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1143",
-      "name": "Return statements should not occur in finally blocks",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1206",
-      "name": "\"equals(Object obj)\" and \"hashCode()\" should be overridden in pairs",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1451",
-      "name": "Copyright and license headers should be defined in all source files",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1697",
-      "name": "Short-circuit logic should be used to prevent null pointer dereferences in conditionals",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "bug",
-          "count": 7
-        },
-        {
-          "val": "convention",
-          "count": 1
-        },
-        {
-          "val": "cwe",
-          "count": 1
-        },
-        {
-          "val": "error-handling",
-          "count": 1
-        },
-        {
-          "val": "owasp-top10",
-          "count": 1
-        },
-        {
-          "val": "pitfall",
-          "count": 1
-        },
-        {
-          "val": "security",
-          "count": 1
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 10
-        },
-        {
-          "val": "js",
-          "count": 6
-        },
-        {
-          "val": "php",
-          "count": 2
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 10
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-rule-permalink/show.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-rule-permalink/show.json
deleted file mode 100644 (file)
index 274b587..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-  "rule": {
-    "key": "squid:S1181",
-    "repo": "squid",
-    "name": "Throwable and Error classes should not be caught",
-    "createdAt": "2013-08-09T14:40:54+0200",
-    "severity": "BLOCKER",
-    "status": "READY",
-    "internalKey": "S1181",
-    "isTemplate": false,
-    "tags": [],
-    "sysTags": [
-      "error-handling"
-    ],
-    "lang": "java",
-    "langName": "Java",
-    "htmlDesc": "<p>\n<code>Throwable</code> is the superclass of all errors and exceptions in Java.\n<code>Error</code> is the superclass of all errors which are not meant to be caught by applications.\n</p>\n\n<p>\nCatching either <code>Throwable</code> or <code>Error</code> will also catch <code>OutOfMemoryError</code> or <code>InternalError</code> from which an application should not attempt to recover.\n</p>\n\n<p>Only <code>Exception</code> and its subclasses should be caught.</p>\n\n<h2>Noncompliant Code Example</h2>\n\n<pre>\ntry { /* ... */ } catch (Throwable t) { /* ... */ }\ntry { /* ... */ } catch (Error e) { /* ... */ } \n</pre>\n\n<h2>Compliant Solution</h2>\n\n<pre>\ntry { /* ... */ } catch (Exception e) { /* ... */ }  \ntry { /* ... */ } catch (RuntimeException e) { /* ... */ }  \ntry { /* ... */ } catch (MyException e) { /* ... */ }  \n</pre>",
-    "defaultDebtChar": "RELIABILITY",
-    "defaultDebtSubChar": "EXCEPTION_HANDLING",
-    "debtChar": "RELIABILITY",
-    "debtSubChar": "EXCEPTION_HANDLING",
-    "debtCharName": "Reliability",
-    "debtSubCharName": "Exception handling",
-    "defaultDebtRemFnType": "CONSTANT_ISSUE",
-    "defaultDebtRemFnOffset": "20min",
-    "debtOverloaded": true,
-    "debtRemFnType": "LINEAR",
-    "debtRemFnCoeff": "20min",
-    "params": [
-      {
-        "key": "max",
-        "htmlDesc": "Maximum authorized number of parameters",
-        "type": "INTEGER",
-        "defaultValue": "7"
-      }
-    ]
-  },
-  "actives": [
-    {
-      "qProfile": "java-top-profile-without-formatting-conventions-50037",
-      "inherit": "NONE",
-      "severity": "BLOCKER",
-      "params": []
-    },
-    {
-      "qProfile": "java-default-with-sonarsource-conventions-27339",
-      "inherit": "INHERITED",
-      "severity": "BLOCKER",
-      "params": []
-    },
-    {
-      "qProfile": "java-for-sq-java-plugin-only-92289",
-      "inherit": "INHERITED",
-      "severity": "BLOCKER",
-      "params": []
-    },
-    {
-      "qProfile": "java-for-sq-only-95381",
-      "inherit": "INHERITED",
-      "severity": "BLOCKER",
-      "params": []
-    },
-    {
-      "qProfile": "java-default-with-mojo-conventions-49307",
-      "inherit": "INHERITED",
-      "severity": "BLOCKER",
-      "params": []
-    },
-    {
-      "qProfile": "java-sonar-way-80423",
-      "inherit": "NONE",
-      "severity": "BLOCKER",
-      "params": []
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-rule-should-have-permalink.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-rule-should-have-permalink.js
deleted file mode 100644 (file)
index 37b89e6..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules-page-rule-permalink');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-rule-permalink', 1, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        lib.mockRequestFromFile('/api/rules/search', 'search.json');
-        lib.mockRequestFromFile('/api/rules/show', 'show.json');
-        lib.mockRequest('/api/issues/search', '{}');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rule.selected');
-      })
-
-      .then(function () {
-        casper.click('.coding-rule.selected .js-rule');
-        casper.waitForSelector('.coding-rules-detail-header');
-      })
-
-      .then(function () {
-        test.assertExists('a[href="/coding_rules#rule_key=squid%3AS1181"]');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-activate-profile.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-activate-profile.js
deleted file mode 100644 (file)
index d0ac3bd..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules-page-should-activate-profile');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-should-activate-profile', 5, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        lib.mockRequestFromFile('/api/rules/search', 'search.json');
-        this.showMock = lib.mockRequestFromFile('/api/rules/show', 'show.json');
-        lib.mockRequest('/api/qualityprofiles/activate_rule', '{}');
-        lib.mockRequest('/api/issues/search', '{}');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rule.selected', function () {
-          casper.click('.coding-rule.selected .js-rule');
-        });
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rules-detail-header');
-      })
-
-      .then(function () {
-        test.assertDoesntExist('.coding-rules-detail-quality-profile-name');
-        test.assertExist('#coding-rules-quality-profile-activate');
-        casper.click('#coding-rules-quality-profile-activate');
-        casper.waitForSelector('.modal');
-      })
-
-      .then(function () {
-        lib.clearRequestMock(this.showMock);
-        lib.mockRequestFromFile('/api/rules/show', 'show-with-profile.json');
-        casper.click('#coding-rules-quality-profile-activation-activate');
-        casper.waitForSelector('.coding-rules-detail-quality-profile-name');
-      })
-
-      .then(function () {
-        test.assertExists('.coding-rules-detail-quality-profile-name');
-        test.assertExists('.coding-rules-detail-quality-profile-severity');
-        test.assertExists('.coding-rules-detail-quality-profile-deactivate');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-activate-profile/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-activate-profile/app.json
deleted file mode 100644 (file)
index 50148bb..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-{
-  "canWrite": true,
-  "qualityprofiles": [
-    {
-      "key": "java-default-with-mojo-conventions-49307",
-      "name": "Default - Maven Conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-default-with-sonarsource-conventions-27339",
-      "name": "Default - SonarSource conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-top-profile-without-formatting-conventions-50037",
-      "name": "Default - Top",
-      "lang": "java"
-    },
-    {
-      "key": "java-findbugs-14954",
-      "name": "FindBugs",
-      "lang": "java"
-    },
-    {
-      "key": "java-for-sq-java-plugin-only-92289",
-      "name": "For SQ Java Plugin Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "java-for-sq-only-95381",
-      "name": "For SQ Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "php-psr-2-06315",
-      "name": "PSR-2",
-      "lang": "php"
-    },
-    {
-      "key": "java-sonar-way-80423",
-      "name": "Sonar way",
-      "lang": "java"
-    },
-    {
-      "key": "js-sonar-way",
-      "name": "Sonar way",
-      "lang": "js"
-    },
-    {
-      "key": "php-sonar-way-05548",
-      "name": "Sonar way",
-      "lang": "php"
-    },
-    {
-      "key": "py-sonar-way-80265",
-      "name": "Sonar way",
-      "lang": "py"
-    },
-    {
-      "key": "java-without-findbugs",
-      "name": "Without Findbugs",
-      "lang": "java"
-    }
-  ],
-  "languages": {
-    "py": "Python",
-    "js": "JavaScript",
-    "php": "PHP",
-    "java": "Java"
-  },
-  "repositories": [
-    {
-      "key": "common-java",
-      "name": "Common SonarQube",
-      "language": "java"
-    },
-    {
-      "key": "common-js",
-      "name": "Common SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "common-php",
-      "name": "Common SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "common-py",
-      "name": "Common SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "Pylint",
-      "name": "Pylint",
-      "language": "py"
-    },
-    {
-      "key": "javascript",
-      "name": "SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "php",
-      "name": "SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "python",
-      "name": "SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "squid",
-      "name": "SonarQube",
-      "language": "java"
-    }
-  ],
-  "statuses": {
-    "BETA": "Beta",
-    "DEPRECATED": "Deprecated",
-    "READY": "Ready"
-  },
-  "characteristics": [
-    {
-      "key": "UNDERSTANDABILITY",
-      "name": "Understandability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "MAINTAINABILITY",
-      "name": "Maintainability"
-    },
-    {
-      "key": "TIME_ZONE_RELATED_PORTABILITY",
-      "name": "Time zone related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "READABILITY",
-      "name": "Readability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "SECURITY_FEATURES",
-      "name": "Security features",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_RELIABILITY",
-      "name": "Architecture related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "OS_RELATED_PORTABILITY",
-      "name": "OS related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "EXCEPTION_HANDLING",
-      "name": "Exception handling",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_CHANGEABILITY",
-      "name": "Logic related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "SOFTWARE_RELATED_PORTABILITY",
-      "name": "Software related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
-      "name": "Input validation and representation",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "LANGUAGE_RELATED_PORTABILITY",
-      "name": "Language related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "ERRORS",
-      "name": "Errors",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "SECURITY",
-      "name": "Security"
-    },
-    {
-      "key": "RELIABILITY",
-      "name": "Reliability"
-    },
-    {
-      "key": "PORTABILITY",
-      "name": "Portability"
-    },
-    {
-      "key": "HARDWARE_RELATED_PORTABILITY",
-      "name": "Hardware related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "SYNCHRONIZATION_RELIABILITY",
-      "name": "Synchronization related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "TRANSPORTABILITY",
-      "name": "Transportability",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "COMPILER_RELATED_PORTABILITY",
-      "name": "Compiler related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "RESOURCE_RELIABILITY",
-      "name": "Resource",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "CPU_EFFICIENCY",
-      "name": "Processor use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "EFFICIENCY",
-      "name": "Efficiency"
-    },
-    {
-      "key": "CHANGEABILITY",
-      "name": "Changeability"
-    },
-    {
-      "key": "DATA_CHANGEABILITY",
-      "name": "Data related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "API_ABUSE",
-      "name": "API abuse",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_CHANGEABILITY",
-      "name": "Architecture related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "UNIT_TESTS",
-      "name": "Unit tests",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "INSTRUCTION_RELIABILITY",
-      "name": "Instruction related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "REUSABILITY",
-      "name": "Reusability"
-    },
-    {
-      "key": "MODULARITY",
-      "name": "Modularity",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "UNIT_TESTABILITY",
-      "name": "Unit level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "TESTABILITY",
-      "name": "Testability"
-    },
-    {
-      "key": "INTEGRATION_TESTABILITY",
-      "name": "Integration level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "NETWORK_USE",
-      "name": "Network use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "MEMORY_EFFICIENCY",
-      "name": "Memory use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "DATA_RELIABILITY",
-      "name": "Data related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "FAULT_TOLERANCE",
-      "name": "Fault tolerance",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_RELIABILITY",
-      "name": "Logic related reliability",
-      "parent": "RELIABILITY"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-activate-profile/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-activate-profile/search.json
deleted file mode 100644 (file)
index b5a6bc2..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-{
-  "total": 10,
-  "p": 1,
-  "ps": 200,
-  "rules": [
-    {
-      "key": "squid:S1181",
-      "name": "Throwable and Error classes should not be caught",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "error-handling"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1849",
-      "name": "\"Iterator.hasNext()\" should not call \"Iterator.next()\"",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1844",
-      "name": "\"Object.wait(...)\" should never be called on objects that implement \"java.util.concurrent.locks.Condition\"",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug",
-        "pitfall"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S2258",
-      "name": "\"javax.crypto.NullCipher\" should not be used for anything other than testing",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S2251",
-      "name": "A \"for\" loop update clause should move the counter in the right direction",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:ObjectFinalizeOverridenCallsSuperFinalizeCheck",
-      "name": "super.finalize() should be called at the end of Object.finalize() implementations",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1143",
-      "name": "Return statements should not occur in finally blocks",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1206",
-      "name": "\"equals(Object obj)\" and \"hashCode()\" should be overridden in pairs",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1451",
-      "name": "Copyright and license headers should be defined in all source files",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1697",
-      "name": "Short-circuit logic should be used to prevent null pointer dereferences in conditionals",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "bug",
-          "count": 7
-        },
-        {
-          "val": "convention",
-          "count": 1
-        },
-        {
-          "val": "cwe",
-          "count": 1
-        },
-        {
-          "val": "error-handling",
-          "count": 1
-        },
-        {
-          "val": "owasp-top10",
-          "count": 1
-        },
-        {
-          "val": "pitfall",
-          "count": 1
-        },
-        {
-          "val": "security",
-          "count": 1
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 10
-        },
-        {
-          "val": "js",
-          "count": 6
-        },
-        {
-          "val": "php",
-          "count": 2
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 10
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-activate-profile/show-with-profile.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-activate-profile/show-with-profile.json
deleted file mode 100644 (file)
index 1fddeb6..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-  "rule": {
-    "key": "squid:S1181",
-    "repo": "squid",
-    "name": "Throwable and Error classes should not be caught",
-    "createdAt": "2013-08-09T14:40:54+0200",
-    "severity": "BLOCKER",
-    "status": "READY",
-    "internalKey": "S1181",
-    "isTemplate": false,
-    "tags": [],
-    "sysTags": [
-      "error-handling"
-    ],
-    "lang": "java",
-    "langName": "Java",
-    "htmlDesc": "<p>\n<code>Throwable</code> is the superclass of all errors and exceptions in Java.\n<code>Error</code> is the superclass of all errors which are not meant to be caught by applications.\n</p>\n\n<p>\nCatching either <code>Throwable</code> or <code>Error</code> will also catch <code>OutOfMemoryError</code> or <code>InternalError</code> from which an application should not attempt to recover.\n</p>\n\n<p>Only <code>Exception</code> and its subclasses should be caught.</p>\n\n<h2>Noncompliant Code Example</h2>\n\n<pre>\ntry { /* ... */ } catch (Throwable t) { /* ... */ }\ntry { /* ... */ } catch (Error e) { /* ... */ } \n</pre>\n\n<h2>Compliant Solution</h2>\n\n<pre>\ntry { /* ... */ } catch (Exception e) { /* ... */ }  \ntry { /* ... */ } catch (RuntimeException e) { /* ... */ }  \ntry { /* ... */ } catch (MyException e) { /* ... */ }  \n</pre>",
-    "defaultDebtChar": "RELIABILITY",
-    "defaultDebtSubChar": "EXCEPTION_HANDLING",
-    "debtChar": "RELIABILITY",
-    "debtSubChar": "EXCEPTION_HANDLING",
-    "debtCharName": "Reliability",
-    "debtSubCharName": "Exception handling",
-    "defaultDebtRemFnType": "CONSTANT_ISSUE",
-    "defaultDebtRemFnOffset": "20min",
-    "debtOverloaded": true,
-    "debtRemFnType": "LINEAR",
-    "debtRemFnCoeff": "20min",
-    "params": []
-  },
-  "actives": [
-    {
-      "qProfile": "java-default-with-mojo-conventions-49307",
-      "inherit": "NONE",
-      "severity": "BLOCKER",
-      "params": []
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-activate-profile/show.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-activate-profile/show.json
deleted file mode 100644 (file)
index cf4b206..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-{
-  "rule": {
-    "key": "squid:S1181",
-    "repo": "squid",
-    "name": "Throwable and Error classes should not be caught",
-    "createdAt": "2013-08-09T14:40:54+0200",
-    "severity": "BLOCKER",
-    "status": "READY",
-    "internalKey": "S1181",
-    "isTemplate": false,
-    "tags": [],
-    "sysTags": [
-      "error-handling"
-    ],
-    "lang": "java",
-    "langName": "Java",
-    "htmlDesc": "<p>\n<code>Throwable</code> is the superclass of all errors and exceptions in Java.\n<code>Error</code> is the superclass of all errors which are not meant to be caught by applications.\n</p>\n\n<p>\nCatching either <code>Throwable</code> or <code>Error</code> will also catch <code>OutOfMemoryError</code> or <code>InternalError</code> from which an application should not attempt to recover.\n</p>\n\n<p>Only <code>Exception</code> and its subclasses should be caught.</p>\n\n<h2>Noncompliant Code Example</h2>\n\n<pre>\ntry { /* ... */ } catch (Throwable t) { /* ... */ }\ntry { /* ... */ } catch (Error e) { /* ... */ } \n</pre>\n\n<h2>Compliant Solution</h2>\n\n<pre>\ntry { /* ... */ } catch (Exception e) { /* ... */ }  \ntry { /* ... */ } catch (RuntimeException e) { /* ... */ }  \ntry { /* ... */ } catch (MyException e) { /* ... */ }  \n</pre>",
-    "defaultDebtChar": "RELIABILITY",
-    "defaultDebtSubChar": "EXCEPTION_HANDLING",
-    "debtChar": "RELIABILITY",
-    "debtSubChar": "EXCEPTION_HANDLING",
-    "debtCharName": "Reliability",
-    "debtSubCharName": "Exception handling",
-    "defaultDebtRemFnType": "CONSTANT_ISSUE",
-    "defaultDebtRemFnOffset": "20min",
-    "debtOverloaded": true,
-    "debtRemFnType": "LINEAR",
-    "debtRemFnCoeff": "20min",
-    "params": []
-  },
-  "actives": []
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-custom-rules.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-custom-rules.js
deleted file mode 100644 (file)
index ab36a36..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules-page-should-create-custom-rules');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-should-delete-create-rules', 2, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        this.customRulesSearchMock = lib.mockRequestFromFile('/api/rules/search', 'search-custom-rules.json',
-            { data: { template_key: 'squid:ArchitecturalConstraint' } });
-        this.searchMock = lib.mockRequestFromFile('/api/rules/search', 'search.json');
-        lib.mockRequestFromFile('/api/rules/show', 'show.json');
-        lib.mockRequest('/api/rules/create', '{}');
-        lib.mockRequest('/api/issues/search', '{}');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rule.selected', function () {
-          casper.click('.coding-rule.selected .js-rule');
-        });
-      })
-
-      .then(function () {
-        casper.waitForSelector('#coding-rules-detail-custom-rules .coding-rules-detail-list-name');
-      })
-
-      .then(function () {
-        lib.clearRequestMock(this.customRulesSearchMock);
-        lib.clearRequestMock(this.searchMock);
-        lib.mockRequestFromFile('/api/rules/search', 'search-custom-rules2.json');
-      })
-
-      .then(function () {
-        test.assertElementCount('#coding-rules-detail-custom-rules .coding-rules-detail-list-name', 1);
-        casper.click('.js-create-custom-rule');
-        casper.fillForm('.modal form', {
-          name: 'test',
-          markdown_description: 'test'
-        });
-        casper.click('#coding-rules-custom-rule-creation-create');
-        lib.waitForElementCount('#coding-rules-detail-custom-rules .coding-rules-detail-list-name', 2, function () {
-          test.assert(true); // put dummy assert into wait statement
-        });
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-custom-rules/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-custom-rules/app.json
deleted file mode 100644 (file)
index 50148bb..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-{
-  "canWrite": true,
-  "qualityprofiles": [
-    {
-      "key": "java-default-with-mojo-conventions-49307",
-      "name": "Default - Maven Conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-default-with-sonarsource-conventions-27339",
-      "name": "Default - SonarSource conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-top-profile-without-formatting-conventions-50037",
-      "name": "Default - Top",
-      "lang": "java"
-    },
-    {
-      "key": "java-findbugs-14954",
-      "name": "FindBugs",
-      "lang": "java"
-    },
-    {
-      "key": "java-for-sq-java-plugin-only-92289",
-      "name": "For SQ Java Plugin Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "java-for-sq-only-95381",
-      "name": "For SQ Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "php-psr-2-06315",
-      "name": "PSR-2",
-      "lang": "php"
-    },
-    {
-      "key": "java-sonar-way-80423",
-      "name": "Sonar way",
-      "lang": "java"
-    },
-    {
-      "key": "js-sonar-way",
-      "name": "Sonar way",
-      "lang": "js"
-    },
-    {
-      "key": "php-sonar-way-05548",
-      "name": "Sonar way",
-      "lang": "php"
-    },
-    {
-      "key": "py-sonar-way-80265",
-      "name": "Sonar way",
-      "lang": "py"
-    },
-    {
-      "key": "java-without-findbugs",
-      "name": "Without Findbugs",
-      "lang": "java"
-    }
-  ],
-  "languages": {
-    "py": "Python",
-    "js": "JavaScript",
-    "php": "PHP",
-    "java": "Java"
-  },
-  "repositories": [
-    {
-      "key": "common-java",
-      "name": "Common SonarQube",
-      "language": "java"
-    },
-    {
-      "key": "common-js",
-      "name": "Common SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "common-php",
-      "name": "Common SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "common-py",
-      "name": "Common SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "Pylint",
-      "name": "Pylint",
-      "language": "py"
-    },
-    {
-      "key": "javascript",
-      "name": "SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "php",
-      "name": "SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "python",
-      "name": "SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "squid",
-      "name": "SonarQube",
-      "language": "java"
-    }
-  ],
-  "statuses": {
-    "BETA": "Beta",
-    "DEPRECATED": "Deprecated",
-    "READY": "Ready"
-  },
-  "characteristics": [
-    {
-      "key": "UNDERSTANDABILITY",
-      "name": "Understandability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "MAINTAINABILITY",
-      "name": "Maintainability"
-    },
-    {
-      "key": "TIME_ZONE_RELATED_PORTABILITY",
-      "name": "Time zone related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "READABILITY",
-      "name": "Readability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "SECURITY_FEATURES",
-      "name": "Security features",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_RELIABILITY",
-      "name": "Architecture related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "OS_RELATED_PORTABILITY",
-      "name": "OS related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "EXCEPTION_HANDLING",
-      "name": "Exception handling",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_CHANGEABILITY",
-      "name": "Logic related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "SOFTWARE_RELATED_PORTABILITY",
-      "name": "Software related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
-      "name": "Input validation and representation",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "LANGUAGE_RELATED_PORTABILITY",
-      "name": "Language related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "ERRORS",
-      "name": "Errors",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "SECURITY",
-      "name": "Security"
-    },
-    {
-      "key": "RELIABILITY",
-      "name": "Reliability"
-    },
-    {
-      "key": "PORTABILITY",
-      "name": "Portability"
-    },
-    {
-      "key": "HARDWARE_RELATED_PORTABILITY",
-      "name": "Hardware related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "SYNCHRONIZATION_RELIABILITY",
-      "name": "Synchronization related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "TRANSPORTABILITY",
-      "name": "Transportability",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "COMPILER_RELATED_PORTABILITY",
-      "name": "Compiler related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "RESOURCE_RELIABILITY",
-      "name": "Resource",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "CPU_EFFICIENCY",
-      "name": "Processor use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "EFFICIENCY",
-      "name": "Efficiency"
-    },
-    {
-      "key": "CHANGEABILITY",
-      "name": "Changeability"
-    },
-    {
-      "key": "DATA_CHANGEABILITY",
-      "name": "Data related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "API_ABUSE",
-      "name": "API abuse",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_CHANGEABILITY",
-      "name": "Architecture related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "UNIT_TESTS",
-      "name": "Unit tests",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "INSTRUCTION_RELIABILITY",
-      "name": "Instruction related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "REUSABILITY",
-      "name": "Reusability"
-    },
-    {
-      "key": "MODULARITY",
-      "name": "Modularity",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "UNIT_TESTABILITY",
-      "name": "Unit level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "TESTABILITY",
-      "name": "Testability"
-    },
-    {
-      "key": "INTEGRATION_TESTABILITY",
-      "name": "Integration level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "NETWORK_USE",
-      "name": "Network use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "MEMORY_EFFICIENCY",
-      "name": "Memory use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "DATA_RELIABILITY",
-      "name": "Data related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "FAULT_TOLERANCE",
-      "name": "Fault tolerance",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_RELIABILITY",
-      "name": "Logic related reliability",
-      "parent": "RELIABILITY"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-custom-rules/search-custom-rules.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-custom-rules/search-custom-rules.json
deleted file mode 100644 (file)
index db83a85..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-  "total": 1,
-  "p": 1,
-  "ps": 10,
-  "rules": [
-    {
-      "key": "squid:Do_not_use_org_h2_util_StringUtils",
-      "name": "Do not use org.h2.util.StringUtils",
-      "severity": "MAJOR",
-      "params": [
-        {
-          "key": "fromClasses",
-          "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
-          "type": "STRING",
-          "defaultValue": ""
-        },
-        {
-          "key": "toClasses",
-          "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
-          "type": "STRING",
-          "defaultValue": "org.h2.util.StringUtils"
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-custom-rules/search-custom-rules2.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-custom-rules/search-custom-rules2.json
deleted file mode 100644 (file)
index 0e4184e..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-  "total": 2,
-  "p": 1,
-  "ps": 10,
-  "rules": [
-    {
-      "key": "squid:Do_not_use_org_h2_util_StringUtils",
-      "name": "Do not use org.h2.util.StringUtils",
-      "severity": "MAJOR",
-      "params": [
-        {
-          "key": "fromClasses",
-          "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
-          "type": "STRING",
-          "defaultValue": ""
-        },
-        {
-          "key": "toClasses",
-          "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
-          "type": "STRING",
-          "defaultValue": "org.h2.util.StringUtils"
-        }
-      ]
-    },
-    {
-      "key": "squid:Do_not_use_edu_emory_mathcs_backport_java_util_Collections",
-      "name": "Do not use edu.emory.mathcs.backport.java.util.Collections",
-      "severity": "MAJOR",
-      "params": [
-        {
-          "key": "fromClasses",
-          "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
-          "type": "STRING",
-          "defaultValue": ""
-        },
-        {
-          "key": "toClasses",
-          "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
-          "type": "STRING",
-          "defaultValue": "edu.emory.mathcs.backport.java.util.Collections"
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-custom-rules/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-custom-rules/search.json
deleted file mode 100644 (file)
index 40ab6ae..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "total": 1,
-  "p": 1,
-  "ps": 200,
-  "rules": [
-    {
-      "key": "squid:ArchitecturalConstraint",
-      "name": "Architectural constraint",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [],
-      "tags": [],
-      "status": "READY"
-    }
-  ],
-  "facets": [
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 1
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 1
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-custom-rules/show.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-custom-rules/show.json
deleted file mode 100644 (file)
index 517c5f6..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "rule": {
-    "key": "squid:ArchitecturalConstraint",
-    "repo": "squid",
-    "name": "Architectural constraint",
-    "createdAt": "2013-03-27T09:52:40+0100",
-    "severity": "MAJOR",
-    "status": "READY",
-    "internalKey": "ArchitecturalConstraint",
-    "isTemplate": true,
-    "tags": [],
-    "sysTags": [],
-    "lang": "java",
-    "langName": "Java",
-    "htmlDesc": "<p>A source code comply to an architectural model when it fully\n\tadheres to a set of architectural constraints. A constraint allows to\n\tdeny references between classes by pattern.</p>\n<p>You can for instance use this rule to :</p>\n<ul>\n\t<li>forbid access to **.web.** from **.dao.** classes</li>\n\t<li>forbid access to java.util.Vector, java.util.Hashtable and\n\t\tjava.util.Enumeration from any classes</li>\n\t<li>forbid access to java.sql.** from **.ui.** and **.web.**\n\t\tclasses</li>\n</ul>",
-    "debtChar": "CHANGEABILITY",
-    "debtSubChar": "ARCHITECTURE_CHANGEABILITY",
-    "debtCharName": "Changeability",
-    "debtSubCharName": "Architecture related changeability",
-    "debtOverloaded": true,
-    "debtRemFnType": "LINEAR",
-    "debtRemFnCoeff": "3h",
-    "params": [
-      {
-        "key": "fromClasses",
-        "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
-        "type": "STRING"
-      },
-      {
-        "key": "toClasses",
-        "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
-        "type": "STRING"
-      }
-    ]
-  },
-  "actives": []
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-manual-rules.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-manual-rules.js
deleted file mode 100644 (file)
index b725c43..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules-page-should-create-manual-rules');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-should-delete-manual-rules', 3, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        lib.mockRequestFromFile('/api/rules/search', 'search.json');
-        lib.mockRequestFromFile('/api/rules/create', 'show.json');
-        lib.mockRequestFromFile('/api/rules/show', 'show.json');
-        lib.mockRequest('/api/issues/search', '{}');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.js-create-manual-rule', function () {
-          casper.click('.js-create-manual-rule');
-        });
-      })
-
-      .then(function () {
-        casper.waitForSelector('.modal');
-      })
-
-      .then(function () {
-        casper.evaluate(function () {
-          jQuery('.modal [name="name"]').val('Manual Rule');
-          jQuery('.modal [name="key"]').val('manual:Manual_Rule');
-          jQuery('.modal [name="markdown_description"]').val('Manual Rule Description');
-          jQuery('.modal #coding-rules-manual-rule-creation-create').click();
-        });
-        casper.waitForSelector('.coding-rules-detail-header');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('.coding-rules-detail-header', 'Manual Rule');
-        test.assertSelectorContains('.coding-rule-details .subtitle', 'manual:Manual_Rule');
-        test.assertSelectorContains('.coding-rules-detail-description', 'Manual Rule Description');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-manual-rules/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-manual-rules/app.json
deleted file mode 100644 (file)
index 50148bb..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-{
-  "canWrite": true,
-  "qualityprofiles": [
-    {
-      "key": "java-default-with-mojo-conventions-49307",
-      "name": "Default - Maven Conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-default-with-sonarsource-conventions-27339",
-      "name": "Default - SonarSource conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-top-profile-without-formatting-conventions-50037",
-      "name": "Default - Top",
-      "lang": "java"
-    },
-    {
-      "key": "java-findbugs-14954",
-      "name": "FindBugs",
-      "lang": "java"
-    },
-    {
-      "key": "java-for-sq-java-plugin-only-92289",
-      "name": "For SQ Java Plugin Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "java-for-sq-only-95381",
-      "name": "For SQ Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "php-psr-2-06315",
-      "name": "PSR-2",
-      "lang": "php"
-    },
-    {
-      "key": "java-sonar-way-80423",
-      "name": "Sonar way",
-      "lang": "java"
-    },
-    {
-      "key": "js-sonar-way",
-      "name": "Sonar way",
-      "lang": "js"
-    },
-    {
-      "key": "php-sonar-way-05548",
-      "name": "Sonar way",
-      "lang": "php"
-    },
-    {
-      "key": "py-sonar-way-80265",
-      "name": "Sonar way",
-      "lang": "py"
-    },
-    {
-      "key": "java-without-findbugs",
-      "name": "Without Findbugs",
-      "lang": "java"
-    }
-  ],
-  "languages": {
-    "py": "Python",
-    "js": "JavaScript",
-    "php": "PHP",
-    "java": "Java"
-  },
-  "repositories": [
-    {
-      "key": "common-java",
-      "name": "Common SonarQube",
-      "language": "java"
-    },
-    {
-      "key": "common-js",
-      "name": "Common SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "common-php",
-      "name": "Common SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "common-py",
-      "name": "Common SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "Pylint",
-      "name": "Pylint",
-      "language": "py"
-    },
-    {
-      "key": "javascript",
-      "name": "SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "php",
-      "name": "SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "python",
-      "name": "SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "squid",
-      "name": "SonarQube",
-      "language": "java"
-    }
-  ],
-  "statuses": {
-    "BETA": "Beta",
-    "DEPRECATED": "Deprecated",
-    "READY": "Ready"
-  },
-  "characteristics": [
-    {
-      "key": "UNDERSTANDABILITY",
-      "name": "Understandability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "MAINTAINABILITY",
-      "name": "Maintainability"
-    },
-    {
-      "key": "TIME_ZONE_RELATED_PORTABILITY",
-      "name": "Time zone related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "READABILITY",
-      "name": "Readability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "SECURITY_FEATURES",
-      "name": "Security features",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_RELIABILITY",
-      "name": "Architecture related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "OS_RELATED_PORTABILITY",
-      "name": "OS related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "EXCEPTION_HANDLING",
-      "name": "Exception handling",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_CHANGEABILITY",
-      "name": "Logic related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "SOFTWARE_RELATED_PORTABILITY",
-      "name": "Software related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
-      "name": "Input validation and representation",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "LANGUAGE_RELATED_PORTABILITY",
-      "name": "Language related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "ERRORS",
-      "name": "Errors",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "SECURITY",
-      "name": "Security"
-    },
-    {
-      "key": "RELIABILITY",
-      "name": "Reliability"
-    },
-    {
-      "key": "PORTABILITY",
-      "name": "Portability"
-    },
-    {
-      "key": "HARDWARE_RELATED_PORTABILITY",
-      "name": "Hardware related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "SYNCHRONIZATION_RELIABILITY",
-      "name": "Synchronization related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "TRANSPORTABILITY",
-      "name": "Transportability",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "COMPILER_RELATED_PORTABILITY",
-      "name": "Compiler related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "RESOURCE_RELIABILITY",
-      "name": "Resource",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "CPU_EFFICIENCY",
-      "name": "Processor use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "EFFICIENCY",
-      "name": "Efficiency"
-    },
-    {
-      "key": "CHANGEABILITY",
-      "name": "Changeability"
-    },
-    {
-      "key": "DATA_CHANGEABILITY",
-      "name": "Data related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "API_ABUSE",
-      "name": "API abuse",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_CHANGEABILITY",
-      "name": "Architecture related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "UNIT_TESTS",
-      "name": "Unit tests",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "INSTRUCTION_RELIABILITY",
-      "name": "Instruction related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "REUSABILITY",
-      "name": "Reusability"
-    },
-    {
-      "key": "MODULARITY",
-      "name": "Modularity",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "UNIT_TESTABILITY",
-      "name": "Unit level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "TESTABILITY",
-      "name": "Testability"
-    },
-    {
-      "key": "INTEGRATION_TESTABILITY",
-      "name": "Integration level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "NETWORK_USE",
-      "name": "Network use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "MEMORY_EFFICIENCY",
-      "name": "Memory use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "DATA_RELIABILITY",
-      "name": "Data related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "FAULT_TOLERANCE",
-      "name": "Fault tolerance",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_RELIABILITY",
-      "name": "Logic related reliability",
-      "parent": "RELIABILITY"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-manual-rules/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-manual-rules/search.json
deleted file mode 100644 (file)
index f43d117..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "total": 0,
-  "p": 1,
-  "ps": 200,
-  "rules": [],
-  "facets": []
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-manual-rules/show.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-create-manual-rules/show.json
deleted file mode 100644 (file)
index 38190c2..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-  "rule": {
-    "key": "manual:Manual_Rule",
-    "repo": "manual",
-    "name": "Manual Rule",
-    "createdAt": "2015-01-05T10:02:11+0100",
-    "status": "READY",
-    "isTemplate": false,
-    "tags": [],
-    "sysTags": [],
-    "htmlDesc": "Manual Rule Description",
-    "mdDesc": "Manual Rule Description",
-    "debtOverloaded": false,
-    "params": []
-  },
-  "actives": []
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-custom-rules.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-custom-rules.js
deleted file mode 100644 (file)
index 2c2609c..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules-page-should-delete-custom-rules');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-should-delete-custom-rules', 2, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        lib.mockRequestFromFile('/api/rules/search', 'search-custom-rules.json',
-            { data: { template_key: 'squid:ArchitecturalConstraint' } });
-        lib.mockRequestFromFile('/api/rules/search', 'search.json');
-        lib.mockRequestFromFile('/api/rules/show', 'show.json');
-        lib.mockRequest('/api/rules/delete', '{}');
-        lib.mockRequest('/api/issues/search', '{}');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rule.selected', function () {
-          casper.click('.coding-rule.selected .js-rule');
-        });
-      })
-
-      .then(function () {
-        casper.waitForSelector('#coding-rules-detail-custom-rules .coding-rules-detail-list-name');
-      })
-
-      .then(function () {
-        test.assertElementCount('#coding-rules-detail-custom-rules .coding-rules-detail-list-name', 2);
-        casper.click('.js-delete-custom-rule');
-        casper.click('[data-confirm="yes"]');
-        lib.waitForElementCount('#coding-rules-detail-custom-rules .coding-rules-detail-list-name', 1, function () {
-          test.assert(true); // put dummy assert into wait statement
-        });
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-custom-rules/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-custom-rules/app.json
deleted file mode 100644 (file)
index 50148bb..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-{
-  "canWrite": true,
-  "qualityprofiles": [
-    {
-      "key": "java-default-with-mojo-conventions-49307",
-      "name": "Default - Maven Conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-default-with-sonarsource-conventions-27339",
-      "name": "Default - SonarSource conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-top-profile-without-formatting-conventions-50037",
-      "name": "Default - Top",
-      "lang": "java"
-    },
-    {
-      "key": "java-findbugs-14954",
-      "name": "FindBugs",
-      "lang": "java"
-    },
-    {
-      "key": "java-for-sq-java-plugin-only-92289",
-      "name": "For SQ Java Plugin Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "java-for-sq-only-95381",
-      "name": "For SQ Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "php-psr-2-06315",
-      "name": "PSR-2",
-      "lang": "php"
-    },
-    {
-      "key": "java-sonar-way-80423",
-      "name": "Sonar way",
-      "lang": "java"
-    },
-    {
-      "key": "js-sonar-way",
-      "name": "Sonar way",
-      "lang": "js"
-    },
-    {
-      "key": "php-sonar-way-05548",
-      "name": "Sonar way",
-      "lang": "php"
-    },
-    {
-      "key": "py-sonar-way-80265",
-      "name": "Sonar way",
-      "lang": "py"
-    },
-    {
-      "key": "java-without-findbugs",
-      "name": "Without Findbugs",
-      "lang": "java"
-    }
-  ],
-  "languages": {
-    "py": "Python",
-    "js": "JavaScript",
-    "php": "PHP",
-    "java": "Java"
-  },
-  "repositories": [
-    {
-      "key": "common-java",
-      "name": "Common SonarQube",
-      "language": "java"
-    },
-    {
-      "key": "common-js",
-      "name": "Common SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "common-php",
-      "name": "Common SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "common-py",
-      "name": "Common SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "Pylint",
-      "name": "Pylint",
-      "language": "py"
-    },
-    {
-      "key": "javascript",
-      "name": "SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "php",
-      "name": "SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "python",
-      "name": "SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "squid",
-      "name": "SonarQube",
-      "language": "java"
-    }
-  ],
-  "statuses": {
-    "BETA": "Beta",
-    "DEPRECATED": "Deprecated",
-    "READY": "Ready"
-  },
-  "characteristics": [
-    {
-      "key": "UNDERSTANDABILITY",
-      "name": "Understandability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "MAINTAINABILITY",
-      "name": "Maintainability"
-    },
-    {
-      "key": "TIME_ZONE_RELATED_PORTABILITY",
-      "name": "Time zone related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "READABILITY",
-      "name": "Readability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "SECURITY_FEATURES",
-      "name": "Security features",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_RELIABILITY",
-      "name": "Architecture related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "OS_RELATED_PORTABILITY",
-      "name": "OS related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "EXCEPTION_HANDLING",
-      "name": "Exception handling",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_CHANGEABILITY",
-      "name": "Logic related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "SOFTWARE_RELATED_PORTABILITY",
-      "name": "Software related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
-      "name": "Input validation and representation",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "LANGUAGE_RELATED_PORTABILITY",
-      "name": "Language related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "ERRORS",
-      "name": "Errors",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "SECURITY",
-      "name": "Security"
-    },
-    {
-      "key": "RELIABILITY",
-      "name": "Reliability"
-    },
-    {
-      "key": "PORTABILITY",
-      "name": "Portability"
-    },
-    {
-      "key": "HARDWARE_RELATED_PORTABILITY",
-      "name": "Hardware related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "SYNCHRONIZATION_RELIABILITY",
-      "name": "Synchronization related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "TRANSPORTABILITY",
-      "name": "Transportability",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "COMPILER_RELATED_PORTABILITY",
-      "name": "Compiler related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "RESOURCE_RELIABILITY",
-      "name": "Resource",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "CPU_EFFICIENCY",
-      "name": "Processor use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "EFFICIENCY",
-      "name": "Efficiency"
-    },
-    {
-      "key": "CHANGEABILITY",
-      "name": "Changeability"
-    },
-    {
-      "key": "DATA_CHANGEABILITY",
-      "name": "Data related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "API_ABUSE",
-      "name": "API abuse",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_CHANGEABILITY",
-      "name": "Architecture related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "UNIT_TESTS",
-      "name": "Unit tests",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "INSTRUCTION_RELIABILITY",
-      "name": "Instruction related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "REUSABILITY",
-      "name": "Reusability"
-    },
-    {
-      "key": "MODULARITY",
-      "name": "Modularity",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "UNIT_TESTABILITY",
-      "name": "Unit level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "TESTABILITY",
-      "name": "Testability"
-    },
-    {
-      "key": "INTEGRATION_TESTABILITY",
-      "name": "Integration level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "NETWORK_USE",
-      "name": "Network use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "MEMORY_EFFICIENCY",
-      "name": "Memory use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "DATA_RELIABILITY",
-      "name": "Data related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "FAULT_TOLERANCE",
-      "name": "Fault tolerance",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_RELIABILITY",
-      "name": "Logic related reliability",
-      "parent": "RELIABILITY"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-custom-rules/search-custom-rules.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-custom-rules/search-custom-rules.json
deleted file mode 100644 (file)
index 0e4184e..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-  "total": 2,
-  "p": 1,
-  "ps": 10,
-  "rules": [
-    {
-      "key": "squid:Do_not_use_org_h2_util_StringUtils",
-      "name": "Do not use org.h2.util.StringUtils",
-      "severity": "MAJOR",
-      "params": [
-        {
-          "key": "fromClasses",
-          "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
-          "type": "STRING",
-          "defaultValue": ""
-        },
-        {
-          "key": "toClasses",
-          "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
-          "type": "STRING",
-          "defaultValue": "org.h2.util.StringUtils"
-        }
-      ]
-    },
-    {
-      "key": "squid:Do_not_use_edu_emory_mathcs_backport_java_util_Collections",
-      "name": "Do not use edu.emory.mathcs.backport.java.util.Collections",
-      "severity": "MAJOR",
-      "params": [
-        {
-          "key": "fromClasses",
-          "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
-          "type": "STRING",
-          "defaultValue": ""
-        },
-        {
-          "key": "toClasses",
-          "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
-          "type": "STRING",
-          "defaultValue": "edu.emory.mathcs.backport.java.util.Collections"
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-custom-rules/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-custom-rules/search.json
deleted file mode 100644 (file)
index 40ab6ae..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "total": 1,
-  "p": 1,
-  "ps": 200,
-  "rules": [
-    {
-      "key": "squid:ArchitecturalConstraint",
-      "name": "Architectural constraint",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [],
-      "tags": [],
-      "status": "READY"
-    }
-  ],
-  "facets": [
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 1
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 1
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-custom-rules/show.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-custom-rules/show.json
deleted file mode 100644 (file)
index 517c5f6..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "rule": {
-    "key": "squid:ArchitecturalConstraint",
-    "repo": "squid",
-    "name": "Architectural constraint",
-    "createdAt": "2013-03-27T09:52:40+0100",
-    "severity": "MAJOR",
-    "status": "READY",
-    "internalKey": "ArchitecturalConstraint",
-    "isTemplate": true,
-    "tags": [],
-    "sysTags": [],
-    "lang": "java",
-    "langName": "Java",
-    "htmlDesc": "<p>A source code comply to an architectural model when it fully\n\tadheres to a set of architectural constraints. A constraint allows to\n\tdeny references between classes by pattern.</p>\n<p>You can for instance use this rule to :</p>\n<ul>\n\t<li>forbid access to **.web.** from **.dao.** classes</li>\n\t<li>forbid access to java.util.Vector, java.util.Hashtable and\n\t\tjava.util.Enumeration from any classes</li>\n\t<li>forbid access to java.sql.** from **.ui.** and **.web.**\n\t\tclasses</li>\n</ul>",
-    "debtChar": "CHANGEABILITY",
-    "debtSubChar": "ARCHITECTURE_CHANGEABILITY",
-    "debtCharName": "Changeability",
-    "debtSubCharName": "Architecture related changeability",
-    "debtOverloaded": true,
-    "debtRemFnType": "LINEAR",
-    "debtRemFnCoeff": "3h",
-    "params": [
-      {
-        "key": "fromClasses",
-        "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
-        "type": "STRING"
-      },
-      {
-        "key": "toClasses",
-        "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
-        "type": "STRING"
-      }
-    ]
-  },
-  "actives": []
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-manual-rules.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-manual-rules.js
deleted file mode 100644 (file)
index c0efd0b..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules-page-should-delete-manual-rules');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-should-delete-manual-rules', 1, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        this.searchMock = lib.mockRequestFromFile('/api/rules/search', 'search-before.json');
-        lib.mockRequestFromFile('/api/rules/show', 'show.json');
-        lib.mockRequest('/api/rules/delete', '{}');
-        lib.mockRequest('/api/issues/search', '{}');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rule.selected', function () {
-          casper.click('.coding-rule.selected .js-rule');
-        });
-      })
-
-      .then(function () {
-        casper.waitForSelector('.js-delete');
-      })
-
-      .then(function () {
-        casper.click('.js-delete');
-        casper.waitForSelector('[data-confirm="yes"]');
-      })
-
-      .then(function () {
-        lib.clearRequestMock(this.searchMock);
-        lib.mockRequestFromFile('/api/rules/search', 'search-after.json');
-        casper.click('[data-confirm="yes"]');
-        casper.waitForSelectorTextChange('#coding-rules-total');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('#coding-rules-total', 0);
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-manual-rules/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-manual-rules/app.json
deleted file mode 100644 (file)
index 50148bb..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-{
-  "canWrite": true,
-  "qualityprofiles": [
-    {
-      "key": "java-default-with-mojo-conventions-49307",
-      "name": "Default - Maven Conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-default-with-sonarsource-conventions-27339",
-      "name": "Default - SonarSource conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-top-profile-without-formatting-conventions-50037",
-      "name": "Default - Top",
-      "lang": "java"
-    },
-    {
-      "key": "java-findbugs-14954",
-      "name": "FindBugs",
-      "lang": "java"
-    },
-    {
-      "key": "java-for-sq-java-plugin-only-92289",
-      "name": "For SQ Java Plugin Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "java-for-sq-only-95381",
-      "name": "For SQ Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "php-psr-2-06315",
-      "name": "PSR-2",
-      "lang": "php"
-    },
-    {
-      "key": "java-sonar-way-80423",
-      "name": "Sonar way",
-      "lang": "java"
-    },
-    {
-      "key": "js-sonar-way",
-      "name": "Sonar way",
-      "lang": "js"
-    },
-    {
-      "key": "php-sonar-way-05548",
-      "name": "Sonar way",
-      "lang": "php"
-    },
-    {
-      "key": "py-sonar-way-80265",
-      "name": "Sonar way",
-      "lang": "py"
-    },
-    {
-      "key": "java-without-findbugs",
-      "name": "Without Findbugs",
-      "lang": "java"
-    }
-  ],
-  "languages": {
-    "py": "Python",
-    "js": "JavaScript",
-    "php": "PHP",
-    "java": "Java"
-  },
-  "repositories": [
-    {
-      "key": "common-java",
-      "name": "Common SonarQube",
-      "language": "java"
-    },
-    {
-      "key": "common-js",
-      "name": "Common SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "common-php",
-      "name": "Common SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "common-py",
-      "name": "Common SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "Pylint",
-      "name": "Pylint",
-      "language": "py"
-    },
-    {
-      "key": "javascript",
-      "name": "SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "php",
-      "name": "SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "python",
-      "name": "SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "squid",
-      "name": "SonarQube",
-      "language": "java"
-    }
-  ],
-  "statuses": {
-    "BETA": "Beta",
-    "DEPRECATED": "Deprecated",
-    "READY": "Ready"
-  },
-  "characteristics": [
-    {
-      "key": "UNDERSTANDABILITY",
-      "name": "Understandability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "MAINTAINABILITY",
-      "name": "Maintainability"
-    },
-    {
-      "key": "TIME_ZONE_RELATED_PORTABILITY",
-      "name": "Time zone related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "READABILITY",
-      "name": "Readability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "SECURITY_FEATURES",
-      "name": "Security features",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_RELIABILITY",
-      "name": "Architecture related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "OS_RELATED_PORTABILITY",
-      "name": "OS related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "EXCEPTION_HANDLING",
-      "name": "Exception handling",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_CHANGEABILITY",
-      "name": "Logic related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "SOFTWARE_RELATED_PORTABILITY",
-      "name": "Software related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
-      "name": "Input validation and representation",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "LANGUAGE_RELATED_PORTABILITY",
-      "name": "Language related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "ERRORS",
-      "name": "Errors",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "SECURITY",
-      "name": "Security"
-    },
-    {
-      "key": "RELIABILITY",
-      "name": "Reliability"
-    },
-    {
-      "key": "PORTABILITY",
-      "name": "Portability"
-    },
-    {
-      "key": "HARDWARE_RELATED_PORTABILITY",
-      "name": "Hardware related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "SYNCHRONIZATION_RELIABILITY",
-      "name": "Synchronization related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "TRANSPORTABILITY",
-      "name": "Transportability",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "COMPILER_RELATED_PORTABILITY",
-      "name": "Compiler related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "RESOURCE_RELIABILITY",
-      "name": "Resource",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "CPU_EFFICIENCY",
-      "name": "Processor use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "EFFICIENCY",
-      "name": "Efficiency"
-    },
-    {
-      "key": "CHANGEABILITY",
-      "name": "Changeability"
-    },
-    {
-      "key": "DATA_CHANGEABILITY",
-      "name": "Data related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "API_ABUSE",
-      "name": "API abuse",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_CHANGEABILITY",
-      "name": "Architecture related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "UNIT_TESTS",
-      "name": "Unit tests",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "INSTRUCTION_RELIABILITY",
-      "name": "Instruction related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "REUSABILITY",
-      "name": "Reusability"
-    },
-    {
-      "key": "MODULARITY",
-      "name": "Modularity",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "UNIT_TESTABILITY",
-      "name": "Unit level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "TESTABILITY",
-      "name": "Testability"
-    },
-    {
-      "key": "INTEGRATION_TESTABILITY",
-      "name": "Integration level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "NETWORK_USE",
-      "name": "Network use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "MEMORY_EFFICIENCY",
-      "name": "Memory use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "DATA_RELIABILITY",
-      "name": "Data related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "FAULT_TOLERANCE",
-      "name": "Fault tolerance",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_RELIABILITY",
-      "name": "Logic related reliability",
-      "parent": "RELIABILITY"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-manual-rules/search-after.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-manual-rules/search-after.json
deleted file mode 100644 (file)
index f43d117..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "total": 0,
-  "p": 1,
-  "ps": 200,
-  "rules": [],
-  "facets": []
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-manual-rules/search-before.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-manual-rules/search-before.json
deleted file mode 100644 (file)
index 1f19e1d..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-  "total": 1,
-  "p": 1,
-  "ps": 200,
-  "rules": [
-    {
-      "key": "manual:Manual_Rule",
-      "name": "Manual Rule",
-      "sysTags": [],
-      "tags": [],
-      "status": "READY"
-    }
-  ],
-  "facets": [
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "manual",
-          "count": 1
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-manual-rules/show.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-delete-manual-rules/show.json
deleted file mode 100644 (file)
index 38190c2..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-  "rule": {
-    "key": "manual:Manual_Rule",
-    "repo": "manual",
-    "name": "Manual Rule",
-    "createdAt": "2015-01-05T10:02:11+0100",
-    "status": "READY",
-    "isTemplate": false,
-    "tags": [],
-    "sysTags": [],
-    "htmlDesc": "Manual Rule Description",
-    "mdDesc": "Manual Rule Description",
-    "debtOverloaded": false,
-    "params": []
-  },
-  "actives": []
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-custom-rules.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-custom-rules.js
deleted file mode 100644 (file)
index 6a17b1e..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules-page-should-show-custom-rules');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-should-show-custom-rules', 3, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        lib.mockRequestFromFile('/api/rules/search', 'search-custom-rules.json',
-            { data: { template_key: 'squid:ArchitecturalConstraint' } });
-        lib.mockRequestFromFile('/api/rules/search', 'search.json');
-        lib.mockRequestFromFile('/api/rules/show', 'show.json');
-        lib.mockRequest('/api/issues/search', '{}');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rule.selected', function () {
-          casper.click('.coding-rule.selected .js-rule');
-        });
-      })
-
-      .then(function () {
-        casper.waitForSelector('#coding-rules-detail-custom-rules .coding-rules-detail-list-name');
-      })
-
-      .then(function () {
-        test.assertExists('#coding-rules-detail-custom-rules');
-        test.assertElementCount('#coding-rules-detail-custom-rules .coding-rules-detail-list-name', 2);
-        test.assertSelectorContains('#coding-rules-detail-custom-rules .coding-rules-detail-list-name',
-            'Do not use org.h2.util.StringUtils');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-custom-rules/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-custom-rules/app.json
deleted file mode 100644 (file)
index 0eb43bc..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-{
-  "canWrite": false,
-  "qualityprofiles": [
-    {
-      "key": "java-default-with-mojo-conventions-49307",
-      "name": "Default - Maven Conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-default-with-sonarsource-conventions-27339",
-      "name": "Default - SonarSource conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-top-profile-without-formatting-conventions-50037",
-      "name": "Default - Top",
-      "lang": "java"
-    },
-    {
-      "key": "java-findbugs-14954",
-      "name": "FindBugs",
-      "lang": "java"
-    },
-    {
-      "key": "java-for-sq-java-plugin-only-92289",
-      "name": "For SQ Java Plugin Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "java-for-sq-only-95381",
-      "name": "For SQ Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "php-psr-2-06315",
-      "name": "PSR-2",
-      "lang": "php"
-    },
-    {
-      "key": "java-sonar-way-80423",
-      "name": "Sonar way",
-      "lang": "java"
-    },
-    {
-      "key": "js-sonar-way",
-      "name": "Sonar way",
-      "lang": "js"
-    },
-    {
-      "key": "php-sonar-way-05548",
-      "name": "Sonar way",
-      "lang": "php"
-    },
-    {
-      "key": "py-sonar-way-80265",
-      "name": "Sonar way",
-      "lang": "py"
-    },
-    {
-      "key": "java-without-findbugs",
-      "name": "Without Findbugs",
-      "lang": "java"
-    }
-  ],
-  "languages": {
-    "py": "Python",
-    "js": "JavaScript",
-    "php": "PHP",
-    "java": "Java"
-  },
-  "repositories": [
-    {
-      "key": "common-java",
-      "name": "Common SonarQube",
-      "language": "java"
-    },
-    {
-      "key": "common-js",
-      "name": "Common SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "common-php",
-      "name": "Common SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "common-py",
-      "name": "Common SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "Pylint",
-      "name": "Pylint",
-      "language": "py"
-    },
-    {
-      "key": "javascript",
-      "name": "SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "php",
-      "name": "SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "python",
-      "name": "SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "squid",
-      "name": "SonarQube",
-      "language": "java"
-    }
-  ],
-  "statuses": {
-    "BETA": "Beta",
-    "DEPRECATED": "Deprecated",
-    "READY": "Ready"
-  },
-  "characteristics": [
-    {
-      "key": "UNDERSTANDABILITY",
-      "name": "Understandability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "MAINTAINABILITY",
-      "name": "Maintainability"
-    },
-    {
-      "key": "TIME_ZONE_RELATED_PORTABILITY",
-      "name": "Time zone related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "READABILITY",
-      "name": "Readability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "SECURITY_FEATURES",
-      "name": "Security features",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_RELIABILITY",
-      "name": "Architecture related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "OS_RELATED_PORTABILITY",
-      "name": "OS related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "EXCEPTION_HANDLING",
-      "name": "Exception handling",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_CHANGEABILITY",
-      "name": "Logic related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "SOFTWARE_RELATED_PORTABILITY",
-      "name": "Software related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
-      "name": "Input validation and representation",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "LANGUAGE_RELATED_PORTABILITY",
-      "name": "Language related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "ERRORS",
-      "name": "Errors",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "SECURITY",
-      "name": "Security"
-    },
-    {
-      "key": "RELIABILITY",
-      "name": "Reliability"
-    },
-    {
-      "key": "PORTABILITY",
-      "name": "Portability"
-    },
-    {
-      "key": "HARDWARE_RELATED_PORTABILITY",
-      "name": "Hardware related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "SYNCHRONIZATION_RELIABILITY",
-      "name": "Synchronization related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "TRANSPORTABILITY",
-      "name": "Transportability",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "COMPILER_RELATED_PORTABILITY",
-      "name": "Compiler related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "RESOURCE_RELIABILITY",
-      "name": "Resource",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "CPU_EFFICIENCY",
-      "name": "Processor use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "EFFICIENCY",
-      "name": "Efficiency"
-    },
-    {
-      "key": "CHANGEABILITY",
-      "name": "Changeability"
-    },
-    {
-      "key": "DATA_CHANGEABILITY",
-      "name": "Data related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "API_ABUSE",
-      "name": "API abuse",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_CHANGEABILITY",
-      "name": "Architecture related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "UNIT_TESTS",
-      "name": "Unit tests",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "INSTRUCTION_RELIABILITY",
-      "name": "Instruction related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "REUSABILITY",
-      "name": "Reusability"
-    },
-    {
-      "key": "MODULARITY",
-      "name": "Modularity",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "UNIT_TESTABILITY",
-      "name": "Unit level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "TESTABILITY",
-      "name": "Testability"
-    },
-    {
-      "key": "INTEGRATION_TESTABILITY",
-      "name": "Integration level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "NETWORK_USE",
-      "name": "Network use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "MEMORY_EFFICIENCY",
-      "name": "Memory use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "DATA_RELIABILITY",
-      "name": "Data related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "FAULT_TOLERANCE",
-      "name": "Fault tolerance",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_RELIABILITY",
-      "name": "Logic related reliability",
-      "parent": "RELIABILITY"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-custom-rules/search-custom-rules.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-custom-rules/search-custom-rules.json
deleted file mode 100644 (file)
index 0e4184e..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-  "total": 2,
-  "p": 1,
-  "ps": 10,
-  "rules": [
-    {
-      "key": "squid:Do_not_use_org_h2_util_StringUtils",
-      "name": "Do not use org.h2.util.StringUtils",
-      "severity": "MAJOR",
-      "params": [
-        {
-          "key": "fromClasses",
-          "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
-          "type": "STRING",
-          "defaultValue": ""
-        },
-        {
-          "key": "toClasses",
-          "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
-          "type": "STRING",
-          "defaultValue": "org.h2.util.StringUtils"
-        }
-      ]
-    },
-    {
-      "key": "squid:Do_not_use_edu_emory_mathcs_backport_java_util_Collections",
-      "name": "Do not use edu.emory.mathcs.backport.java.util.Collections",
-      "severity": "MAJOR",
-      "params": [
-        {
-          "key": "fromClasses",
-          "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
-          "type": "STRING",
-          "defaultValue": ""
-        },
-        {
-          "key": "toClasses",
-          "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
-          "type": "STRING",
-          "defaultValue": "edu.emory.mathcs.backport.java.util.Collections"
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-custom-rules/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-custom-rules/search.json
deleted file mode 100644 (file)
index 40ab6ae..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "total": 1,
-  "p": 1,
-  "ps": 200,
-  "rules": [
-    {
-      "key": "squid:ArchitecturalConstraint",
-      "name": "Architectural constraint",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [],
-      "tags": [],
-      "status": "READY"
-    }
-  ],
-  "facets": [
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 1
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 1
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-custom-rules/show.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-custom-rules/show.json
deleted file mode 100644 (file)
index 517c5f6..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "rule": {
-    "key": "squid:ArchitecturalConstraint",
-    "repo": "squid",
-    "name": "Architectural constraint",
-    "createdAt": "2013-03-27T09:52:40+0100",
-    "severity": "MAJOR",
-    "status": "READY",
-    "internalKey": "ArchitecturalConstraint",
-    "isTemplate": true,
-    "tags": [],
-    "sysTags": [],
-    "lang": "java",
-    "langName": "Java",
-    "htmlDesc": "<p>A source code comply to an architectural model when it fully\n\tadheres to a set of architectural constraints. A constraint allows to\n\tdeny references between classes by pattern.</p>\n<p>You can for instance use this rule to :</p>\n<ul>\n\t<li>forbid access to **.web.** from **.dao.** classes</li>\n\t<li>forbid access to java.util.Vector, java.util.Hashtable and\n\t\tjava.util.Enumeration from any classes</li>\n\t<li>forbid access to java.sql.** from **.ui.** and **.web.**\n\t\tclasses</li>\n</ul>",
-    "debtChar": "CHANGEABILITY",
-    "debtSubChar": "ARCHITECTURE_CHANGEABILITY",
-    "debtCharName": "Changeability",
-    "debtSubCharName": "Architecture related changeability",
-    "debtOverloaded": true,
-    "debtRemFnType": "LINEAR",
-    "debtRemFnCoeff": "3h",
-    "params": [
-      {
-        "key": "fromClasses",
-        "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
-        "type": "STRING"
-      },
-      {
-        "key": "toClasses",
-        "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
-        "type": "STRING"
-      }
-    ]
-  },
-  "actives": []
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-deprecated-label.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-deprecated-label.js
deleted file mode 100644 (file)
index 51d3be7..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules-page-should-show-deprecated-label');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-should-show-deprecated-label', 1, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        lib.mockRequestFromFile('/api/rules/search', 'search.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rule.selected');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('.coding-rule.selected', 'DEPRECATED');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-deprecated-label/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-deprecated-label/app.json
deleted file mode 100644 (file)
index 0eb43bc..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-{
-  "canWrite": false,
-  "qualityprofiles": [
-    {
-      "key": "java-default-with-mojo-conventions-49307",
-      "name": "Default - Maven Conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-default-with-sonarsource-conventions-27339",
-      "name": "Default - SonarSource conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-top-profile-without-formatting-conventions-50037",
-      "name": "Default - Top",
-      "lang": "java"
-    },
-    {
-      "key": "java-findbugs-14954",
-      "name": "FindBugs",
-      "lang": "java"
-    },
-    {
-      "key": "java-for-sq-java-plugin-only-92289",
-      "name": "For SQ Java Plugin Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "java-for-sq-only-95381",
-      "name": "For SQ Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "php-psr-2-06315",
-      "name": "PSR-2",
-      "lang": "php"
-    },
-    {
-      "key": "java-sonar-way-80423",
-      "name": "Sonar way",
-      "lang": "java"
-    },
-    {
-      "key": "js-sonar-way",
-      "name": "Sonar way",
-      "lang": "js"
-    },
-    {
-      "key": "php-sonar-way-05548",
-      "name": "Sonar way",
-      "lang": "php"
-    },
-    {
-      "key": "py-sonar-way-80265",
-      "name": "Sonar way",
-      "lang": "py"
-    },
-    {
-      "key": "java-without-findbugs",
-      "name": "Without Findbugs",
-      "lang": "java"
-    }
-  ],
-  "languages": {
-    "py": "Python",
-    "js": "JavaScript",
-    "php": "PHP",
-    "java": "Java"
-  },
-  "repositories": [
-    {
-      "key": "common-java",
-      "name": "Common SonarQube",
-      "language": "java"
-    },
-    {
-      "key": "common-js",
-      "name": "Common SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "common-php",
-      "name": "Common SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "common-py",
-      "name": "Common SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "Pylint",
-      "name": "Pylint",
-      "language": "py"
-    },
-    {
-      "key": "javascript",
-      "name": "SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "php",
-      "name": "SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "python",
-      "name": "SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "squid",
-      "name": "SonarQube",
-      "language": "java"
-    }
-  ],
-  "statuses": {
-    "BETA": "Beta",
-    "DEPRECATED": "Deprecated",
-    "READY": "Ready"
-  },
-  "characteristics": [
-    {
-      "key": "UNDERSTANDABILITY",
-      "name": "Understandability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "MAINTAINABILITY",
-      "name": "Maintainability"
-    },
-    {
-      "key": "TIME_ZONE_RELATED_PORTABILITY",
-      "name": "Time zone related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "READABILITY",
-      "name": "Readability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "SECURITY_FEATURES",
-      "name": "Security features",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_RELIABILITY",
-      "name": "Architecture related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "OS_RELATED_PORTABILITY",
-      "name": "OS related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "EXCEPTION_HANDLING",
-      "name": "Exception handling",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_CHANGEABILITY",
-      "name": "Logic related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "SOFTWARE_RELATED_PORTABILITY",
-      "name": "Software related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
-      "name": "Input validation and representation",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "LANGUAGE_RELATED_PORTABILITY",
-      "name": "Language related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "ERRORS",
-      "name": "Errors",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "SECURITY",
-      "name": "Security"
-    },
-    {
-      "key": "RELIABILITY",
-      "name": "Reliability"
-    },
-    {
-      "key": "PORTABILITY",
-      "name": "Portability"
-    },
-    {
-      "key": "HARDWARE_RELATED_PORTABILITY",
-      "name": "Hardware related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "SYNCHRONIZATION_RELIABILITY",
-      "name": "Synchronization related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "TRANSPORTABILITY",
-      "name": "Transportability",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "COMPILER_RELATED_PORTABILITY",
-      "name": "Compiler related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "RESOURCE_RELIABILITY",
-      "name": "Resource",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "CPU_EFFICIENCY",
-      "name": "Processor use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "EFFICIENCY",
-      "name": "Efficiency"
-    },
-    {
-      "key": "CHANGEABILITY",
-      "name": "Changeability"
-    },
-    {
-      "key": "DATA_CHANGEABILITY",
-      "name": "Data related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "API_ABUSE",
-      "name": "API abuse",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_CHANGEABILITY",
-      "name": "Architecture related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "UNIT_TESTS",
-      "name": "Unit tests",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "INSTRUCTION_RELIABILITY",
-      "name": "Instruction related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "REUSABILITY",
-      "name": "Reusability"
-    },
-    {
-      "key": "MODULARITY",
-      "name": "Modularity",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "UNIT_TESTABILITY",
-      "name": "Unit level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "TESTABILITY",
-      "name": "Testability"
-    },
-    {
-      "key": "INTEGRATION_TESTABILITY",
-      "name": "Integration level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "NETWORK_USE",
-      "name": "Network use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "MEMORY_EFFICIENCY",
-      "name": "Memory use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "DATA_RELIABILITY",
-      "name": "Data related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "FAULT_TOLERANCE",
-      "name": "Fault tolerance",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_RELIABILITY",
-      "name": "Logic related reliability",
-      "parent": "RELIABILITY"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-deprecated-label/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-deprecated-label/search.json
deleted file mode 100644 (file)
index ddeb1cb..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-{
-  "total": 609,
-  "p": 1,
-  "ps": 25,
-  "rules": [
-    {
-      "key": "squid:S2077",
-      "status": "DEPRECATED",
-      "name": "Values passed to SQL commands should be sanitized",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security",
-        "sql"
-      ],
-      "tags": [
-        "custom-tag"
-      ]
-    },
-    {
-      "key": "php:S107",
-      "status": "READY",
-      "name": "Functions should not have too many parameters",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1192",
-      "status": "READY",
-      "name": "String literals should not be duplicated",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1145",
-      "status": "READY",
-      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "bug",
-        "cwe",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S108",
-      "status": "READY",
-      "name": "Nested blocks of code should not be left empty",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1301",
-      "status": "READY",
-      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S103",
-      "status": "READY",
-      "name": "Lines should not be too long",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1144",
-      "status": "READY",
-      "name": "Unused private method should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S105",
-      "status": "READY",
-      "name": "Tabulation characters should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1481",
-      "status": "READY",
-      "name": "Unused local variables should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1142",
-      "status": "READY",
-      "name": "Functions should not contain too many return statements",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S104",
-      "status": "READY",
-      "name": "Files should not have too many lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1605",
-      "status": "READY",
-      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1448",
-      "status": "READY",
-      "name": "Classes should not have too many methods",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1603",
-      "status": "READY",
-      "name": "PHP 4 constructor declarations should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1779",
-      "status": "READY",
-      "name": "Only LF character (Unix-like) should be used to end lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1185",
-      "status": "READY",
-      "name": "Overriding methods should do more than simply call the same method in the super class",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1600",
-      "status": "READY",
-      "name": "Deprecated predefined variables should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1109",
-      "status": "READY",
-      "name": "A close curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2001",
-      "status": "READY",
-      "name": "Functions deprecated in PHP 5 should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "obsolete"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2002",
-      "status": "READY",
-      "name": "Errors should not be silenced",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2000",
-      "status": "READY",
-      "name": "Files should not contain characters before \"<?php\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "user-experience"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1105",
-      "status": "READY",
-      "name": "An open curly brace should be located at the end of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1200",
-      "status": "READY",
-      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1106",
-      "status": "READY",
-      "name": "An open curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "convention",
-          "count": 67
-        },
-        {
-          "val": "brain-overload",
-          "count": 36
-        },
-        {
-          "val": "bug",
-          "count": 36
-        },
-        {
-          "val": "cwe",
-          "count": 17
-        },
-        {
-          "val": "unused",
-          "count": 16
-        },
-        {
-          "val": "security",
-          "count": 14
-        },
-        {
-          "val": "pitfall",
-          "count": 12
-        },
-        {
-          "val": "psr2",
-          "count": 12
-        },
-        {
-          "val": "error-handling",
-          "count": 11
-        },
-        {
-          "val": "pitfail",
-          "count": 10
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 212
-        },
-        {
-          "val": "py",
-          "count": 212
-        },
-        {
-          "val": "php",
-          "count": 103
-        },
-        {
-          "val": "js",
-          "count": 77
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 206
-        },
-        {
-          "val": "Pylint",
-          "count": 180
-        },
-        {
-          "val": "php",
-          "count": 97
-        },
-        {
-          "val": "javascript",
-          "count": 73
-        },
-        {
-          "val": "python",
-          "count": 28
-        },
-        {
-          "val": "common-java",
-          "count": 6
-        },
-        {
-          "val": "common-php",
-          "count": 6
-        },
-        {
-          "val": "manual",
-          "count": 5
-        },
-        {
-          "val": "common-js",
-          "count": 4
-        },
-        {
-          "val": "common-py",
-          "count": 4
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-details.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-details.js
deleted file mode 100644 (file)
index b352b52..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules-page-should-show-details');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-should-show-details', 20, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        lib.mockRequestFromFile('/api/rules/search', 'search.json');
-        lib.mockRequestFromFile('/api/rules/show', 'show.json');
-        lib.mockRequest('/api/issues/search', '{}');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rule.selected', function () {
-          casper.click('.coding-rule.selected .js-rule');
-        });
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rules-detail-header');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('.search-navigator-workspace-details',
-            'Throwable and Error classes should not be caught');
-
-        test.assertSelectorContains('.search-navigator-workspace-details', 'squid:S1181');
-        test.assertExists('.coding-rules-detail-properties .icon-severity-blocker');
-        test.assertSelectorContains('.coding-rules-detail-properties', 'error-handling');
-        test.assertSelectorContains('.coding-rules-detail-properties', '2013');
-        test.assertSelectorContains('.coding-rules-detail-properties', 'SonarQube (Java)');
-        test.assertSelectorContains('.coding-rules-detail-properties', 'Reliability > Exception handling');
-        test.assertSelectorContains('.coding-rules-detail-properties', 'LINEAR');
-        test.assertSelectorContains('.coding-rules-detail-properties', '20min');
-
-        test.assertSelectorContains('.coding-rules-detail-description', 'is the superclass of all errors and');
-        test.assertSelectorContains('.coding-rules-detail-description', 'its subclasses should be caught.');
-        test.assertSelectorContains('.coding-rules-detail-description', 'Noncompliant Code Example');
-        test.assertSelectorContains('.coding-rules-detail-description', 'Compliant Solution');
-
-        test.assertSelectorContains('.coding-rules-detail-parameters', 'max');
-        test.assertSelectorContains('.coding-rules-detail-parameters', 'Maximum authorized number of parameters');
-        test.assertSelectorContains('.coding-rules-detail-parameters', '7');
-
-        test.assertElementCount('.coding-rules-detail-quality-profile-name', 6);
-        test.assertSelectorContains('.coding-rules-detail-quality-profile-name', 'Default - Top');
-        test.assertElementCount('.coding-rules-detail-quality-profile-inheritance', 4);
-        test.assertSelectorContains('.coding-rules-detail-quality-profile-inheritance', 'Default - Top');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-details/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-details/app.json
deleted file mode 100644 (file)
index 0eb43bc..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-{
-  "canWrite": false,
-  "qualityprofiles": [
-    {
-      "key": "java-default-with-mojo-conventions-49307",
-      "name": "Default - Maven Conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-default-with-sonarsource-conventions-27339",
-      "name": "Default - SonarSource conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-top-profile-without-formatting-conventions-50037",
-      "name": "Default - Top",
-      "lang": "java"
-    },
-    {
-      "key": "java-findbugs-14954",
-      "name": "FindBugs",
-      "lang": "java"
-    },
-    {
-      "key": "java-for-sq-java-plugin-only-92289",
-      "name": "For SQ Java Plugin Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "java-for-sq-only-95381",
-      "name": "For SQ Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "php-psr-2-06315",
-      "name": "PSR-2",
-      "lang": "php"
-    },
-    {
-      "key": "java-sonar-way-80423",
-      "name": "Sonar way",
-      "lang": "java"
-    },
-    {
-      "key": "js-sonar-way",
-      "name": "Sonar way",
-      "lang": "js"
-    },
-    {
-      "key": "php-sonar-way-05548",
-      "name": "Sonar way",
-      "lang": "php"
-    },
-    {
-      "key": "py-sonar-way-80265",
-      "name": "Sonar way",
-      "lang": "py"
-    },
-    {
-      "key": "java-without-findbugs",
-      "name": "Without Findbugs",
-      "lang": "java"
-    }
-  ],
-  "languages": {
-    "py": "Python",
-    "js": "JavaScript",
-    "php": "PHP",
-    "java": "Java"
-  },
-  "repositories": [
-    {
-      "key": "common-java",
-      "name": "Common SonarQube",
-      "language": "java"
-    },
-    {
-      "key": "common-js",
-      "name": "Common SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "common-php",
-      "name": "Common SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "common-py",
-      "name": "Common SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "Pylint",
-      "name": "Pylint",
-      "language": "py"
-    },
-    {
-      "key": "javascript",
-      "name": "SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "php",
-      "name": "SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "python",
-      "name": "SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "squid",
-      "name": "SonarQube",
-      "language": "java"
-    }
-  ],
-  "statuses": {
-    "BETA": "Beta",
-    "DEPRECATED": "Deprecated",
-    "READY": "Ready"
-  },
-  "characteristics": [
-    {
-      "key": "UNDERSTANDABILITY",
-      "name": "Understandability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "MAINTAINABILITY",
-      "name": "Maintainability"
-    },
-    {
-      "key": "TIME_ZONE_RELATED_PORTABILITY",
-      "name": "Time zone related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "READABILITY",
-      "name": "Readability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "SECURITY_FEATURES",
-      "name": "Security features",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_RELIABILITY",
-      "name": "Architecture related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "OS_RELATED_PORTABILITY",
-      "name": "OS related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "EXCEPTION_HANDLING",
-      "name": "Exception handling",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_CHANGEABILITY",
-      "name": "Logic related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "SOFTWARE_RELATED_PORTABILITY",
-      "name": "Software related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
-      "name": "Input validation and representation",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "LANGUAGE_RELATED_PORTABILITY",
-      "name": "Language related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "ERRORS",
-      "name": "Errors",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "SECURITY",
-      "name": "Security"
-    },
-    {
-      "key": "RELIABILITY",
-      "name": "Reliability"
-    },
-    {
-      "key": "PORTABILITY",
-      "name": "Portability"
-    },
-    {
-      "key": "HARDWARE_RELATED_PORTABILITY",
-      "name": "Hardware related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "SYNCHRONIZATION_RELIABILITY",
-      "name": "Synchronization related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "TRANSPORTABILITY",
-      "name": "Transportability",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "COMPILER_RELATED_PORTABILITY",
-      "name": "Compiler related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "RESOURCE_RELIABILITY",
-      "name": "Resource",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "CPU_EFFICIENCY",
-      "name": "Processor use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "EFFICIENCY",
-      "name": "Efficiency"
-    },
-    {
-      "key": "CHANGEABILITY",
-      "name": "Changeability"
-    },
-    {
-      "key": "DATA_CHANGEABILITY",
-      "name": "Data related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "API_ABUSE",
-      "name": "API abuse",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_CHANGEABILITY",
-      "name": "Architecture related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "UNIT_TESTS",
-      "name": "Unit tests",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "INSTRUCTION_RELIABILITY",
-      "name": "Instruction related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "REUSABILITY",
-      "name": "Reusability"
-    },
-    {
-      "key": "MODULARITY",
-      "name": "Modularity",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "UNIT_TESTABILITY",
-      "name": "Unit level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "TESTABILITY",
-      "name": "Testability"
-    },
-    {
-      "key": "INTEGRATION_TESTABILITY",
-      "name": "Integration level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "NETWORK_USE",
-      "name": "Network use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "MEMORY_EFFICIENCY",
-      "name": "Memory use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "DATA_RELIABILITY",
-      "name": "Data related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "FAULT_TOLERANCE",
-      "name": "Fault tolerance",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_RELIABILITY",
-      "name": "Logic related reliability",
-      "parent": "RELIABILITY"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-details/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-details/search.json
deleted file mode 100644 (file)
index b5a6bc2..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-{
-  "total": 10,
-  "p": 1,
-  "ps": 200,
-  "rules": [
-    {
-      "key": "squid:S1181",
-      "name": "Throwable and Error classes should not be caught",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "error-handling"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1849",
-      "name": "\"Iterator.hasNext()\" should not call \"Iterator.next()\"",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1844",
-      "name": "\"Object.wait(...)\" should never be called on objects that implement \"java.util.concurrent.locks.Condition\"",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug",
-        "pitfall"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S2258",
-      "name": "\"javax.crypto.NullCipher\" should not be used for anything other than testing",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S2251",
-      "name": "A \"for\" loop update clause should move the counter in the right direction",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:ObjectFinalizeOverridenCallsSuperFinalizeCheck",
-      "name": "super.finalize() should be called at the end of Object.finalize() implementations",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1143",
-      "name": "Return statements should not occur in finally blocks",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1206",
-      "name": "\"equals(Object obj)\" and \"hashCode()\" should be overridden in pairs",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1451",
-      "name": "Copyright and license headers should be defined in all source files",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "squid:S1697",
-      "name": "Short-circuit logic should be used to prevent null pointer dereferences in conditionals",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "bug",
-          "count": 7
-        },
-        {
-          "val": "convention",
-          "count": 1
-        },
-        {
-          "val": "cwe",
-          "count": 1
-        },
-        {
-          "val": "error-handling",
-          "count": 1
-        },
-        {
-          "val": "owasp-top10",
-          "count": 1
-        },
-        {
-          "val": "pitfall",
-          "count": 1
-        },
-        {
-          "val": "security",
-          "count": 1
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 10
-        },
-        {
-          "val": "js",
-          "count": 6
-        },
-        {
-          "val": "php",
-          "count": 2
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 10
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-details/show.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-details/show.json
deleted file mode 100644 (file)
index 274b587..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-  "rule": {
-    "key": "squid:S1181",
-    "repo": "squid",
-    "name": "Throwable and Error classes should not be caught",
-    "createdAt": "2013-08-09T14:40:54+0200",
-    "severity": "BLOCKER",
-    "status": "READY",
-    "internalKey": "S1181",
-    "isTemplate": false,
-    "tags": [],
-    "sysTags": [
-      "error-handling"
-    ],
-    "lang": "java",
-    "langName": "Java",
-    "htmlDesc": "<p>\n<code>Throwable</code> is the superclass of all errors and exceptions in Java.\n<code>Error</code> is the superclass of all errors which are not meant to be caught by applications.\n</p>\n\n<p>\nCatching either <code>Throwable</code> or <code>Error</code> will also catch <code>OutOfMemoryError</code> or <code>InternalError</code> from which an application should not attempt to recover.\n</p>\n\n<p>Only <code>Exception</code> and its subclasses should be caught.</p>\n\n<h2>Noncompliant Code Example</h2>\n\n<pre>\ntry { /* ... */ } catch (Throwable t) { /* ... */ }\ntry { /* ... */ } catch (Error e) { /* ... */ } \n</pre>\n\n<h2>Compliant Solution</h2>\n\n<pre>\ntry { /* ... */ } catch (Exception e) { /* ... */ }  \ntry { /* ... */ } catch (RuntimeException e) { /* ... */ }  \ntry { /* ... */ } catch (MyException e) { /* ... */ }  \n</pre>",
-    "defaultDebtChar": "RELIABILITY",
-    "defaultDebtSubChar": "EXCEPTION_HANDLING",
-    "debtChar": "RELIABILITY",
-    "debtSubChar": "EXCEPTION_HANDLING",
-    "debtCharName": "Reliability",
-    "debtSubCharName": "Exception handling",
-    "defaultDebtRemFnType": "CONSTANT_ISSUE",
-    "defaultDebtRemFnOffset": "20min",
-    "debtOverloaded": true,
-    "debtRemFnType": "LINEAR",
-    "debtRemFnCoeff": "20min",
-    "params": [
-      {
-        "key": "max",
-        "htmlDesc": "Maximum authorized number of parameters",
-        "type": "INTEGER",
-        "defaultValue": "7"
-      }
-    ]
-  },
-  "actives": [
-    {
-      "qProfile": "java-top-profile-without-formatting-conventions-50037",
-      "inherit": "NONE",
-      "severity": "BLOCKER",
-      "params": []
-    },
-    {
-      "qProfile": "java-default-with-sonarsource-conventions-27339",
-      "inherit": "INHERITED",
-      "severity": "BLOCKER",
-      "params": []
-    },
-    {
-      "qProfile": "java-for-sq-java-plugin-only-92289",
-      "inherit": "INHERITED",
-      "severity": "BLOCKER",
-      "params": []
-    },
-    {
-      "qProfile": "java-for-sq-only-95381",
-      "inherit": "INHERITED",
-      "severity": "BLOCKER",
-      "params": []
-    },
-    {
-      "qProfile": "java-default-with-mojo-conventions-49307",
-      "inherit": "INHERITED",
-      "severity": "BLOCKER",
-      "params": []
-    },
-    {
-      "qProfile": "java-sonar-way-80423",
-      "inherit": "NONE",
-      "severity": "BLOCKER",
-      "params": []
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-empty-list.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-empty-list.js
deleted file mode 100644 (file)
index d0e3595..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules-page-should-show-empty-list');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-should-show-empty-list', 3, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        lib.mockRequestFromFile('/api/rules/search', 'search.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.search-navigator-facet-box');
-      })
-
-      .then(function () {
-        test.assertDoesntExist('.coding-rule');
-        test.assertSelectorContains('#coding-rules-total', 0);
-        test.assertExists('.search-navigator-no-results');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-empty-list/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-empty-list/app.json
deleted file mode 100644 (file)
index 0eb43bc..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-{
-  "canWrite": false,
-  "qualityprofiles": [
-    {
-      "key": "java-default-with-mojo-conventions-49307",
-      "name": "Default - Maven Conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-default-with-sonarsource-conventions-27339",
-      "name": "Default - SonarSource conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-top-profile-without-formatting-conventions-50037",
-      "name": "Default - Top",
-      "lang": "java"
-    },
-    {
-      "key": "java-findbugs-14954",
-      "name": "FindBugs",
-      "lang": "java"
-    },
-    {
-      "key": "java-for-sq-java-plugin-only-92289",
-      "name": "For SQ Java Plugin Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "java-for-sq-only-95381",
-      "name": "For SQ Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "php-psr-2-06315",
-      "name": "PSR-2",
-      "lang": "php"
-    },
-    {
-      "key": "java-sonar-way-80423",
-      "name": "Sonar way",
-      "lang": "java"
-    },
-    {
-      "key": "js-sonar-way",
-      "name": "Sonar way",
-      "lang": "js"
-    },
-    {
-      "key": "php-sonar-way-05548",
-      "name": "Sonar way",
-      "lang": "php"
-    },
-    {
-      "key": "py-sonar-way-80265",
-      "name": "Sonar way",
-      "lang": "py"
-    },
-    {
-      "key": "java-without-findbugs",
-      "name": "Without Findbugs",
-      "lang": "java"
-    }
-  ],
-  "languages": {
-    "py": "Python",
-    "js": "JavaScript",
-    "php": "PHP",
-    "java": "Java"
-  },
-  "repositories": [
-    {
-      "key": "common-java",
-      "name": "Common SonarQube",
-      "language": "java"
-    },
-    {
-      "key": "common-js",
-      "name": "Common SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "common-php",
-      "name": "Common SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "common-py",
-      "name": "Common SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "Pylint",
-      "name": "Pylint",
-      "language": "py"
-    },
-    {
-      "key": "javascript",
-      "name": "SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "php",
-      "name": "SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "python",
-      "name": "SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "squid",
-      "name": "SonarQube",
-      "language": "java"
-    }
-  ],
-  "statuses": {
-    "BETA": "Beta",
-    "DEPRECATED": "Deprecated",
-    "READY": "Ready"
-  },
-  "characteristics": [
-    {
-      "key": "UNDERSTANDABILITY",
-      "name": "Understandability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "MAINTAINABILITY",
-      "name": "Maintainability"
-    },
-    {
-      "key": "TIME_ZONE_RELATED_PORTABILITY",
-      "name": "Time zone related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "READABILITY",
-      "name": "Readability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "SECURITY_FEATURES",
-      "name": "Security features",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_RELIABILITY",
-      "name": "Architecture related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "OS_RELATED_PORTABILITY",
-      "name": "OS related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "EXCEPTION_HANDLING",
-      "name": "Exception handling",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_CHANGEABILITY",
-      "name": "Logic related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "SOFTWARE_RELATED_PORTABILITY",
-      "name": "Software related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
-      "name": "Input validation and representation",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "LANGUAGE_RELATED_PORTABILITY",
-      "name": "Language related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "ERRORS",
-      "name": "Errors",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "SECURITY",
-      "name": "Security"
-    },
-    {
-      "key": "RELIABILITY",
-      "name": "Reliability"
-    },
-    {
-      "key": "PORTABILITY",
-      "name": "Portability"
-    },
-    {
-      "key": "HARDWARE_RELATED_PORTABILITY",
-      "name": "Hardware related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "SYNCHRONIZATION_RELIABILITY",
-      "name": "Synchronization related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "TRANSPORTABILITY",
-      "name": "Transportability",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "COMPILER_RELATED_PORTABILITY",
-      "name": "Compiler related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "RESOURCE_RELIABILITY",
-      "name": "Resource",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "CPU_EFFICIENCY",
-      "name": "Processor use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "EFFICIENCY",
-      "name": "Efficiency"
-    },
-    {
-      "key": "CHANGEABILITY",
-      "name": "Changeability"
-    },
-    {
-      "key": "DATA_CHANGEABILITY",
-      "name": "Data related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "API_ABUSE",
-      "name": "API abuse",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_CHANGEABILITY",
-      "name": "Architecture related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "UNIT_TESTS",
-      "name": "Unit tests",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "INSTRUCTION_RELIABILITY",
-      "name": "Instruction related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "REUSABILITY",
-      "name": "Reusability"
-    },
-    {
-      "key": "MODULARITY",
-      "name": "Modularity",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "UNIT_TESTABILITY",
-      "name": "Unit level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "TESTABILITY",
-      "name": "Testability"
-    },
-    {
-      "key": "INTEGRATION_TESTABILITY",
-      "name": "Integration level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "NETWORK_USE",
-      "name": "Network use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "MEMORY_EFFICIENCY",
-      "name": "Memory use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "DATA_RELIABILITY",
-      "name": "Data related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "FAULT_TOLERANCE",
-      "name": "Fault tolerance",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_RELIABILITY",
-      "name": "Logic related reliability",
-      "parent": "RELIABILITY"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-empty-list/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-empty-list/search.json
deleted file mode 100644 (file)
index f43d117..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "total": 0,
-  "p": 1,
-  "ps": 200,
-  "rules": [],
-  "facets": []
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-facets.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-facets.js
deleted file mode 100644 (file)
index 6f3fc0f..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-should-show-facets', 1, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        lib.mockRequestFromFile('/api/rules/search', 'search.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.search-navigator-facet-box');
-      })
-
-      .then(function () {
-        test.assertElementCount('.search-navigator-facet-box', 13);
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rule-issues.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rule-issues.js
deleted file mode 100644 (file)
index 70163ae..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules-page-should-show-rule-issues');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-should-show-rule-issues', 5, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        lib.mockRequestFromFile('/api/rules/search', 'search.json');
-        lib.mockRequestFromFile('/api/rules/show', 'show.json');
-        lib.mockRequestFromFile('/api/issues/search', 'issues-search.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rule.selected', function () {
-          casper.click('.coding-rule.selected .js-rule');
-        });
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rules-most-violated-projects');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('.js-rule-issues', '7');
-        test.assertSelectorContains('.coding-rules-most-violated-projects', 'SonarQube');
-        test.assertSelectorContains('.coding-rules-most-violated-projects', '2');
-        test.assertSelectorContains('.coding-rules-most-violated-projects', 'SonarQube Runner');
-        test.assertSelectorContains('.coding-rules-most-violated-projects', '1');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rule-issues/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rule-issues/app.json
deleted file mode 100644 (file)
index 0eb43bc..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-{
-  "canWrite": false,
-  "qualityprofiles": [
-    {
-      "key": "java-default-with-mojo-conventions-49307",
-      "name": "Default - Maven Conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-default-with-sonarsource-conventions-27339",
-      "name": "Default - SonarSource conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-top-profile-without-formatting-conventions-50037",
-      "name": "Default - Top",
-      "lang": "java"
-    },
-    {
-      "key": "java-findbugs-14954",
-      "name": "FindBugs",
-      "lang": "java"
-    },
-    {
-      "key": "java-for-sq-java-plugin-only-92289",
-      "name": "For SQ Java Plugin Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "java-for-sq-only-95381",
-      "name": "For SQ Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "php-psr-2-06315",
-      "name": "PSR-2",
-      "lang": "php"
-    },
-    {
-      "key": "java-sonar-way-80423",
-      "name": "Sonar way",
-      "lang": "java"
-    },
-    {
-      "key": "js-sonar-way",
-      "name": "Sonar way",
-      "lang": "js"
-    },
-    {
-      "key": "php-sonar-way-05548",
-      "name": "Sonar way",
-      "lang": "php"
-    },
-    {
-      "key": "py-sonar-way-80265",
-      "name": "Sonar way",
-      "lang": "py"
-    },
-    {
-      "key": "java-without-findbugs",
-      "name": "Without Findbugs",
-      "lang": "java"
-    }
-  ],
-  "languages": {
-    "py": "Python",
-    "js": "JavaScript",
-    "php": "PHP",
-    "java": "Java"
-  },
-  "repositories": [
-    {
-      "key": "common-java",
-      "name": "Common SonarQube",
-      "language": "java"
-    },
-    {
-      "key": "common-js",
-      "name": "Common SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "common-php",
-      "name": "Common SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "common-py",
-      "name": "Common SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "Pylint",
-      "name": "Pylint",
-      "language": "py"
-    },
-    {
-      "key": "javascript",
-      "name": "SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "php",
-      "name": "SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "python",
-      "name": "SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "squid",
-      "name": "SonarQube",
-      "language": "java"
-    }
-  ],
-  "statuses": {
-    "BETA": "Beta",
-    "DEPRECATED": "Deprecated",
-    "READY": "Ready"
-  },
-  "characteristics": [
-    {
-      "key": "UNDERSTANDABILITY",
-      "name": "Understandability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "MAINTAINABILITY",
-      "name": "Maintainability"
-    },
-    {
-      "key": "TIME_ZONE_RELATED_PORTABILITY",
-      "name": "Time zone related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "READABILITY",
-      "name": "Readability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "SECURITY_FEATURES",
-      "name": "Security features",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_RELIABILITY",
-      "name": "Architecture related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "OS_RELATED_PORTABILITY",
-      "name": "OS related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "EXCEPTION_HANDLING",
-      "name": "Exception handling",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_CHANGEABILITY",
-      "name": "Logic related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "SOFTWARE_RELATED_PORTABILITY",
-      "name": "Software related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
-      "name": "Input validation and representation",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "LANGUAGE_RELATED_PORTABILITY",
-      "name": "Language related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "ERRORS",
-      "name": "Errors",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "SECURITY",
-      "name": "Security"
-    },
-    {
-      "key": "RELIABILITY",
-      "name": "Reliability"
-    },
-    {
-      "key": "PORTABILITY",
-      "name": "Portability"
-    },
-    {
-      "key": "HARDWARE_RELATED_PORTABILITY",
-      "name": "Hardware related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "SYNCHRONIZATION_RELIABILITY",
-      "name": "Synchronization related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "TRANSPORTABILITY",
-      "name": "Transportability",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "COMPILER_RELATED_PORTABILITY",
-      "name": "Compiler related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "RESOURCE_RELIABILITY",
-      "name": "Resource",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "CPU_EFFICIENCY",
-      "name": "Processor use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "EFFICIENCY",
-      "name": "Efficiency"
-    },
-    {
-      "key": "CHANGEABILITY",
-      "name": "Changeability"
-    },
-    {
-      "key": "DATA_CHANGEABILITY",
-      "name": "Data related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "API_ABUSE",
-      "name": "API abuse",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_CHANGEABILITY",
-      "name": "Architecture related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "UNIT_TESTS",
-      "name": "Unit tests",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "INSTRUCTION_RELIABILITY",
-      "name": "Instruction related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "REUSABILITY",
-      "name": "Reusability"
-    },
-    {
-      "key": "MODULARITY",
-      "name": "Modularity",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "UNIT_TESTABILITY",
-      "name": "Unit level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "TESTABILITY",
-      "name": "Testability"
-    },
-    {
-      "key": "INTEGRATION_TESTABILITY",
-      "name": "Integration level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "NETWORK_USE",
-      "name": "Network use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "MEMORY_EFFICIENCY",
-      "name": "Memory use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "DATA_RELIABILITY",
-      "name": "Data related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "FAULT_TOLERANCE",
-      "name": "Fault tolerance",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_RELIABILITY",
-      "name": "Logic related reliability",
-      "parent": "RELIABILITY"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rule-issues/issues-search.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rule-issues/issues-search.json
deleted file mode 100644 (file)
index 511b928..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "total": 7,
-  "p": 1,
-  "ps": 1,
-  "projects": [
-    {
-      "uuid": "3b22f38e-ad68-4792-9791-1435584a686c",
-      "key": "org.codehaus.sonar.runner:sonar-runner",
-      "id": 17226,
-      "qualifier": "TRK",
-      "name": "SonarQube Runner",
-      "longName": "SonarQube Runner"
-    },
-    {
-      "uuid": "69e57151-be0d-4157-adff-c06741d88879",
-      "key": "org.codehaus.sonar:sonar",
-      "id": 2865,
-      "qualifier": "TRK",
-      "name": "SonarQube",
-      "longName": "SonarQube"
-    }
-  ],
-  "components": [],
-  "issues": [],
-  "rules": [],
-  "users": [],
-  "languages": [],
-  "maxResultsReached": false,
-  "paging": {
-    "pageIndex": 1,
-    "pageSize": 1,
-    "total": 7,
-    "fTotal": "7",
-    "pages": 7
-  },
-  "facets": [
-    {
-      "property": "projectUuids",
-      "values": [
-        {
-          "val": "69e57151-be0d-4157-adff-c06741d88879",
-          "count": 2
-        },
-        {
-          "val": "3b22f38e-ad68-4792-9791-1435584a686c",
-          "count": 1
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rule-issues/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rule-issues/search.json
deleted file mode 100644 (file)
index 558be10..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "total": 1,
-  "p": 1,
-  "ps": 200,
-  "rules": [
-    {
-      "key": "squid:S2096",
-      "name": "\"main\" should not \"throw\" anything",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "bug"
-      ],
-      "tags": [],
-      "status": "READY"
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "bug",
-          "count": 1
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 1
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 1
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rule-issues/show.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rule-issues/show.json
deleted file mode 100644 (file)
index 274b587..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-  "rule": {
-    "key": "squid:S1181",
-    "repo": "squid",
-    "name": "Throwable and Error classes should not be caught",
-    "createdAt": "2013-08-09T14:40:54+0200",
-    "severity": "BLOCKER",
-    "status": "READY",
-    "internalKey": "S1181",
-    "isTemplate": false,
-    "tags": [],
-    "sysTags": [
-      "error-handling"
-    ],
-    "lang": "java",
-    "langName": "Java",
-    "htmlDesc": "<p>\n<code>Throwable</code> is the superclass of all errors and exceptions in Java.\n<code>Error</code> is the superclass of all errors which are not meant to be caught by applications.\n</p>\n\n<p>\nCatching either <code>Throwable</code> or <code>Error</code> will also catch <code>OutOfMemoryError</code> or <code>InternalError</code> from which an application should not attempt to recover.\n</p>\n\n<p>Only <code>Exception</code> and its subclasses should be caught.</p>\n\n<h2>Noncompliant Code Example</h2>\n\n<pre>\ntry { /* ... */ } catch (Throwable t) { /* ... */ }\ntry { /* ... */ } catch (Error e) { /* ... */ } \n</pre>\n\n<h2>Compliant Solution</h2>\n\n<pre>\ntry { /* ... */ } catch (Exception e) { /* ... */ }  \ntry { /* ... */ } catch (RuntimeException e) { /* ... */ }  \ntry { /* ... */ } catch (MyException e) { /* ... */ }  \n</pre>",
-    "defaultDebtChar": "RELIABILITY",
-    "defaultDebtSubChar": "EXCEPTION_HANDLING",
-    "debtChar": "RELIABILITY",
-    "debtSubChar": "EXCEPTION_HANDLING",
-    "debtCharName": "Reliability",
-    "debtSubCharName": "Exception handling",
-    "defaultDebtRemFnType": "CONSTANT_ISSUE",
-    "defaultDebtRemFnOffset": "20min",
-    "debtOverloaded": true,
-    "debtRemFnType": "LINEAR",
-    "debtRemFnCoeff": "20min",
-    "params": [
-      {
-        "key": "max",
-        "htmlDesc": "Maximum authorized number of parameters",
-        "type": "INTEGER",
-        "defaultValue": "7"
-      }
-    ]
-  },
-  "actives": [
-    {
-      "qProfile": "java-top-profile-without-formatting-conventions-50037",
-      "inherit": "NONE",
-      "severity": "BLOCKER",
-      "params": []
-    },
-    {
-      "qProfile": "java-default-with-sonarsource-conventions-27339",
-      "inherit": "INHERITED",
-      "severity": "BLOCKER",
-      "params": []
-    },
-    {
-      "qProfile": "java-for-sq-java-plugin-only-92289",
-      "inherit": "INHERITED",
-      "severity": "BLOCKER",
-      "params": []
-    },
-    {
-      "qProfile": "java-for-sq-only-95381",
-      "inherit": "INHERITED",
-      "severity": "BLOCKER",
-      "params": []
-    },
-    {
-      "qProfile": "java-default-with-mojo-conventions-49307",
-      "inherit": "INHERITED",
-      "severity": "BLOCKER",
-      "params": []
-    },
-    {
-      "qProfile": "java-sonar-way-80423",
-      "inherit": "NONE",
-      "severity": "BLOCKER",
-      "params": []
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rule.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rule.js
deleted file mode 100644 (file)
index 5fa1cf0..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-should-show-rule', 7, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        lib.mockRequestFromFile('/api/rules/search', 'search.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rule.selected');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('.coding-rule.selected', 'Values passed to SQL commands should be sanitized');
-        test.assertSelectorContains('.coding-rule.selected', 'Java');
-        test.assertSelectorContains('.coding-rule.selected', 'cwe');
-        test.assertSelectorContains('.coding-rule.selected', 'owasp-top10');
-        test.assertSelectorContains('.coding-rule.selected', 'security');
-        test.assertSelectorContains('.coding-rule.selected', 'sql');
-        test.assertSelectorContains('.coding-rule.selected', 'custom-tag');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rules.js b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules-page-should-show-rules.js
deleted file mode 100644 (file)
index 869c033..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('coding-rules');
-lib.configureCasper();
-
-
-casper.test.begin('coding-rules-page-should-show-rules', 4, function (test) {
-  casper
-      .start(lib.buildUrl('coding-rules'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/rules/app', 'app.json');
-        lib.mockRequestFromFile('/api/rules/search', 'search.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.coding-rule');
-      })
-
-      .then(function () {
-        test.assertElementCount('.coding-rule', 25);
-        test.assertSelectorContains('.coding-rule', 'Values passed to SQL commands should be sanitized');
-        test.assertSelectorContains('.coding-rule', 'An open curly brace should be located at the beginning of a line');
-        test.assertSelectorContains('#coding-rules-total', '609');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules/app.json
deleted file mode 100644 (file)
index 0eb43bc..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-{
-  "canWrite": false,
-  "qualityprofiles": [
-    {
-      "key": "java-default-with-mojo-conventions-49307",
-      "name": "Default - Maven Conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-default-with-sonarsource-conventions-27339",
-      "name": "Default - SonarSource conventions",
-      "lang": "java",
-      "parentKey": "java-top-profile-without-formatting-conventions-50037"
-    },
-    {
-      "key": "java-top-profile-without-formatting-conventions-50037",
-      "name": "Default - Top",
-      "lang": "java"
-    },
-    {
-      "key": "java-findbugs-14954",
-      "name": "FindBugs",
-      "lang": "java"
-    },
-    {
-      "key": "java-for-sq-java-plugin-only-92289",
-      "name": "For SQ Java Plugin Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "java-for-sq-only-95381",
-      "name": "For SQ Only",
-      "lang": "java",
-      "parentKey": "java-default-with-sonarsource-conventions-27339"
-    },
-    {
-      "key": "php-psr-2-06315",
-      "name": "PSR-2",
-      "lang": "php"
-    },
-    {
-      "key": "java-sonar-way-80423",
-      "name": "Sonar way",
-      "lang": "java"
-    },
-    {
-      "key": "js-sonar-way",
-      "name": "Sonar way",
-      "lang": "js"
-    },
-    {
-      "key": "php-sonar-way-05548",
-      "name": "Sonar way",
-      "lang": "php"
-    },
-    {
-      "key": "py-sonar-way-80265",
-      "name": "Sonar way",
-      "lang": "py"
-    },
-    {
-      "key": "java-without-findbugs",
-      "name": "Without Findbugs",
-      "lang": "java"
-    }
-  ],
-  "languages": {
-    "py": "Python",
-    "js": "JavaScript",
-    "php": "PHP",
-    "java": "Java"
-  },
-  "repositories": [
-    {
-      "key": "common-java",
-      "name": "Common SonarQube",
-      "language": "java"
-    },
-    {
-      "key": "common-js",
-      "name": "Common SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "common-php",
-      "name": "Common SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "common-py",
-      "name": "Common SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "Pylint",
-      "name": "Pylint",
-      "language": "py"
-    },
-    {
-      "key": "javascript",
-      "name": "SonarQube",
-      "language": "js"
-    },
-    {
-      "key": "php",
-      "name": "SonarQube",
-      "language": "php"
-    },
-    {
-      "key": "python",
-      "name": "SonarQube",
-      "language": "py"
-    },
-    {
-      "key": "squid",
-      "name": "SonarQube",
-      "language": "java"
-    }
-  ],
-  "statuses": {
-    "BETA": "Beta",
-    "DEPRECATED": "Deprecated",
-    "READY": "Ready"
-  },
-  "characteristics": [
-    {
-      "key": "UNDERSTANDABILITY",
-      "name": "Understandability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "MAINTAINABILITY",
-      "name": "Maintainability"
-    },
-    {
-      "key": "TIME_ZONE_RELATED_PORTABILITY",
-      "name": "Time zone related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "READABILITY",
-      "name": "Readability",
-      "parent": "MAINTAINABILITY"
-    },
-    {
-      "key": "SECURITY_FEATURES",
-      "name": "Security features",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_RELIABILITY",
-      "name": "Architecture related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "OS_RELATED_PORTABILITY",
-      "name": "OS related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "EXCEPTION_HANDLING",
-      "name": "Exception handling",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_CHANGEABILITY",
-      "name": "Logic related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "SOFTWARE_RELATED_PORTABILITY",
-      "name": "Software related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
-      "name": "Input validation and representation",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "LANGUAGE_RELATED_PORTABILITY",
-      "name": "Language related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "ERRORS",
-      "name": "Errors",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "SECURITY",
-      "name": "Security"
-    },
-    {
-      "key": "RELIABILITY",
-      "name": "Reliability"
-    },
-    {
-      "key": "PORTABILITY",
-      "name": "Portability"
-    },
-    {
-      "key": "HARDWARE_RELATED_PORTABILITY",
-      "name": "Hardware related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "SYNCHRONIZATION_RELIABILITY",
-      "name": "Synchronization related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "TRANSPORTABILITY",
-      "name": "Transportability",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "COMPILER_RELATED_PORTABILITY",
-      "name": "Compiler related portability",
-      "parent": "PORTABILITY"
-    },
-    {
-      "key": "RESOURCE_RELIABILITY",
-      "name": "Resource",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "CPU_EFFICIENCY",
-      "name": "Processor use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "EFFICIENCY",
-      "name": "Efficiency"
-    },
-    {
-      "key": "CHANGEABILITY",
-      "name": "Changeability"
-    },
-    {
-      "key": "DATA_CHANGEABILITY",
-      "name": "Data related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "API_ABUSE",
-      "name": "API abuse",
-      "parent": "SECURITY"
-    },
-    {
-      "key": "ARCHITECTURE_CHANGEABILITY",
-      "name": "Architecture related changeability",
-      "parent": "CHANGEABILITY"
-    },
-    {
-      "key": "UNIT_TESTS",
-      "name": "Unit tests",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "INSTRUCTION_RELIABILITY",
-      "name": "Instruction related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "REUSABILITY",
-      "name": "Reusability"
-    },
-    {
-      "key": "MODULARITY",
-      "name": "Modularity",
-      "parent": "REUSABILITY"
-    },
-    {
-      "key": "UNIT_TESTABILITY",
-      "name": "Unit level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "TESTABILITY",
-      "name": "Testability"
-    },
-    {
-      "key": "INTEGRATION_TESTABILITY",
-      "name": "Integration level testability",
-      "parent": "TESTABILITY"
-    },
-    {
-      "key": "NETWORK_USE",
-      "name": "Network use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "MEMORY_EFFICIENCY",
-      "name": "Memory use",
-      "parent": "EFFICIENCY"
-    },
-    {
-      "key": "DATA_RELIABILITY",
-      "name": "Data related reliability",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "FAULT_TOLERANCE",
-      "name": "Fault tolerance",
-      "parent": "RELIABILITY"
-    },
-    {
-      "key": "LOGIC_RELIABILITY",
-      "name": "Logic related reliability",
-      "parent": "RELIABILITY"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/coding-rules/search.json
deleted file mode 100644 (file)
index c17c58d..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-{
-  "total": 609,
-  "p": 1,
-  "ps": 25,
-  "rules": [
-    {
-      "key": "squid:S2077",
-      "name": "Values passed to SQL commands should be sanitized",
-      "lang": "java",
-      "langName": "Java",
-      "sysTags": [
-        "cwe",
-        "owasp-top10",
-        "security",
-        "sql"
-      ],
-      "tags": [
-        "custom-tag"
-      ]
-    },
-    {
-      "key": "php:S107",
-      "name": "Functions should not have too many parameters",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1192",
-      "name": "String literals should not be duplicated",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1145",
-      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "bug",
-        "cwe",
-        "security"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S108",
-      "name": "Nested blocks of code should not be left empty",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1301",
-      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S103",
-      "name": "Lines should not be too long",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1144",
-      "name": "Unused private method should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S105",
-      "name": "Tabulation characters should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1481",
-      "name": "Unused local variables should be removed",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "unused"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1142",
-      "name": "Functions should not contain too many return statements",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S104",
-      "name": "Files should not have too many lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1605",
-      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1448",
-      "name": "Classes should not have too many methods",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1603",
-      "name": "PHP 4 constructor declarations should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1779",
-      "name": "Only LF character (Unix-like) should be used to end lines",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention",
-        "psr2"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1185",
-      "name": "Overriding methods should do more than simply call the same method in the super class",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [],
-      "tags": []
-    },
-    {
-      "key": "php:S1600",
-      "name": "Deprecated predefined variables should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1109",
-      "name": "A close curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2001",
-      "name": "Functions deprecated in PHP 5 should not be used",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "obsolete"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2002",
-      "name": "Errors should not be silenced",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "pitfail"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S2000",
-      "name": "Files should not contain characters before \"<?php\"",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "user-experience"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1105",
-      "name": "An open curly brace should be located at the end of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1200",
-      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "brain-overload"
-      ],
-      "tags": []
-    },
-    {
-      "key": "php:S1106",
-      "name": "An open curly brace should be located at the beginning of a line",
-      "lang": "php",
-      "langName": "PHP",
-      "sysTags": [
-        "convention"
-      ],
-      "tags": []
-    }
-  ],
-  "facets": [
-    {
-      "property": "tags",
-      "values": [
-        {
-          "val": "convention",
-          "count": 67
-        },
-        {
-          "val": "brain-overload",
-          "count": 36
-        },
-        {
-          "val": "bug",
-          "count": 36
-        },
-        {
-          "val": "cwe",
-          "count": 17
-        },
-        {
-          "val": "unused",
-          "count": 16
-        },
-        {
-          "val": "security",
-          "count": 14
-        },
-        {
-          "val": "pitfall",
-          "count": 12
-        },
-        {
-          "val": "psr2",
-          "count": 12
-        },
-        {
-          "val": "error-handling",
-          "count": 11
-        },
-        {
-          "val": "pitfail",
-          "count": 10
-        }
-      ]
-    },
-    {
-      "property": "languages",
-      "values": [
-        {
-          "val": "java",
-          "count": 212
-        },
-        {
-          "val": "py",
-          "count": 212
-        },
-        {
-          "val": "php",
-          "count": 103
-        },
-        {
-          "val": "js",
-          "count": 77
-        }
-      ]
-    },
-    {
-      "property": "repositories",
-      "values": [
-        {
-          "val": "squid",
-          "count": 206
-        },
-        {
-          "val": "Pylint",
-          "count": 180
-        },
-        {
-          "val": "php",
-          "count": 97
-        },
-        {
-          "val": "javascript",
-          "count": 73
-        },
-        {
-          "val": "python",
-          "count": 28
-        },
-        {
-          "val": "common-java",
-          "count": 6
-        },
-        {
-          "val": "common-php",
-          "count": 6
-        },
-        {
-          "val": "manual",
-          "count": 5
-        },
-        {
-          "val": "common-js",
-          "count": 4
-        },
-        {
-          "val": "common-py",
-          "count": 4
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/design-spec.js b/server/sonar-web/src/main/js/tests/e2e/tests/design-spec.js
deleted file mode 100644 (file)
index d9938d4..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-var lib = require('../lib'),
-    testName = lib.testName('Design');
-
-lib.initMessages();
-lib.changeWorkingDirectory('design-spec');
-lib.configureCasper();
-
-
-casper.test.begin(testName('Base'), function suite(test) {
-  casper
-      .start(lib.buildUrl('design'), function () {
-        lib.setDefaultViewport();
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/resources', 'resources.json');
-        lib.mockRequestFromFile('/api/dependencies', 'dependencies.json');
-      })
-
-      .then(function () {
-        casper.waitWhileSelector('.spinner');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('.dsm-body', 'src/test/java/com/maif/sonar/cobol/metrics');
-        test.assertSelectorContains('.dsm-body', 'src/test/java/com/maif/sonar/cobol/repository');
-        test.assertElementCount('.dsm-body-cell-dependency', 12);
-        test.assertElementCount('.dsm-body-cell-cycle', 1);
-        test.assertSelectorContains('.dsm-body-cell-cycle', '6');
-      })
-
-      .then(function () {
-        casper.mouse.doubleclick('.dsm-body-cell-cycle');
-        casper.waitForSelector('.spinner', function () {
-          casper.waitWhileSelector('.spinner');
-        })
-      })
-
-      .then(function () {
-        test.assertElementCount('.dsm-info tr', 7);
-        test.assertSelectorContains('.dsm-info', 'src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java');
-        test.assertSelectorContains('.dsm-info', 'src/main/java/com/maif/sonar/cobol/metrics/BusinessRuleCounter.java ');
-        test.assertSelectorContains('.dsm-info', 'src/main/java/com/maif/sonar/cobol/metrics/TableMetricsVisitor.java ');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/design-spec/dependencies.json b/server/sonar-web/src/main/js/tests/e2e/tests/design-spec/dependencies.json
deleted file mode 100644 (file)
index 7f23c19..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-[
-  {
-    "id": 14879226,
-    "fi": 8354,
-    "ti": 6955,
-    "u": "USES",
-    "w": 1,
-    "fk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
-    "fn": "src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
-    "fq": "FIL",
-    "tk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/metrics/BusinessRuleCounter.java",
-    "tn": "src/main/java/com/maif/sonar/cobol/metrics/BusinessRuleCounter.java",
-    "tq": "FIL"
-  },
-  {
-    "id": 14879225,
-    "fi": 8354,
-    "ti": 6956,
-    "u": "USES",
-    "w": 1,
-    "fk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
-    "fn": "src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
-    "fq": "FIL",
-    "tk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/metrics/ExternalizedRuleCallCounter.java",
-    "tn": "src/main/java/com/maif/sonar/cobol/metrics/ExternalizedRuleCallCounter.java",
-    "tq": "FIL"
-  },
-  {
-    "id": 14879228,
-    "fi": 8354,
-    "ti": 6957,
-    "u": "USES",
-    "w": 1,
-    "fk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
-    "fn": "src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
-    "fq": "FIL",
-    "tk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/metrics/IadUseDetector.java",
-    "tn": "src/main/java/com/maif/sonar/cobol/metrics/IadUseDetector.java",
-    "tq": "FIL"
-  },
-  {
-    "id": 14879229,
-    "fi": 8354,
-    "ti": 8356,
-    "u": "USES",
-    "w": 1,
-    "fk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
-    "fn": "src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
-    "fq": "FIL",
-    "tk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/metrics/Ids2AndIadMatrixDetector.java",
-    "tn": "src/main/java/com/maif/sonar/cobol/metrics/Ids2AndIadMatrixDetector.java",
-    "tq": "FIL"
-  },
-  {
-    "id": 14879227,
-    "fi": 8354,
-    "ti": 6958,
-    "u": "USES",
-    "w": 1,
-    "fk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
-    "fn": "src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
-    "fq": "FIL",
-    "tk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/metrics/Ids2UseDetector.java",
-    "tn": "src/main/java/com/maif/sonar/cobol/metrics/Ids2UseDetector.java",
-    "tq": "FIL"
-  },
-  {
-    "id": 14879224,
-    "fi": 8354,
-    "ti": 12194,
-    "u": "USES",
-    "w": 1,
-    "fk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
-    "fn": "src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
-    "fq": "FIL",
-    "tk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/metrics/TableMetricsVisitor.java",
-    "tn": "src/main/java/com/maif/sonar/cobol/metrics/TableMetricsVisitor.java",
-    "tq": "FIL"
-  }
-]
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/design-spec/resources.json b/server/sonar-web/src/main/js/tests/e2e/tests/design-spec/resources.json
deleted file mode 100644 (file)
index 3d06975..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-[
-  {
-    "id": 6924,
-    "key": "com.maif.sonar:maif-cobol-plugin",
-    "name": "MAIF :: Cobol plugin",
-    "scope": "PRJ",
-    "qualifier": "TRK",
-    "date": "2014-07-21T23:04:05+0600",
-    "creationDate": null,
-    "lname": "MAIF :: Cobol plugin",
-    "version": "2.7-SNAPSHOT",
-    "description": "",
-    "msr": [
-      {
-        "key": "dsm",
-        "data": "[{\"i\":24815,\"n\":\"src/test/java/com/maif/sonar/cobol/metrics\",\"q\":\"DIR\",\"v\":[{},{},{},{\"i\":14879223,\"w\":6},{},{}]},{\"i\":26762,\"n\":\"src/main/java/com/maif/sonar/cobol/plugin\",\"q\":\"DIR\",\"v\":[{},{},{},{},{},{}]},{\"i\":26758,\"n\":\"src/main/java/com/maif/sonar/cobol\",\"q\":\"DIR\",\"v\":[{\"i\":14879242,\"w\":1},{\"i\":14879258,\"w\":114},{},{},{},{}]},{\"i\":33690,\"n\":\"src/test/java/com/maif/sonar/cobol/api\",\"q\":\"DIR\",\"v\":[{\"i\":14879244,\"w\":6},{\"i\":14879373,\"w\":2},{\"i\":14879221,\"w\":1},{},{},{}]},{\"i\":24814,\"n\":\"src/test/java/com/maif/sonar/cobol/ids2\",\"q\":\"DIR\",\"v\":[{\"i\":14879237,\"w\":2},{},{\"i\":14879139,\"w\":24},{},{},{}]},{\"i\":24816,\"n\":\"src/test/java/com/maif/sonar/cobol/repository\",\"q\":\"DIR\",\"v\":[{\"i\":14879240,\"w\":1},{\"i\":14879251,\"w\":6},{\"i\":14879164,\"w\":56},{\"i\":14879230,\"w\":1},{\"i\":14879232,\"w\":4},{}]}]"
-      }
-    ]
-  }
-]
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/issues-page-should-open-issue-permalink.js b/server/sonar-web/src/main/js/tests/e2e/tests/issues-page-should-open-issue-permalink.js
deleted file mode 100644 (file)
index 0eb6587..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* globals casper: false */
-
-var lib = require('../lib');
-
-
-lib.initMessages();
-lib.changeWorkingDirectory('issues-page-should-open-issue-permalink');
-lib.configureCasper();
-
-
-var issueKey = 'some-issue-key';
-
-
-casper.test.begin('issues-page-should-open-issue-permalink', 3, function (test) {
-  casper
-      .start(lib.buildUrl('issues#issues=' + encodeURI(issueKey)), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/issue_filters/app', 'app.json');
-        lib.mockRequest('/api/issues/search', '{}', { data: { issues: issueKey, p: 2 } });
-        lib.mockRequestFromFile('/api/issues/search', 'search.json', { data: { issues: issueKey } });
-        lib.mockRequestFromFile('/api/components/app', 'components-app.json');
-        lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.source-line', function () {
-          test.assertSelectorContains('.source-viewer', 'public void executeOn(Project project, SensorContext context');
-          test.assertElementCount('.issue', 1);
-          test.assertExist('.issue[data-key="' + issueKey + '"]');
-        });
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/issues-page-should-open-issue-permalink/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/issues-page-should-open-issue-permalink/app.json
deleted file mode 100644 (file)
index 1006684..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "canManageFilters": false,
-  "canBulkChange": false,
-  "favorites": []
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/issues-page-should-open-issue-permalink/components-app.json b/server/sonar-web/src/main/js/tests/e2e/tests/issues-page-should-open-issue-permalink/components-app.json
deleted file mode 100644 (file)
index 61afe8a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-  "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin:src/main/java/org/sonar/issuesreport/ReportJob.java",
-  "uuid": "98662175-0f52-4f83-b0e9-1e9444320b5b",
-  "path": "src/main/java/org/sonar/issuesreport/ReportJob.java",
-  "name": "ReportJob.java",
-  "longName": "src/main/java/org/sonar/issuesreport/ReportJob.java",
-  "q": "FIL",
-  "project": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
-  "projectName": "Sonar :: Issues Report :: Plugin",
-  "fav": false,
-  "canMarkAsFavourite": true,
-  "canCreateManualIssue": true,
-  "measures": {
-    "lines": "53",
-    "coverage": "100.0%",
-    "issues": "1",
-    "debt": "5min",
-    "sqaleRating": "A",
-    "debtRatio": "0.6%"
-  }
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/issues-page-should-open-issue-permalink/lines.json b/server/sonar-web/src/main/js/tests/e2e/tests/issues-page-should-open-issue-permalink/lines.json
deleted file mode 100644 (file)
index cd2053d..0000000
+++ /dev/null
@@ -1,392 +0,0 @@
-{
-  "sources": [
-    {
-      "line": 1,
-      "code": "<span class=\"cppd\">/*</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 2,
-      "code": "<span class=\"cppd\"> * Sonar :: Issues Report :: Plugin</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 3,
-      "code": "<span class=\"cppd\"> * Copyright (C) 2013 SonarSource</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 4,
-      "code": "<span class=\"cppd\"> * dev@sonar.codehaus.org</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 5,
-      "code": "<span class=\"cppd\"> *</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 6,
-      "code": "<span class=\"cppd\"> * This program is free software; you can redistribute it and/or</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 7,
-      "code": "<span class=\"cppd\"> * modify it under the terms of the GNU Lesser General Public</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 8,
-      "code": "<span class=\"cppd\"> * License as published by the Free Software Foundation; either</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 9,
-      "code": "<span class=\"cppd\"> * version 3 of the License, or (at your option) any later version.</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 10,
-      "code": "<span class=\"cppd\"> *</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 11,
-      "code": "<span class=\"cppd\"> * This program is distributed in the hope that it will be useful,</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 12,
-      "code": "<span class=\"cppd\"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 13,
-      "code": "<span class=\"cppd\"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 14,
-      "code": "<span class=\"cppd\"> * Lesser General Public License for more details.</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 15,
-      "code": "<span class=\"cppd\"> *</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 16,
-      "code": "<span class=\"cppd\"> * You should have received a copy of the GNU Lesser General Public</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 17,
-      "code": "<span class=\"cppd\"> * License along with this program; if not, write to the Free Software</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 18,
-      "code": "<span class=\"cppd\"> * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 19,
-      "code": "<span class=\"cppd\"> */</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 20,
-      "code": "<span class=\"k\">package</span> org.sonar.issuesreport;",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 21,
-      "code": "",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 22,
-      "code": "<span class=\"k\">import </span>org.sonar.api.batch.<span class=\"sym-1 sym\">PostJob</span>;",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 23,
-      "code": "<span class=\"k\">import </span>org.sonar.api.batch.<span class=\"sym-2 sym\">SensorContext</span>;",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 24,
-      "code": "<span class=\"k\">import </span>org.sonar.api.resources.<span class=\"sym-3 sym\">Project</span>;",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 25,
-      "code": "<span class=\"k\">import </span>org.sonar.issuesreport.printer.<span class=\"sym-4 sym\">ReportPrinter</span>;",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
-      "scmDate": "2013-09-19T19:06:45+0200"
-    },
-    {
-      "line": 26,
-      "code": "<span class=\"k\">import </span>org.sonar.issuesreport.report.<span class=\"sym-5 sym\">IssuesReport</span>;",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "ed1e45b9f01b4d6bc704595ff42e6ecd6fb80dbe",
-      "scmDate": "2013-02-20T17:18:48+0100"
-    },
-    {
-      "line": 27,
-      "code": "<span class=\"k\">import </span>org.sonar.issuesreport.report.<span class=\"sym-6 sym\">IssuesReportBuilder</span>;",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
-      "scmDate": "2013-09-19T19:06:45+0200"
-    },
-    {
-      "line": 28,
-      "code": "",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 29,
-      "code": "<span class=\"k\">public </span><span class=\"k\">class</span> <span class=\"sym-7 sym\">ReportJob</span> <span class=\"k\">implements</span> <span class=\"sym-1 sym\">PostJob</span> {",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 30,
-      "code": "",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 31,
-      "code": "  <span class=\"k\">private </span><span class=\"sym-6 sym\">IssuesReportBuilder</span> <span class=\"sym-8 sym\">builder</span>;",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
-      "scmDate": "2013-09-19T19:06:45+0200"
-    },
-    {
-      "line": 32,
-      "code": "  <span class=\"k\">private </span><span class=\"sym-4 sym\">ReportPrinter</span>[] <span class=\"sym-9 sym\">printers</span>;",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
-      "scmDate": "2013-09-19T19:06:45+0200"
-    },
-    {
-      "line": 33,
-      "code": "",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 34,
-      "code": "  <span class=\"k\">public </span><span class=\"sym-10 sym\">ReportJob</span>(<span class=\"sym-6 sym\">IssuesReportBuilder</span> <span class=\"sym-11 sym\">builder</span>, <span class=\"sym-4 sym\">ReportPrinter</span>[] <span class=\"sym-12 sym\">printers</span>) {",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
-      "scmDate": "2013-09-19T19:06:45+0200",
-      "lineHits": 1
-    },
-    {
-      "line": 35,
-      "code": "    <span class=\"k\">this</span>.<span class=\"sym-8 sym\">builder</span> = <span class=\"sym-11 sym\">builder</span>;",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
-      "scmDate": "2013-09-19T19:06:45+0200",
-      "lineHits": 1
-    },
-    {
-      "line": 36,
-      "code": "    <span class=\"k\">this</span>.<span class=\"sym-9 sym\">printers</span> = <span class=\"sym-12 sym\">printers</span>;",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
-      "scmDate": "2013-09-19T19:06:45+0200",
-      "lineHits": 1
-    },
-    {
-      "line": 37,
-      "code": "  }",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100",
-      "lineHits": 1
-    },
-    {
-      "line": 38,
-      "code": "",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 39,
-      "code": "  <span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-13 sym\">executeOn</span>(<span class=\"sym-3 sym\">Project</span> <span class=\"sym-14 sym\">project</span>, <span class=\"sym-2 sym\">SensorContext</span> <span class=\"sym-15 sym\">context</span>) {",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 40,
-      "code": "    <span class=\"cppd\">// For performance only initialize IssuesReport if there is on Printer enabled</span>",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
-      "scmDate": "2013-09-19T19:06:45+0200"
-    },
-    {
-      "line": 41,
-      "code": "    <span class=\"sym-5 sym\">IssuesReport</span> <span class=\"sym-16 sym\">report</span> = <span class=\"k\">null</span>;",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
-      "scmDate": "2013-09-19T19:06:45+0200",
-      "lineHits": 1
-    },
-    {
-      "line": 42,
-      "code": "    <span class=\"k\">for</span> (<span class=\"sym-4 sym\">ReportPrinter</span> <span class=\"sym-17 sym\">printer</span> : <span class=\"sym-9 sym\">printers</span>) {",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
-      "scmDate": "2013-09-19T19:06:45+0200",
-      "lineHits": 1,
-      "conditions": 2,
-      "coveredConditions": 2
-    },
-    {
-      "line": 43,
-      "code": "      <span class=\"k\">if </span>(<span class=\"sym-17 sym\">printer</span>.isEnabled()) {",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
-      "scmDate": "2013-09-19T19:06:45+0200",
-      "lineHits": 1,
-      "conditions": 2,
-      "coveredConditions": 2
-    },
-    {
-      "line": 44,
-      "code": "        <span class=\"k\">if </span>(<span class=\"sym-16 sym\">report</span> == <span class=\"k\">null</span>) {",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "ed1e45b9f01b4d6bc704595ff42e6ecd6fb80dbe",
-      "scmDate": "2013-02-20T17:18:48+0100",
-      "lineHits": 1,
-      "conditions": 2,
-      "coveredConditions": 2
-    },
-    {
-      "line": 45,
-      "code": "          <span class=\"sym-16 sym\">report</span> = <span class=\"sym-8 sym\">builder</span>.buildReport(<span class=\"sym-14 sym\">project</span>);",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
-      "scmDate": "2013-09-19T19:06:45+0200",
-      "lineHits": 1
-    },
-    {
-      "line": 46,
-      "code": "        }",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "ed1e45b9f01b4d6bc704595ff42e6ecd6fb80dbe",
-      "scmDate": "2013-02-20T17:18:48+0100"
-    },
-    {
-      "line": 47,
-      "code": "        <span class=\"sym-17 sym\">printer</span>.print(<span class=\"sym-16 sym\">report</span>);",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
-      "scmDate": "2013-09-19T19:06:45+0200",
-      "lineHits": 1
-    },
-    {
-      "line": 48,
-      "code": "      }",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
-      "scmDate": "2013-09-19T19:06:45+0200"
-    },
-    {
-      "line": 49,
-      "code": "    }",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
-      "scmDate": "2013-09-19T19:06:45+0200"
-    },
-    {
-      "line": 50,
-      "code": "  }",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "ed1e45b9f01b4d6bc704595ff42e6ecd6fb80dbe",
-      "scmDate": "2013-02-20T17:18:48+0100",
-      "lineHits": 1
-    },
-    {
-      "line": 51,
-      "code": "",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "ed1e45b9f01b4d6bc704595ff42e6ecd6fb80dbe",
-      "scmDate": "2013-02-20T17:18:48+0100"
-    },
-    {
-      "line": 52,
-      "code": "}",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    },
-    {
-      "line": 53,
-      "code": "",
-      "scmAuthor": "julien.henry@sonarsource.com",
-      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
-      "scmDate": "2013-02-19T18:45:35+0100"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/issues-page-should-open-issue-permalink/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/issues-page-should-open-issue-permalink/search.json
deleted file mode 100644 (file)
index 655e749..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-{
-  "total": 1,
-  "p": 1,
-  "ps": 1,
-  "projects": [
-    {
-      "uuid": "06a742ea-5c55-4c7e-a2b4-8747c163cb40",
-      "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
-      "id": 17637,
-      "qualifier": "TRK",
-      "name": "Sonar :: Issues Report :: Plugin",
-      "longName": "Sonar :: Issues Report :: Plugin"
-    }
-  ],
-  "components": [
-    {
-      "uuid": "0160edec-b7ca-49a1-93ca-a6ea2c38ed21",
-      "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin:src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
-      "id": 17639,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "IssuesReportPlugin.java",
-      "longName": "src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
-      "path": "src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
-      "projectId": 17637,
-      "subProjectId": 17637
-    },
-    {
-      "uuid": "06a742ea-5c55-4c7e-a2b4-8747c163cb40",
-      "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
-      "id": 17637,
-      "enabled": true,
-      "qualifier": "TRK",
-      "name": "Sonar :: Issues Report :: Plugin",
-      "longName": "Sonar :: Issues Report :: Plugin"
-    }
-  ],
-  "issues": [
-    {
-      "key": "some-issue-key",
-      "component": "org.codehaus.sonar-plugins:sonar-issues-report-plugin:src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
-      "componentId": 17639,
-      "project": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
-      "rule": "squid:S1161",
-      "status": "REOPENED",
-      "severity": "MINOR",
-      "message": "Add the \"@Override\" annotation above this method signature",
-      "line": 61,
-      "debt": "5min",
-      "author": "julien.henry@sonarsource.com",
-      "creationDate": "2014-10-09T23:03:12+0200",
-      "updateDate": "2014-12-15T17:40:45+0100",
-      "fUpdateAge": "a day"
-    }
-  ],
-  "rules": [
-    {
-      "key": "squid:S1161",
-      "name": "",
-      "lang": "java",
-      "desc": "",
-      "status": "READY",
-      "langName": "Java"
-    }
-  ],
-  "users": [
-    {
-      "login": "admin",
-      "name": "Admin Admin",
-      "active": true,
-      "email": "admin@sonarsource.com"
-    }
-  ],
-  "languages": [
-    {
-      "key": "js",
-      "name": "JavaScript"
-    },
-    {
-      "key": "java",
-      "name": "Java"
-    }
-  ],
-  "maxResultsReached": false,
-  "paging": {
-    "pageIndex": 1,
-    "pageSize": 1,
-    "total": 1,
-    "fTotal": "1",
-    "pages": 1
-  },
-  "facets": [
-    {
-      "property": "tags",
-      "values": []
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/issues-page-spec.js b/server/sonar-web/src/main/js/tests/e2e/tests/issues-page-spec.js
deleted file mode 100644 (file)
index 5abab8e..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* globals casper: false */
-
-var lib = require('../lib'),
-    testName = lib.testName('Issues');
-
-
-lib.initMessages();
-lib.changeWorkingDirectory('issues-spec');
-lib.configureCasper();
-
-
-casper.test.begin(testName('Base'), function (test) {
-  casper
-      .start(lib.buildUrl('issues'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/issue_filters/app', 'app.json');
-        lib.mockRequestFromFile('/api/issues/search', 'search.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.facet[data-value=BLOCKER]', function () {
-          // Facets
-          test.assertExists('.facet[data-value=BLOCKER]');
-          test.assertExists('.facet[data-value=CRITICAL]');
-          test.assertExists('.facet[data-value=MAJOR]');
-          test.assertExists('.facet[data-value=MINOR]');
-          test.assertExists('.facet[data-value=INFO]');
-
-          test.assertExists('.facet[data-value=OPEN]');
-          test.assertExists('.facet[data-value=REOPENED]');
-          test.assertExists('.facet[data-value=CONFIRMED]');
-          test.assertExists('.facet[data-value=RESOLVED]');
-          test.assertExists('.facet[data-value=CLOSED]');
-
-          test.assertExists('.facet[data-unresolved]');
-          test.assertExists('.facet[data-value=REMOVED]');
-          test.assertExists('.facet[data-value=FIXED]');
-          test.assertExists('.facet[data-value=FALSE-POSITIVE]');
-
-          // Issues
-          test.assertElementCount('.issue', 50);
-          test.assertElementCount('.issue.selected', 1);
-          test.assertSelectorContains('.issue', '1 more branches need to be covered by unit tests to reach');
-
-          // Filters
-          test.assertExists('.js-toggle-filters');
-          test.assertExists('.js-new-search');
-          test.assertExists('.js-filter-save-as');
-
-          // Workspace header
-          test.assertSelectorContains('#issues-total', '4623');
-          test.assertExists('.js-prev');
-          test.assertExists('.js-next');
-          test.assertExists('.js-reload');
-          test.assertExists('.js-bulk-change');
-        });
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
-
-
-casper.test.begin(testName('Issue Box', 'Check Elements'), function (test) {
-  casper
-      .start(lib.buildUrl('issues'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/issue_filters/app', 'app.json');
-        lib.mockRequestFromFile('/api/issues/search', 'search.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.issue.selected');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('.issue.selected', "Add a 'package-info.java' file to document the");
-        test.assertExists('.issue.selected .js-issue-tags');
-        test.assertSelectorContains('.issue.selected .js-issue-tags', 'issue.no_tag');
-        test.assertExists('.issue.selected .js-issue-set-severity');
-        test.assertSelectorContains('.issue.selected .js-issue-set-severity', 'MAJOR');
-        test.assertSelectorContains('.issue.selected', 'CONFIRMED');
-        test.assertElementCount('.issue.selected .js-issue-transition', 1);
-        test.assertExists('.issue.selected .js-issue-transition');
-        test.assertExists('.issue.selected .js-issue-assign');
-        test.assertSelectorContains('.issue.selected .js-issue-assign', 'unassigned');
-        test.assertExists('.issue.selected .js-issue-plan');
-        test.assertSelectorContains('.issue.selected .js-issue-plan', 'unplanned');
-        test.assertSelectorContains('.issue.selected', '20min');
-        test.assertExists('.issue.selected .js-issue-comment');
-        test.assertExists('.issue.selected .js-issue-show-changelog');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
-
-
-casper.test.begin(testName('Issue Box', 'Tags'), function (test) {
-  casper
-      .start(lib.buildUrl('issues'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/issue_filters/app', 'app.json');
-        lib.mockRequestFromFile('/api/issues/search', 'search-with-tags.json');
-        lib.mockRequestFromFile('/api/issues/tags', 'tags.json');
-        lib.mockRequestFromFile('/api/issues/set_tags', 'tags-modified.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.issue.selected .js-issue-tags');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('.issue.selected .js-issue-tags', 'security, cwe');
-        casper.click('.issue.selected .js-issue-edit-tags');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.issue-action-option[data-value=design]');
-      })
-
-      .then(function () {
-        casper.click('.issue-action-option[data-value=design]');
-        test.assertSelectorContains('.issue.selected .js-issue-tags', 'security, cwe, design');
-      })
-
-      .then(function () {
-        casper.click('.issue-action-option[data-value=cwe]');
-        test.assertSelectorContains('.issue.selected .js-issue-tags', 'security, design');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
-
-
-casper.test.begin(testName('Issue Box', 'Transitions'), function (test) {
-  casper
-      .start(lib.buildUrl('issues'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/issue_filters/app', 'app.json');
-        lib.mockRequestFromFile('/api/issues/search', 'search.json');
-        lib.mockRequestFromFile('/api/issues/show*', 'show.json');
-        lib.mockRequest('/api/issues/do_transition', '{}');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.issue.selected .js-issue-transition');
-      })
-
-      .then(function () {
-        casper.click('.issue.selected .js-issue-transition');
-        casper.waitForSelector('.issue-action-option');
-      })
-
-      .then(function () {
-        test.assertExists('.issue-action-option[data-value=unconfirm]');
-        test.assertExists('.issue-action-option[data-value=resolve]');
-        test.assertExists('.issue-action-option[data-value=falsepositive]');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
-
-
-casper.test.begin(testName('File-Level Issues'), function (test) {
-  var issueKey = '200d4a8b-9666-4e70-9953-7bab57933f97',
-      issueSelector = '.issue[data-key="' + issueKey + '"]';
-
-  casper
-      .start(lib.buildUrl('issues'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/issue_filters/app', 'app.json');
-        lib.mockRequestFromFile('/api/issues/search', 'file-level/search.json');
-        lib.mockRequestFromFile('/api/components/app', 'file-level/components-app.json');
-        lib.mockRequestFromFile('/api/sources/lines', 'file-level/lines.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector(issueSelector, function () {
-          casper.click(issueSelector + ' .js-issue-navigate');
-        });
-      })
-
-      .then(function () {
-        casper.waitForSelector('.source-viewer ' + issueSelector, function () {
-          test.assertSelectorContains('.source-viewer ' + issueSelector, '1 duplicated blocks of code');
-        });
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
-
-
-casper.test.begin(testName('Severity Facet'), function (test) {
-  casper
-      .start(lib.buildUrl('issues'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/issue_filters/app', 'app.json');
-        lib.mockRequestFromFile('/api/issues/search', 'search-reopened.json', { data: { severities: 'BLOCKER' } });
-        lib.mockRequestFromFile('/api/issues/search', 'search.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.facet[data-value=BLOCKER]', function () {
-          casper.click('.facet[data-value=BLOCKER]');
-        });
-      })
-
-      .then(function () {
-        casper.waitForSelectorTextChange('#issues-total', function () {
-          test.assertElementCount('.issue', 4);
-        });
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
-
-
-casper.test.begin(testName('Bulk Change'), function (test) {
-  casper
-      .start(lib.buildUrl('issues'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/issue_filters/app', 'app.json');
-        lib.mockRequestFromFile('/api/issues/search', 'search.json');
-        lib.mockRequest('/issues/bulk_change_form?resolved=false',
-            '<div id="bulk-change-form">bulk change form</div>', { contentType: 'text/plain' });
-      })
-
-      .then(function () {
-        casper.waitForSelector('.issue', function () {
-          casper.waitForSelector('#issues-bulk-change');
-        });
-      })
-
-      .then(function () {
-        casper.click('#issues-bulk-change');
-        casper.waitForSelector('#bulk-change-form', function () {
-          test.assertSelectorContains('#bulk-change-form', 'bulk change form');
-        });
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/app.json
deleted file mode 100644 (file)
index 604ef7c..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "canManageFilters": true,
-  "canBulkChange": true,
-  "favorites": [
-    {
-      "id": 31,
-      "name": "Critical and Blocker Issues"
-    },
-    {
-      "id": 32,
-      "name": "Foo"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/file-level/components-app.json b/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/file-level/components-app.json
deleted file mode 100644 (file)
index 537dd07..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-{
-  "key": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
-  "path": "src/main/java/org/sonar/api/measures/Measure.java",
-  "name": "Measure.java",
-  "longName": "src/main/java/org/sonar/api/measures/Measure.java",
-  "q": "FIL",
-  "subProject": "org.codehaus.sonar:sonar-plugin-api",
-  "subProjectName": "SonarQube :: Plugin API",
-  "project": "org.codehaus.sonar:sonar",
-  "projectName": "SonarQube",
-  "fav": false,
-  "canMarkAsFavourite": false,
-  "canBulkChange": false,
-  "canCreateManualIssue": false,
-  "periods": [
-    [
-      1,
-      "since previous analysis (2014 Dec 01)",
-      "2014-12-01T18:51:13+0100"
-    ],
-    [
-      2,
-      "over 365 days (2013 Dec 01)",
-      "2013-12-01T00:40:31+0100"
-    ],
-    [
-      3,
-      "since previous version (4.5 - 2014 Sep 03)",
-      "2014-09-03T23:16:52+0200"
-    ]
-  ],
-  "severities": [
-    [
-      "MAJOR",
-      "Major",
-      10
-    ],
-    [
-      "INFO",
-      "Info",
-      3
-    ]
-  ],
-  "rules": [
-    [
-      "common-java:DuplicatedBlocks",
-      "Duplicated blocks",
-      1
-    ],
-    [
-      "squid:S1698",
-      "Objects should be compared with \"equals()\"",
-      1
-    ],
-    [
-      "squid:MethodCyclomaticComplexity",
-      "Methods should not be too complex",
-      3
-    ],
-    [
-      "squid:S1142",
-      "Methods should not contain too many return statements",
-      2
-    ],
-    [
-      "squid:S1067",
-      "Expressions should not be too complex",
-      1
-    ],
-    [
-      "squid:S1151",
-      "Switch cases should not have too many lines",
-      1
-    ],
-    [
-      "common-java:InsufficientBranchCoverage",
-      "Insufficient branch coverage by unit tests",
-      1
-    ],
-    [
-      "squid:S1133",
-      "Deprecated code should be removed eventually",
-      3
-    ]
-  ],
-  "measures": {
-    "fNcloc": "396",
-    "fCoverage": "65.0%",
-    "fDuplicationDensity": "2.6%",
-    "fDebt": "5h 42min",
-    "fSqaleRating": "A",
-    "fSqaleDebtRatio": "2.9%",
-    "fIssues": "13",
-    "fMajorIssues": "10",
-    "fInfoIssues": "3"
-  },
-  "tabs": [
-    "scm",
-    "coverage",
-    "duplications"
-  ],
-  "manual_rules": [
-    {
-      "key": "manual:api",
-      "name": "API"
-    },
-    {
-      "key": "manual:design",
-      "name": "Design"
-    },
-    {
-      "key": "manual:error_handling",
-      "name": "Error handling"
-    },
-    {
-      "key": "manual:performance",
-      "name": "Performance"
-    },
-    {
-      "key": "manual:sql_pitfalls",
-      "name": "SQL Pitfall"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/file-level/lines.json b/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/file-level/lines.json
deleted file mode 100644 (file)
index 18a670b..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "sources": [
-    {
-      "line": 1,
-      "code": "<span class=\"cppd\">/*</span>",
-      "scmAuthor": "simon.brandhof@gmail.com",
-      "scmRevision": "aeadc1f9129274949daaa57738c7c4550bdfbc7b",
-      "scmDate": "2010-09-06T16:08:06+0200"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/file-level/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/file-level/search.json
deleted file mode 100644 (file)
index 5ea06f0..0000000
+++ /dev/null
@@ -1,494 +0,0 @@
-{
-  "total": 10,
-  "p": 1,
-  "ps": 50,
-  "projects": [
-    {
-      "uuid": "69e57151-be0d-4157-adff-c06741d88879",
-      "key": "org.codehaus.sonar:sonar",
-      "id": 2865,
-      "qualifier": "TRK",
-      "name": "SonarQube",
-      "longName": "SonarQube"
-    }
-  ],
-  "components": [
-    {
-      "uuid": "7feef7c3-11b9-4175-b5a7-527ca3c75cb7",
-      "key": "org.codehaus.sonar:sonar-plugin-api",
-      "id": 16,
-      "enabled": true,
-      "qualifier": "BRC",
-      "name": "SonarQube :: Plugin API",
-      "longName": "SonarQube :: Plugin API",
-      "path": "sonar-plugin-api",
-      "projectId": 2865,
-      "subProjectId": 2865
-    },
-    {
-      "uuid": "e1b3c47e-e9a2-42ea-9cac-439ce2345d7e",
-      "key": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Metric.java",
-      "id": 3543,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "Metric.java",
-      "longName": "src/main/java/org/sonar/api/measures/Metric.java",
-      "path": "src/main/java/org/sonar/api/measures/Metric.java",
-      "projectId": 2865,
-      "subProjectId": 16
-    },
-    {
-      "uuid": "69e57151-be0d-4157-adff-c06741d88879",
-      "key": "org.codehaus.sonar:sonar",
-      "id": 2865,
-      "enabled": true,
-      "qualifier": "TRK",
-      "name": "SonarQube",
-      "longName": "SonarQube"
-    },
-    {
-      "uuid": "e2550527-3f86-4082-a9ae-e345f5a735aa",
-      "key": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
-      "id": 3538,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "Measure.java",
-      "longName": "src/main/java/org/sonar/api/measures/Measure.java",
-      "path": "src/main/java/org/sonar/api/measures/Measure.java",
-      "projectId": 2865,
-      "subProjectId": 16
-    },
-    {
-      "uuid": "97606f40-f3ef-4922-aa37-f67485917e67",
-      "key": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/resources/File.java",
-      "id": 3592,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "File.java",
-      "longName": "src/main/java/org/sonar/api/resources/File.java",
-      "path": "src/main/java/org/sonar/api/resources/File.java",
-      "projectId": 2865,
-      "subProjectId": 16
-    },
-    {
-      "uuid": "69949290-cfe6-45b6-9dd0-53f1e467b810",
-      "key": "org.codehaus.sonar:sonar-duplications",
-      "id": 20,
-      "enabled": true,
-      "qualifier": "BRC",
-      "name": "SonarQube :: Duplications",
-      "longName": "SonarQube :: Duplications",
-      "path": "sonar-duplications",
-      "projectId": 2865,
-      "subProjectId": 2865
-    },
-    {
-      "uuid": "90dd5fda-5fce-4d76-bebf-132922abad95",
-      "key": "org.codehaus.sonar:sonar-duplications:src/main/java/org/sonar/duplications/index/PackedMemoryCloneIndex.java",
-      "id": 3308,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "PackedMemoryCloneIndex.java",
-      "longName": "src/main/java/org/sonar/duplications/index/PackedMemoryCloneIndex.java",
-      "path": "src/main/java/org/sonar/duplications/index/PackedMemoryCloneIndex.java",
-      "projectId": 2865,
-      "subProjectId": 20
-    },
-    {
-      "uuid": "1b915447-5aa8-4f59-9134-346a4e88c7b7",
-      "key": "org.codehaus.sonar.plugins:sonar-core-plugin",
-      "id": 2873,
-      "enabled": true,
-      "qualifier": "BRC",
-      "name": "SonarQube :: Plugins :: Core",
-      "longName": "SonarQube :: Plugins :: Core",
-      "path": "plugins/sonar-core-plugin",
-      "projectId": 2865,
-      "subProjectId": 2865
-    },
-    {
-      "uuid": "6c9c1986-59b3-4839-8dec-9499488f64d1",
-      "key": "org.codehaus.sonar.plugins:sonar-core-plugin:src/main/java/org/sonar/plugins/core/issue/tracking/StringTextComparator.java",
-      "id": 20777,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "StringTextComparator.java",
-      "longName": "src/main/java/org/sonar/plugins/core/issue/tracking/StringTextComparator.java",
-      "path": "src/main/java/org/sonar/plugins/core/issue/tracking/StringTextComparator.java",
-      "projectId": 2865,
-      "subProjectId": 2873
-    }
-  ],
-  "issues": [
-    {
-      "key": "200d4a8b-9666-4e70-9953-7bab57933f97",
-      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
-      "componentId": 3538,
-      "project": "org.codehaus.sonar:sonar",
-      "subProject": "org.codehaus.sonar:sonar-plugin-api",
-      "rule": "common-java:DuplicatedBlocks",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "1 duplicated blocks of code.",
-      "debt": "1h",
-      "creationDate": "2014-06-06T23:38:06+0200",
-      "updateDate": "2014-07-01T17:51:37+0200",
-      "fUpdateAge": "5 months",
-      "actions": [],
-      "transitions": []
-    },
-    {
-      "key": "23c5a022-ab5b-4892-b676-a7fd58540f79",
-      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
-      "componentId": 3538,
-      "project": "org.codehaus.sonar:sonar",
-      "subProject": "org.codehaus.sonar:sonar-plugin-api",
-      "rule": "common-java:InsufficientBranchCoverage",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "1 more branches need to be covered by unit tests to reach the minimum threshold of 65.0% branch coverage.",
-      "debt": "10min",
-      "creationDate": "2014-09-02T09:25:36+0200",
-      "updateDate": "2014-10-09T16:21:48+0200",
-      "fUpdateAge": "about a month",
-      "actions": [],
-      "transitions": []
-    },
-    {
-      "key": "23d6cd5e-83ba-4e65-abef-ff8592195638",
-      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
-      "componentId": 3538,
-      "project": "org.codehaus.sonar:sonar",
-      "subProject": "org.codehaus.sonar:sonar-plugin-api",
-      "rule": "squid:S1142",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Reduce the number of returns of this method 7, down to the maximum allowed 5.",
-      "line": 248,
-      "debt": "20min",
-      "author": "julien.henry@sonarsource.com",
-      "creationDate": "2014-06-16T23:38:20+0200",
-      "updateDate": "2014-07-01T18:26:25+0200",
-      "fUpdateAge": "5 months",
-      "actions": [],
-      "transitions": []
-    },
-    {
-      "key": "8c5a4fca-57c9-44ad-89c0-6673c483e357",
-      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
-      "componentId": 3538,
-      "project": "org.codehaus.sonar:sonar",
-      "subProject": "org.codehaus.sonar:sonar-plugin-api",
-      "rule": "squid:MethodCyclomaticComplexity",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "The Cyclomatic Complexity of this method \"value\" is 22 which is greater than 10 authorized.",
-      "line": 248,
-      "debt": "10min",
-      "author": "julien.henry@sonarsource.com",
-      "creationDate": "2014-06-16T23:38:20+0200",
-      "updateDate": "2014-07-01T16:20:08+0200",
-      "fUpdateAge": "5 months",
-      "actions": [],
-      "transitions": []
-    },
-    {
-      "key": "57303136-93b5-4d96-b1ca-654160aa5bdb",
-      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
-      "componentId": 3538,
-      "project": "org.codehaus.sonar:sonar",
-      "subProject": "org.codehaus.sonar:sonar-plugin-api",
-      "rule": "squid:S1151",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Reduce this switch case number of lines from 8 to at most 5, for example by extracting code into methods.",
-      "line": 266,
-      "debt": "10min",
-      "author": "julien.henry@sonarsource.com",
-      "creationDate": "2014-06-16T23:38:20+0200",
-      "updateDate": "2014-06-30T16:41:24+0200",
-      "fUpdateAge": "5 months",
-      "actions": [],
-      "transitions": []
-    },
-    {
-      "key": "dbf052eb-f991-44db-a829-029d47b7fe2d",
-      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
-      "componentId": 3538,
-      "project": "org.codehaus.sonar:sonar",
-      "subProject": "org.codehaus.sonar:sonar-plugin-api",
-      "rule": "squid:MethodCyclomaticComplexity",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "The Cyclomatic Complexity of this method \"getVariation\" is 12 which is greater than 10 authorized.",
-      "line": 562,
-      "debt": "10min",
-      "author": "Simon Brandhof",
-      "creationDate": "2011-10-25T12:27:40+0200",
-      "updateDate": "2013-12-18T23:54:49+0100",
-      "fUpdateAge": "11 months",
-      "actions": [],
-      "transitions": []
-    },
-    {
-      "key": "50db1415-bd3c-4c24-ab0a-763177059770",
-      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
-      "componentId": 3538,
-      "project": "org.codehaus.sonar:sonar",
-      "subProject": "org.codehaus.sonar:sonar-plugin-api",
-      "rule": "squid:S1698",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Change this comparison to use the equals method.",
-      "line": 684,
-      "debt": "2min",
-      "author": "david@gageot.net",
-      "creationDate": "2014-06-26T23:17:10+0200",
-      "updateDate": "2014-07-01T16:13:48+0200",
-      "fUpdateAge": "5 months",
-      "actions": [],
-      "transitions": []
-    },
-    {
-      "key": "5fbdc597-0d83-4ea2-9d9d-ac192ec1eec1",
-      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
-      "componentId": 3538,
-      "project": "org.codehaus.sonar:sonar",
-      "subProject": "org.codehaus.sonar:sonar-plugin-api",
-      "rule": "squid:S1067",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Reduce the number of conditional operators (5) used in the expression (maximum allowed 3).",
-      "line": 684,
-      "debt": "10min",
-      "author": "david@gageot.net",
-      "creationDate": "2013-08-28T12:19:16+0200",
-      "updateDate": "2013-12-10T14:28:37+0100",
-      "fUpdateAge": "12 months",
-      "actions": [],
-      "transitions": []
-    },
-    {
-      "key": "186d1419-f5e9-412f-8a8e-f8cd81920359",
-      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
-      "componentId": 3538,
-      "project": "org.codehaus.sonar:sonar",
-      "subProject": "org.codehaus.sonar:sonar-plugin-api",
-      "rule": "squid:MethodCyclomaticComplexity",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "The Cyclomatic Complexity of this method \"equals\" is 15 which is greater than 10 authorized.",
-      "line": 724,
-      "debt": "10min",
-      "author": "Simon Brandhof",
-      "creationDate": "2011-10-25T12:27:40+0200",
-      "updateDate": "2014-03-12T10:43:19+0100",
-      "fUpdateAge": "9 months",
-      "actions": [],
-      "transitions": []
-    },
-    {
-      "key": "225d3b74-8b61-46a1-aac2-68221d6cd933",
-      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure_2.java",
-      "componentId": 3538,
-      "project": "org.codehaus.sonar:sonar",
-      "subProject": "org.codehaus.sonar:sonar-plugin-api",
-      "rule": "squid:S1142",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Reduce the number of returns of this method 6, down to the maximum allowed 5.",
-      "line": 724,
-      "debt": "20min",
-      "author": "simon.brandhof@gmail.com",
-      "creationDate": "2013-08-09T16:04:33+0200",
-      "updateDate": "2014-03-12T10:43:19+0100",
-      "fUpdateAge": "9 months",
-      "actions": [],
-      "transitions": []
-    }
-  ],
-  "rules": [
-    {
-      "key": "squid:S1698",
-      "name": "Objects should be compared with \"equals()\"",
-      "lang": "java",
-      "desc": "<p>Using the equality (<code>==</code>) and inequality (<code>!=</code>) operators to compare two objects does not check to see if they have the same values. Rather it checks to see if both object references point to exactly the same object in memory. The vast majority of the time, this is not what you want to do. Use the .equals() method to compare the values of two objects or to compare a string object to a string literal.</p>\n\n<h2>Noncompliant Code Sample</h2>\n<pre>\nString str1 = \"blue\";\nString str2 = \"blue\";\nString str3 = str1;\n\nif (str1 == str2)\n{\n  System.out.println(\"they're both 'blue'\"); // this doesn't print because the objects are different\n}\n\nif (str1 == \"blue\")\n{\n  System.out.println(\"they're both 'blue'\"); // this doesn't print because the objects are different\n}\n\nif (str1 == str3)\n{\n  System.out.println(\"they're the same object\"); // this prints\n}\n</pre>\n\n<h2>Compliant Solution</h2>\n<pre>\nString str1 = \"blue\";\nString str2 = \"blue\";\nString str3 = str1;\n\nif (str1.equals(str2))\n{\n  System.out.println(\"they're both 'blue'\"); // this prints\n}\n\nif (str1.equals(\"blue\"))\n{\n  System.out.println(\"they're both 'blue'\"); // this prints\n}\n\nif (str1 == str3)\n{\n  System.out.println(\"they're the same object\"); // this still prints, but it's probably not what you meant to do\n}\n</pre>",
-      "status": "READY",
-      "langName": "Java"
-    },
-    {
-      "key": "common-java:DuplicatedBlocks",
-      "name": "Duplicated blocks",
-      "lang": "java",
-      "desc": "<p>An issue is created on a file as soon as there is a block of duplicated code on this file. It gives the number of blocks in the file.</p>",
-      "status": "READY",
-      "langName": "Java"
-    },
-    {
-      "key": "squid:MethodCyclomaticComplexity",
-      "name": "Methods should not be too complex",
-      "lang": "java",
-      "desc": "<p>The Cyclomatic Complexity is measured by the number of\n\t(&amp;&amp;, ||) operators and (if, while, do, for, ?:, catch, switch,\n\tcase, return, throw) statements in the body of a class plus one for\n\teach constructor, method (but not getter/setter), static initializer,\n\tor instance initializer in the class. The last return stament in\n\tmethod, if exists, is not taken into account.</p>\n<p>\n\tEven when the Cyclomatic Complexity of a class is very high, this\n\tcomplexity might be well distributed among all methods. Nevertheless,\n\tmost of the time, a very complex class is a class which breaks the <a\n\t\thref=\"http://en.wikipedia.org/wiki/Single_responsibility_principle\">Single\n\t\tResponsibility Principle</a> and which should be re-factored to be split\n\tin several classes.\n</p>",
-      "status": "READY",
-      "langName": "Java"
-    },
-    {
-      "key": "squid:S1142",
-      "name": "Methods should not contain too many return statements",
-      "lang": "java",
-      "desc": "<p>\nHaving too many return statements in a method increases the method's essential complexity because the flow of execution is broken each time a return statement is encountered.\nThis makes it harder to read and understand the logic of the method.\n</p>\n\n<p>\nThe following code snippet illustrates this rule with the default threshold of 3:\n</p>\n\n<pre>\npublic boolean myMethod() { // Non-Compliant as there are 4 return statements\n  if (condition1) {\n    return true;\n  } else {\n    if (condition2) {\n      return false;\n    } else {\n      return true;\n    }\n  }\n  return false;\n}\n</pre>",
-      "status": "READY",
-      "langName": "Java"
-    },
-    {
-      "key": "squid:S1067",
-      "name": "Expressions should not be too complex",
-      "lang": "java",
-      "desc": "<p>\nThe complexity of an expression is defined by the number of <code>&&</code>, <code>||</code> and <code>condition ? ifTrue : ifFalse</code> operators it contains.\nA single expression's complexity should not become too high to keep the code readable.\n</p>\n\n<p>The following code, with a maximum complexity of 3:</p>\n\n<pre>\nif (condition1 && condition2 && condition3 && condition4) { /* ... */ }  // Non-Compliant\n</pre>\n\n<p>could be refactored into something like:</p>\n\n<pre>\nif (relevantMethodName1() && relevantMethodName2()) { /* ... */ }        // Compliant\n\n/* ... */\n\nprivate boolean relevantMethodName1() {\n  return condition1 && condition2;\n}\n\nprivate boolean relevantMethodName2() {\n  return condition3 && condition4;\n}\n</pre>",
-      "status": "READY",
-      "langName": "Java"
-    },
-    {
-      "key": "squid:S1151",
-      "name": "Switch cases should not have too many lines",
-      "lang": "java",
-      "desc": "<p>Switch cases should remain small to keep the overall switch compact and readable.</p>\n\n<p>The following code snippet illustrates this rule with the default threshold of 5:</p>\n\n<pre>\nswitch (myVariable) {\n  case 0:                     // Compliant - 5 lines till following case\n    System.out.println(\"\");\n    System.out.println(\"\");\n    System.out.println(\"\");\n    break;\n  default:                    // Non-Compliant - 6 lines till switch end\n    System.out.println(\"\");\n    System.out.println(\"\");\n    System.out.println(\"\");\n    System.out.println(\"\");\n    break;\n}\n</pre>",
-      "status": "READY",
-      "langName": "Java"
-    },
-    {
-      "key": "common-java:InsufficientBranchCoverage",
-      "name": "Insufficient branch coverage by unit tests",
-      "lang": "java",
-      "desc": "<p>An issue is created on a file as soon as the branch coverage on this file is less than the required threshold.It gives the number of branches to be covered in order to reach the required threshold.</p>",
-      "status": "READY",
-      "langName": "Java"
-    }
-  ],
-  "users": [],
-  "languages": [
-    {
-      "key": "js",
-      "name": "JavaScript"
-    },
-    {
-      "key": "java",
-      "name": "Java"
-    }
-  ],
-  "maxResultsReached": false,
-  "paging": {
-    "pageIndex": 1,
-    "pageSize": 50,
-    "total": 10,
-    "fTotal": "10",
-    "pages": 1
-  },
-  "facets": [
-    {
-      "property": "severities",
-      "values": [
-        {
-          "val": "MAJOR",
-          "count": 10
-        },
-        {
-          "val": "INFO",
-          "count": 3
-        },
-        {
-          "val": "MINOR",
-          "count": 0
-        },
-        {
-          "val": "CRITICAL",
-          "count": 0
-        },
-        {
-          "val": "BLOCKER",
-          "count": 0
-        }
-      ]
-    },
-    {
-      "property": "statuses",
-      "values": [
-        {
-          "val": "CONFIRMED",
-          "count": 10
-        },
-        {
-          "val": "OPEN",
-          "count": 0
-        },
-        {
-          "val": "REOPENED",
-          "count": 0
-        },
-        {
-          "val": "RESOLVED",
-          "count": 0
-        },
-        {
-          "val": "CLOSED",
-          "count": 0
-        }
-      ]
-    },
-    {
-      "property": "resolutions",
-      "values": [
-        {
-          "val": "REMOVED",
-          "count": 43
-        },
-        {
-          "val": "FIXED",
-          "count": 4
-        },
-        {
-          "val": "",
-          "count": 10
-        },
-        {
-          "val": "FALSE-POSITIVE",
-          "count": 0
-        }
-      ]
-    },
-    {
-      "property": "projectUuids",
-      "values": [
-        {
-          "val": "69e57151-be0d-4157-adff-c06741d88879",
-          "count": 10
-        }
-      ]
-    },
-    {
-      "property": "componentUuids",
-      "values": [
-        {
-          "val": "90dd5fda-5fce-4d76-bebf-132922abad95",
-          "count": 20
-        },
-        {
-          "val": "e2550527-3f86-4082-a9ae-e345f5a735aa",
-          "count": 10
-        },
-        {
-          "val": "97606f40-f3ef-4922-aa37-f67485917e67",
-          "count": 8
-        },
-        {
-          "val": "6c9c1986-59b3-4839-8dec-9499488f64d1",
-          "count": 7
-        },
-        {
-          "val": "e1b3c47e-e9a2-42ea-9cac-439ce2345d7e",
-          "count": 6
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/search-reopened.json b/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/search-reopened.json
deleted file mode 100644 (file)
index efd73bc..0000000
+++ /dev/null
@@ -1,485 +0,0 @@
-{
-  "total": 4,
-  "p": 1,
-  "ps": 50,
-  "projects": [
-    {
-      "uuid": "06a742ea-5c55-4c7e-a2b4-8747c163cb40",
-      "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
-      "id": 17637,
-      "qualifier": "TRK",
-      "name": "Sonar :: Issues Report :: Plugin",
-      "longName": "Sonar :: Issues Report :: Plugin"
-    },
-    {
-      "uuid": "69e57151-be0d-4157-adff-c06741d88879",
-      "key": "org.codehaus.sonar:sonar",
-      "id": 2865,
-      "qualifier": "TRK",
-      "name": "SonarQube",
-      "longName": "SonarQube"
-    },
-    {
-      "uuid": "963cefe8-9128-475f-8d39-636685195e43",
-      "key": "com.sonarsource.rpg:rpg",
-      "id": 27165,
-      "qualifier": "TRK",
-      "name": "SonarSource :: RPG",
-      "longName": "SonarSource :: RPG"
-    }
-  ],
-  "components": [
-    {
-      "uuid": "f62c3080-6e75-4940-ae95-7dae743bcac3",
-      "key": "org.codehaus.sonar:sonar-server:src/main/java/org/sonar/server/search/request/ProxySearchScrollRequestBuilder.java",
-      "id": 35659,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "ProxySearchScrollRequestBuilder.java",
-      "longName": "src/main/java/org/sonar/server/search/request/ProxySearchScrollRequestBuilder.java",
-      "path": "src/main/java/org/sonar/server/search/request/ProxySearchScrollRequestBuilder.java",
-      "projectId": 2865,
-      "subProjectId": 2872
-    },
-    {
-      "uuid": "69e57151-be0d-4157-adff-c06741d88879",
-      "key": "org.codehaus.sonar:sonar",
-      "id": 2865,
-      "enabled": true,
-      "qualifier": "TRK",
-      "name": "SonarQube",
-      "longName": "SonarQube"
-    },
-    {
-      "uuid": "0160edec-b7ca-49a1-93ca-a6ea2c38ed21",
-      "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin:src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
-      "id": 17639,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "IssuesReportPlugin.java",
-      "longName": "src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
-      "path": "src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
-      "projectId": 17637,
-      "subProjectId": 17637
-    },
-    {
-      "uuid": "6acccd14-18f8-436e-9a20-1d2d1f91295b",
-      "key": "com.sonarsource.rpg:rpg-analyzer:src/main/java/com/sonar/rpg/parser/Parser.java",
-      "id": 27173,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "Parser.java",
-      "longName": "src/main/java/com/sonar/rpg/parser/Parser.java",
-      "path": "src/main/java/com/sonar/rpg/parser/Parser.java",
-      "projectId": 27165,
-      "subProjectId": 27166
-    },
-    {
-      "uuid": "06a742ea-5c55-4c7e-a2b4-8747c163cb40",
-      "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
-      "id": 17637,
-      "enabled": true,
-      "qualifier": "TRK",
-      "name": "Sonar :: Issues Report :: Plugin",
-      "longName": "Sonar :: Issues Report :: Plugin"
-    },
-    {
-      "uuid": "98662175-0f52-4f83-b0e9-1e9444320b5b",
-      "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin:src/main/java/org/sonar/issuesreport/ReportJob.java",
-      "id": 17640,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "ReportJob.java",
-      "longName": "src/main/java/org/sonar/issuesreport/ReportJob.java",
-      "path": "src/main/java/org/sonar/issuesreport/ReportJob.java",
-      "projectId": 17637,
-      "subProjectId": 17637
-    },
-    {
-      "uuid": "a6b74bc6-94b9-431f-b7fd-524553d42405",
-      "key": "com.sonarsource.rpg:rpg-analyzer",
-      "id": 27166,
-      "enabled": true,
-      "qualifier": "BRC",
-      "name": "SonarSource :: RPG :: Analyzer",
-      "longName": "SonarSource :: RPG :: Analyzer",
-      "path": "rpg-analyzer",
-      "projectId": 27165,
-      "subProjectId": 27165
-    },
-    {
-      "uuid": "e1f6f8bd-6b5f-4e2d-b936-4abffc9e4264",
-      "key": "org.codehaus.sonar:sonar-server",
-      "id": 2872,
-      "enabled": true,
-      "qualifier": "BRC",
-      "name": "SonarQube :: Server",
-      "longName": "SonarQube :: Server",
-      "path": "sonar-server",
-      "projectId": 2865,
-      "subProjectId": 2865
-    },
-    {
-      "uuid": "963cefe8-9128-475f-8d39-636685195e43",
-      "key": "com.sonarsource.rpg:rpg",
-      "id": 27165,
-      "enabled": true,
-      "qualifier": "TRK",
-      "name": "SonarSource :: RPG",
-      "longName": "SonarSource :: RPG"
-    }
-  ],
-  "issues": [
-    {
-      "key": "80f1562f-9f64-48a9-a6bb-1dcd2ebf444a",
-      "component": "org.codehaus.sonar-plugins:sonar-issues-report-plugin:src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
-      "componentId": 17639,
-      "project": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
-      "rule": "squid:S1161",
-      "status": "REOPENED",
-      "severity": "MINOR",
-      "message": "Add the \"@Override\" annotation above this method signature",
-      "line": 61,
-      "debt": "5min",
-      "assignee": "julien.henry",
-      "author": "julien.henry@sonarsource.com",
-      "creationDate": "2014-10-09T23:03:12+0200",
-      "updateDate": "2014-11-24T08:11:19+0100",
-      "fUpdateAge": "14 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ],
-      "assigneeName": "Julien Henry"
-    },
-    {
-      "key": "9eae5201-96c7-4e78-a407-8d58479c98a3",
-      "component": "org.codehaus.sonar-plugins:sonar-issues-report-plugin:src/main/java/org/sonar/issuesreport/ReportJob.java",
-      "componentId": 17640,
-      "project": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
-      "rule": "squid:S1161",
-      "status": "REOPENED",
-      "severity": "MAJOR",
-      "message": "Add the \"@Override\" annotation above this method signature",
-      "line": 39,
-      "debt": "5min",
-      "assignee": "julien.henry",
-      "author": "julien.henry@sonarsource.com",
-      "creationDate": "2014-10-09T23:03:12+0200",
-      "updateDate": "2014-11-18T08:25:31+0100",
-      "fUpdateAge": "20 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ],
-      "assigneeName": "Julien Henry"
-    },
-    {
-      "key": "50bfc04f-6137-457a-a967-f6b1b7345365",
-      "component": "org.codehaus.sonar:sonar-server:src/main/java/org/sonar/server/search/request/ProxySearchScrollRequestBuilder.java",
-      "componentId": 35659,
-      "project": "org.codehaus.sonar:sonar",
-      "subProject": "org.codehaus.sonar:sonar-server",
-      "rule": "common-java:InsufficientBranchCoverage",
-      "status": "REOPENED",
-      "severity": "MAJOR",
-      "message": "1 more branches need to be covered by unit tests to reach the minimum threshold of 65.0% branch coverage.",
-      "debt": "10min",
-      "assignee": "julien.lancelot",
-      "creationDate": "2014-11-04T14:51:27+0100",
-      "updateDate": "2014-11-10T23:29:27+0100",
-      "fUpdateAge": "27 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ],
-      "assigneeName": "Julien Lancelot"
-    },
-    {
-      "key": "7012d6fc-e663-4032-aba6-70c4522453b4",
-      "component": "com.sonarsource.rpg:rpg-analyzer:src/main/java/com/sonar/rpg/parser/Parser.java",
-      "componentId": 27173,
-      "project": "com.sonarsource.rpg:rpg",
-      "subProject": "com.sonarsource.rpg:rpg-analyzer",
-      "rule": "squid:S1994",
-      "status": "REOPENED",
-      "severity": "MAJOR",
-      "message": "This loop's stop condition tests \"isEndOfFile()\" but the incrementer updates \"lineNumber\".",
-      "line": 69,
-      "debt": "20min",
-      "assignee": "pierre-yves.nicolas",
-      "author": "pierre-yves.nicolas@sonarsource.com",
-      "creationDate": "2014-10-09T23:05:10+0200",
-      "updateDate": "2014-10-31T10:33:08+0100",
-      "fUpdateAge": "about a month",
-      "comments": [
-        {
-          "key": "9d2b1d6e-9c9c-4ff2-bc55-af622922c4f0",
-          "login": "evgeny.mandrikov",
-          "userName": "Evgeny Mandrikov",
-          "htmlText": "Severity changed from &quot;critical&quot; to &quot;major&quot;, because this is a new Java rule.<br/>Also message looks suspicious. Nico, could you please take a look?",
-          "markdown": "Severity changed from \"critical\" to \"major\", because this is a new Java rule.\nAlso message looks suspicious. Nico, could you please take a look?",
-          "updatable": false,
-          "createdAt": "2014-10-10T15:49:23+0200"
-        },
-        {
-          "key": "583033bd-c0be-4865-ba86-f1773c712bba",
-          "login": "nicolas.peru",
-          "userName": "Nicolas Peru",
-          "htmlText": "message has been improved in <a href=\"https://github.com/SonarSource/sonar-java/commit/d1e4fa74ada69039958dbff8a94c776fd6be6639\" target=\"_blank\">https://github.com/SonarSource/sonar-java/commit/d1e4fa74ada69039958dbff8a94c776fd6be6639</a>",
-          "markdown": "message has been improved in https://github.com/SonarSource/sonar-java/commit/d1e4fa74ada69039958dbff8a94c776fd6be6639",
-          "updatable": false,
-          "createdAt": "2014-10-13T17:38:52+0200"
-        }
-      ],
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ],
-      "assigneeName": "Pierre-Yves Nicolas"
-    }
-  ],
-  "rules": [
-    {
-      "key": "squid:S1994",
-      "name": "\"for\" loop incrementers should modify the variable being tested in the loop's stop condition",
-      "lang": "java",
-      "desc": "<p>It is almost always an error when a <code>for</code> loop's stop condition and incrementer don't act on the same variable. Even when it is not, it could confuse future maintainers of the code, and should be avoided.</p>\n\n<h2>Noncompliant Code Example</h2>\n<pre>\nfor (i = 0; i < 10; j++) {  // Noncompliant\n  // ...\n}\n</pre>\n\n<h2>Compliant Solution</h2>\n<pre>\nfor (i = 0; i < 10; i++) {\n  // ...\n}\n</pre>",
-      "status": "REMOVED",
-      "langName": "Java"
-    },
-    {
-      "key": "common-java:InsufficientBranchCoverage",
-      "name": "Insufficient branch coverage by unit tests",
-      "lang": "java",
-      "desc": "<p>An issue is created on a file as soon as the branch coverage on this file is less than the required threshold.It gives the number of branches to be covered in order to reach the required threshold.</p>",
-      "status": "READY",
-      "langName": "Java"
-    },
-    {
-      "key": "squid:S1161",
-      "name": "\"@Override\" annotation should be used on any method overriding (since Java 5) or implementing (since Java 6) another one",
-      "lang": "java",
-      "desc": "<p>Using the <code>@Override</code> annotation is useful for two reasons :</p>\n<ul>\n  <li>It elicits a warning from the compiler if the annotated method doesn't actually override anything, as in the case of a misspelling.</li>\n  <li>It improves the readability of the source code by making it obvious that methods are overridden.</li>\n</ul>\n<h2>Noncompliant Code Example</h2>\n<pre>\nclass ParentClass {\n  public boolean doSomething(){...}\n}\nclass FirstChildClass extends ParentClass {\n  public boolean doSomething(){...}  //Non-Compliant\n}\n</pre>\n\n<h2>Compliant Solution</h2>\n<pre>\nclass ParentClass {\n  public boolean doSomething(){...}\n}\nclass FirstChildClass extends ParentClass {\n  @Override\n  public boolean doSomething(){...}  //Compliant\n}\n</pre>",
-      "status": "REMOVED",
-      "langName": "Java"
-    }
-  ],
-  "users": [
-    {
-      "login": "julien.lancelot",
-      "name": "Julien Lancelot",
-      "active": true,
-      "email": "julien.lancelot@sonarsource.com"
-    },
-    {
-      "login": "pierre-yves.nicolas",
-      "name": "Pierre-Yves Nicolas",
-      "active": true,
-      "email": "pierre-yves.nicolas@sonarsource.com"
-    },
-    {
-      "login": "admin",
-      "name": "Admin Admin",
-      "active": true,
-      "email": "admin@sonarsource.com"
-    },
-    {
-      "login": "nicolas.peru",
-      "name": "Nicolas Peru",
-      "active": true,
-      "email": "nicolas.peru@sonarsource.com"
-    },
-    {
-      "login": "julien.henry",
-      "name": "Julien Henry",
-      "active": true,
-      "email": "julien.henry@sonarsource.com"
-    },
-    {
-      "login": "evgeny.mandrikov",
-      "name": "Evgeny Mandrikov",
-      "active": true,
-      "email": "evgeny.mandrikov@sonarsource.com"
-    }
-  ],
-  "actionPlans": [
-    {
-      "key": "1b9e7e52-ff58-40c1-80bf-f68429a3275e",
-      "name": "5.0",
-      "status": "OPEN",
-      "project": "org.codehaus.sonar:sonar",
-      "userLogin": "fabrice.bellingard",
-      "createdAt": "2014-09-01T17:14:55+0200",
-      "fCreatedAt": "Sep 1, 2014 5:14 PM",
-      "updatedAt": "2014-09-01T17:14:55+0200",
-      "fUpdatedAt": "Sep 1, 2014 5:14 PM"
-    },
-    {
-      "key": "151b796f-c5e1-40c9-89c0-ca391e8a31c0",
-      "name": "CPP 3.3",
-      "status": "OPEN",
-      "project": "com.sonarsource.cpp:cpp",
-      "userLogin": "eric.hartmann",
-      "createdAt": "2014-10-27T15:15:34+0100",
-      "fCreatedAt": "Oct 27, 2014 3:15 PM",
-      "updatedAt": "2014-10-27T15:15:34+0100",
-      "fUpdatedAt": "Oct 27, 2014 3:15 PM"
-    },
-    {
-      "key": "6f967cd5-687b-49ac-b4e3-b8d392374557",
-      "name": "4.5",
-      "status": "CLOSED",
-      "project": "org.codehaus.sonar:sonar",
-      "userLogin": "freddy.mallet",
-      "createdAt": "2014-07-01T21:22:52+0200",
-      "fCreatedAt": "Jul 1, 2014 9:22 PM",
-      "updatedAt": "2014-09-10T15:44:24+0200",
-      "fUpdatedAt": "Sep 10, 2014 3:44 PM"
-    }
-  ],
-  "languages": [
-    {
-      "key": "js",
-      "name": "JavaScript"
-    },
-    {
-      "key": "java",
-      "name": "Java"
-    }
-  ],
-  "maxResultsReached": false,
-  "paging": {
-    "pageIndex": 1,
-    "pageSize": 50,
-    "total": 4,
-    "fTotal": "4",
-    "pages": 1
-  },
-  "facets": [
-    {
-      "property": "severities",
-      "values": [
-        {
-          "val": "MAJOR",
-          "count": 3
-        },
-        {
-          "val": "MINOR",
-          "count": 1
-        },
-        {
-          "val": "INFO",
-          "count": 0
-        },
-        {
-          "val": "CRITICAL",
-          "count": 0
-        },
-        {
-          "val": "BLOCKER",
-          "count": 0
-        }
-      ]
-    },
-    {
-      "property": "statuses",
-      "values": [
-        {
-          "val": "CONFIRMED",
-          "count": 4583
-        },
-        {
-          "val": "OPEN",
-          "count": 324
-        },
-        {
-          "val": "REOPENED",
-          "count": 4
-        },
-        {
-          "val": "RESOLVED",
-          "count": 0
-        },
-        {
-          "val": "CLOSED",
-          "count": 0
-        }
-      ]
-    },
-    {
-      "property": "resolutions",
-      "values": [
-        {
-          "val": "",
-          "count": 4
-        },
-        {
-          "val": "FALSE-POSITIVE",
-          "count": 0
-        },
-        {
-          "val": "FIXED",
-          "count": 0
-        },
-        {
-          "val": "REMOVED",
-          "count": 0
-        }
-      ]
-    },
-    {
-      "property": "actionPlans",
-      "values": [
-        {
-          "val": "1b9e7e52-ff58-40c1-80bf-f68429a3275e",
-          "count": 4
-        },
-        {
-          "val": "151b796f-c5e1-40c9-89c0-ca391e8a31c0",
-          "count": 2
-        },
-        {
-          "val": "6f967cd5-687b-49ac-b4e3-b8d392374557",
-          "count": 1
-        },
-        {
-          "val": "",
-          "count": 4
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/search-with-tags.json b/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/search-with-tags.json
deleted file mode 100644 (file)
index 442b1de..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-{
-  "total": 1,
-  "p": 1,
-  "ps": 50,
-  "projects": [
-    {
-      "uuid": "015c6451-1709-4360-b4fa-e4508e13082d",
-      "key": "org.codehaus.sonar-plugins.xml:xml",
-      "id": 17156,
-      "qualifier": "TRK",
-      "name": "XML",
-      "longName": "XML"
-    }
-  ],
-  "components": [
-    {
-      "uuid": "639e257b-d3fb-4d10-b94a-31079b71532d",
-      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml",
-      "id": 26177,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/org/sonar/plugins/xml",
-      "longName": "src/main/java/org/sonar/plugins/xml",
-      "path": "src/main/java/org/sonar/plugins/xml",
-      "projectId": 17156,
-      "subProjectId": 17158
-    },
-    {
-      "uuid": "015c6451-1709-4360-b4fa-e4508e13082d",
-      "key": "org.codehaus.sonar-plugins.xml:xml",
-      "id": 17156,
-      "enabled": true,
-      "qualifier": "TRK",
-      "name": "XML",
-      "longName": "XML"
-    }
-
-  ],
-  "issues": [
-    {
-      "key": "94357807-fcb4-40cc-9598-9a715f1eee6e",
-      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml",
-      "componentId": 26177,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:26:37+0200",
-      "updateDate": "2014-10-09T06:32:55+0200",
-      "fUpdateAge": "26 days",
-      "tags": [
-        "security",
-        "cwe"
-      ],
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity",
-        "set_tags"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    }
-  ],
-  "rules": [
-    {
-      "key": "squid:S1228",
-      "name": "Packages should have a javadoc file 'package-info.java'",
-      "desc": "<p>Each package in a Java project should include a <code>package-info.java</code> file. The purpose of this file is to document the Java package using javadoc and declare package annotations.</p>\n\n<h2>Compliant Solution</h2>\n<pre>\n/**\n* This package has non null parameters and is documented.\n**/\n@ParametersAreNonnullByDefault\npackage org.foo.bar;\n</pre>",
-      "status": "REMOVED"
-    }
-  ],
-  "users": [],
-  "languages": [
-    {
-      "key": "js",
-      "name": "JavaScript"
-    },
-    {
-      "key": "java",
-      "name": "Java"
-    }
-  ],
-  "maxResultsReached": false,
-  "paging": {
-    "pageIndex": 1,
-    "pageSize": 50,
-    "total": 1,
-    "fTotal": "1",
-    "pages": 1
-  },
-  "facets": [
-    {
-      "property": "severities",
-      "values": [
-        {
-          "val": "MAJOR",
-          "count": 1
-        },
-        {
-          "val": "INFO",
-          "count": 0
-        },
-        {
-          "val": "MINOR",
-          "count": 0
-        },
-        {
-          "val": "CRITICAL",
-          "count": 0
-        },
-        {
-          "val": "BLOCKER",
-          "count": 0
-        }
-      ]
-    },
-    {
-      "property": "statuses",
-      "values": [
-        {
-          "val": "CONFIRMED",
-          "count": 1
-        },
-        {
-          "val": "OPEN",
-          "count": 0
-        },
-        {
-          "val": "REOPENED",
-          "count": 0
-        },
-        {
-          "val": "CLOSED",
-          "count": 0
-        },
-        {
-          "val": "RESOLVED",
-          "count": 0
-        }
-      ]
-    },
-    {
-      "property": "resolutions",
-      "values": [
-        {
-          "val": "",
-          "count": 1
-        },
-        {
-          "val": "FIXED",
-          "count": 0
-        },
-        {
-          "val": "REMOVED",
-          "count": 0
-        },
-        {
-          "val": "FALSE-POSITIVE",
-          "count": 0
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/search.json b/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/search.json
deleted file mode 100644 (file)
index 3dbc631..0000000
+++ /dev/null
@@ -1,2103 +0,0 @@
-{
-  "total": 4623,
-  "p": 1,
-  "ps": 50,
-  "projects": [
-    {
-      "uuid": "015c6451-1709-4360-b4fa-e4508e13082d",
-      "key": "org.codehaus.sonar-plugins.xml:xml",
-      "id": 17156,
-      "qualifier": "TRK",
-      "name": "XML",
-      "longName": "XML"
-    },
-    {
-      "uuid": "071bdfec-a244-444d-877e-772a68973e18",
-      "key": "com.sonarsource.plugins.vb:vb",
-      "id": 28554,
-      "qualifier": "TRK",
-      "name": "SonarSource :: Visual Basic",
-      "longName": "SonarSource :: Visual Basic"
-    }
-  ],
-  "components": [
-    {
-      "uuid": "367350ce-00c7-461b-8348-c64138515ef9",
-      "key": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks/UnusedPrivateVariableCheck.java",
-      "id": 29801,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "UnusedPrivateVariableCheck.java",
-      "longName": "src/main/java/com/sonar/vb/checks/UnusedPrivateVariableCheck.java",
-      "path": "src/main/java/com/sonar/vb/checks/UnusedPrivateVariableCheck.java",
-      "projectId": 28554,
-      "subProjectId": 29689
-    },
-    {
-      "uuid": "2c39c99e-6c3e-4635-a673-fbd876eb2107",
-      "key": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/CDataDocTokenizer.java",
-      "id": 19130,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "CDataDocTokenizer.java",
-      "longName": "src/main/java/org/sonar/xml/CDataDocTokenizer.java",
-      "path": "src/main/java/org/sonar/xml/CDataDocTokenizer.java",
-      "projectId": 17156,
-      "subProjectId": 17157
-    },
-    {
-      "uuid": "729bcb00-97b2-432d-b36e-06174e0bea26",
-      "key": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/XmlStartElementTokenizer.java",
-      "id": 19132,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "XmlStartElementTokenizer.java",
-      "longName": "src/main/java/org/sonar/xml/XmlStartElementTokenizer.java",
-      "path": "src/main/java/org/sonar/xml/XmlStartElementTokenizer.java",
-      "projectId": 17156,
-      "subProjectId": 17157
-    },
-    {
-      "uuid": "e1cf7541-9f52-4c9c-864e-85257b6126da",
-      "key": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/api",
-      "id": 26175,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/org/sonar/xml/api",
-      "longName": "src/main/java/org/sonar/xml/api",
-      "path": "src/main/java/org/sonar/xml/api",
-      "projectId": 17156,
-      "subProjectId": 17157
-    },
-    {
-      "uuid": "23eaa59a-36dd-484d-9cb3-af9ddac0943f",
-      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/parsers/AbstractParser.java",
-      "id": 17191,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "AbstractParser.java",
-      "longName": "src/main/java/org/sonar/plugins/xml/parsers/AbstractParser.java",
-      "path": "src/main/java/org/sonar/plugins/xml/parsers/AbstractParser.java",
-      "projectId": 17156,
-      "subProjectId": 17158
-    },
-    {
-      "uuid": "730a7d9f-f280-48dd-9a09-de210f5db607",
-      "key": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml",
-      "id": 26174,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/org/sonar/xml",
-      "longName": "src/main/java/org/sonar/xml",
-      "path": "src/main/java/org/sonar/xml",
-      "projectId": 17156,
-      "subProjectId": 17157
-    },
-    {
-      "uuid": "45d36e11-d9ed-4157-8a2c-916d2e131af7",
-      "key": "org.codehaus.sonar-plugins.xml:sslr-xml-toolkit",
-      "id": 17257,
-      "enabled": true,
-      "qualifier": "BRC",
-      "name": "XML :: SSLR Toolkit",
-      "longName": "XML :: SSLR Toolkit",
-      "path": "sslr-xml-toolkit",
-      "projectId": 17156,
-      "subProjectId": 17156
-    },
-    {
-      "uuid": "e3ac3a3e-ac1b-4e3a-8e38-039e06a2ca38",
-      "key": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/LineContinuationChannel.java",
-      "id": 28613,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "LineContinuationChannel.java",
-      "longName": "src/main/java/com/sonar/vb/LineContinuationChannel.java",
-      "path": "src/main/java/com/sonar/vb/LineContinuationChannel.java",
-      "projectId": 28554,
-      "subProjectId": 28555
-    },
-    {
-      "uuid": "7428200d-ce03-464d-a099-593092cd0291",
-      "key": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks/TrailingCommentCheck.java",
-      "id": 29769,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "TrailingCommentCheck.java",
-      "longName": "src/main/java/com/sonar/vb/checks/TrailingCommentCheck.java",
-      "path": "src/main/java/com/sonar/vb/checks/TrailingCommentCheck.java",
-      "projectId": 28554,
-      "subProjectId": 29689
-    },
-    {
-      "uuid": "966aa6fd-9463-422c-b785-208ad519e4ea",
-      "key": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/ProgressAstScanner.java",
-      "id": 28614,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "ProgressAstScanner.java",
-      "longName": "src/main/java/com/sonar/vb/ProgressAstScanner.java",
-      "path": "src/main/java/com/sonar/vb/ProgressAstScanner.java",
-      "projectId": 28554,
-      "subProjectId": 28555
-    },
-    {
-      "uuid": "c236560b-b257-4f34-bb7b-3977d178e1ff",
-      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/AbstractXmlCheck.java",
-      "id": 17168,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "AbstractXmlCheck.java",
-      "longName": "src/main/java/org/sonar/plugins/xml/checks/AbstractXmlCheck.java",
-      "path": "src/main/java/org/sonar/plugins/xml/checks/AbstractXmlCheck.java",
-      "projectId": 17156,
-      "subProjectId": 17158
-    },
-    {
-      "uuid": "26f2099c-664b-424a-b815-c017eb2165b1",
-      "key": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks",
-      "id": 29690,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/com/sonar/vb/checks",
-      "longName": "src/main/java/com/sonar/vb/checks",
-      "path": "src/main/java/com/sonar/vb/checks",
-      "projectId": 28554,
-      "subProjectId": 29689
-    },
-    {
-      "uuid": "4adacc63-7447-4bb1-95ae-1cc5102e8335",
-      "key": "com.sonarsource.plugins.vb:vb-checks",
-      "id": 29689,
-      "enabled": true,
-      "qualifier": "BRC",
-      "name": "SonarSource :: Visual Basic :: Checks",
-      "longName": "SonarSource :: Visual Basic :: Checks",
-      "path": "vb-checks",
-      "projectId": 28554,
-      "subProjectId": 28554
-    },
-    {
-      "uuid": "fa92c266-befe-460c-8bad-1ff13b918ec5",
-      "key": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb",
-      "id": 28611,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/com/sonar/vb",
-      "longName": "src/main/java/com/sonar/vb",
-      "path": "src/main/java/com/sonar/vb",
-      "projectId": 28554,
-      "subProjectId": 28555
-    },
-    {
-      "uuid": "e92b1510-91c3-4479-8714-44fa3a139f7c",
-      "key": "com.sonarsource.plugins.vb:sonar-vb-plugin",
-      "id": 28610,
-      "enabled": true,
-      "qualifier": "BRC",
-      "name": "SonarSource :: Visual Basic :: Sonar Plugin",
-      "longName": "SonarSource :: Visual Basic :: Sonar Plugin",
-      "path": "sonar-vb-plugin",
-      "projectId": 28554,
-      "subProjectId": 28554
-    },
-    {
-      "uuid": "1f609143-c6a4-4f76-ac38-370d349feaf7",
-      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/schemas",
-      "id": 26182,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/org/sonar/plugins/xml/schemas",
-      "longName": "src/main/java/org/sonar/plugins/xml/schemas",
-      "path": "src/main/java/org/sonar/plugins/xml/schemas",
-      "projectId": 17156,
-      "subProjectId": 17158
-    },
-    {
-      "uuid": "7abb4d57-160a-41ba-927f-b53603e843b8",
-      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/schemas/SchemaResolver.java",
-      "id": 17178,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "SchemaResolver.java",
-      "longName": "src/main/java/org/sonar/plugins/xml/schemas/SchemaResolver.java",
-      "path": "src/main/java/org/sonar/plugins/xml/schemas/SchemaResolver.java",
-      "projectId": 17156,
-      "subProjectId": 17158
-    },
-    {
-      "uuid": "c960a7a1-e078-47de-8a31-167b0f774002",
-      "key": "org.codehaus.sonar-plugins.xml:sslr-xml-toolkit:src/main/java/org/sonar/xml/toolkit",
-      "id": 26183,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/org/sonar/xml/toolkit",
-      "longName": "src/main/java/org/sonar/xml/toolkit",
-      "path": "src/main/java/org/sonar/xml/toolkit",
-      "projectId": 17156,
-      "subProjectId": 17257
-    },
-    {
-      "uuid": "7d14bd3e-33b7-4b0f-ade5-cf6cef0085b9",
-      "key": "com.sonarsource.plugins.vb:vb-squid",
-      "id": 28555,
-      "enabled": true,
-      "qualifier": "BRC",
-      "name": "SonarSource :: Visual Basic :: Squid",
-      "longName": "SonarSource :: Visual Basic :: Squid",
-      "path": "vb-squid",
-      "projectId": 28554,
-      "subProjectId": 28554
-    },
-    {
-      "uuid": "d9716626-0952-4ec7-a8fb-2760ba3256a3",
-      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/parsers",
-      "id": 26180,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/org/sonar/plugins/xml/parsers",
-      "longName": "src/main/java/org/sonar/plugins/xml/parsers",
-      "path": "src/main/java/org/sonar/plugins/xml/parsers",
-      "projectId": 17156,
-      "subProjectId": 17158
-    },
-    {
-      "uuid": "071bdfec-a244-444d-877e-772a68973e18",
-      "key": "com.sonarsource.plugins.vb:vb",
-      "id": 28554,
-      "enabled": true,
-      "qualifier": "TRK",
-      "name": "SonarSource :: Visual Basic",
-      "longName": "SonarSource :: Visual Basic"
-    },
-    {
-      "uuid": "99d31cea-6b8f-4fb6-ba87-c86ce8d339cf",
-      "key": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/api",
-      "id": 28622,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/com/sonar/vb/api",
-      "longName": "src/main/java/com/sonar/vb/api",
-      "path": "src/main/java/com/sonar/vb/api",
-      "projectId": 28554,
-      "subProjectId": 28555
-    },
-    {
-      "uuid": "26facc1b-fd2b-4fe4-a543-65e9ec692360",
-      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/rules",
-      "id": 26181,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/org/sonar/plugins/xml/rules",
-      "longName": "src/main/java/org/sonar/plugins/xml/rules",
-      "path": "src/main/java/org/sonar/plugins/xml/rules",
-      "projectId": 17156,
-      "subProjectId": 17158
-    },
-    {
-      "uuid": "d789993b-c5fe-414b-9164-33871fd3c3c2",
-      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks",
-      "id": 26178,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/org/sonar/plugins/xml/checks",
-      "longName": "src/main/java/org/sonar/plugins/xml/checks",
-      "path": "src/main/java/org/sonar/plugins/xml/checks",
-      "projectId": 17156,
-      "subProjectId": 17158
-    },
-    {
-      "uuid": "91715de9-47ed-4837-a51b-4dcead30a71c",
-      "key": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/plugin",
-      "id": 28952,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/com/sonar/vb/plugin",
-      "longName": "src/main/java/com/sonar/vb/plugin",
-      "path": "src/main/java/com/sonar/vb/plugin",
-      "projectId": 28554,
-      "subProjectId": 28610
-    },
-    {
-      "uuid": "3c338bdb-39c9-4cb8-9b13-2e08358047d6",
-      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/language",
-      "id": 26179,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/org/sonar/plugins/xml/language",
-      "longName": "src/main/java/org/sonar/plugins/xml/language",
-      "path": "src/main/java/org/sonar/plugins/xml/language",
-      "projectId": 17156,
-      "subProjectId": 17158
-    },
-    {
-      "uuid": "639e257b-d3fb-4d10-b94a-31079b71532d",
-      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml",
-      "id": 26177,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/org/sonar/plugins/xml",
-      "longName": "src/main/java/org/sonar/plugins/xml",
-      "path": "src/main/java/org/sonar/plugins/xml",
-      "projectId": 17156,
-      "subProjectId": 17158
-    },
-    {
-      "uuid": "08bafb36-5990-4f10-821c-534dc451d297",
-      "key": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks/NumberedLineProcessor.java",
-      "id": 29907,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "NumberedLineProcessor.java",
-      "longName": "src/main/java/com/sonar/vb/checks/NumberedLineProcessor.java",
-      "path": "src/main/java/com/sonar/vb/checks/NumberedLineProcessor.java",
-      "projectId": 28554,
-      "subProjectId": 29689
-    },
-    {
-      "uuid": "e3bb947b-9385-4972-8367-f69beb488d21",
-      "key": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/metrics/LinesOfCodeVisitor.java",
-      "id": 28629,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "LinesOfCodeVisitor.java",
-      "longName": "src/main/java/com/sonar/vb/metrics/LinesOfCodeVisitor.java",
-      "path": "src/main/java/com/sonar/vb/metrics/LinesOfCodeVisitor.java",
-      "projectId": 28554,
-      "subProjectId": 28555
-    },
-    {
-      "uuid": "dd9c314f-0c19-498d-9e16-67ef0b49486e",
-      "key": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/colorizer",
-      "id": 28932,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/com/sonar/vb/colorizer",
-      "longName": "src/main/java/com/sonar/vb/colorizer",
-      "path": "src/main/java/com/sonar/vb/colorizer",
-      "projectId": 28554,
-      "subProjectId": 28610
-    },
-    {
-      "uuid": "9d771010-5d4f-49ed-9f70-ff131189610d",
-      "key": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/pp",
-      "id": 28630,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/com/sonar/vb/pp",
-      "longName": "src/main/java/com/sonar/vb/pp",
-      "path": "src/main/java/com/sonar/vb/pp",
-      "projectId": 28554,
-      "subProjectId": 28555
-    },
-    {
-      "uuid": "8597e351-39d2-4b17-8422-00409d21bccd",
-      "key": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/cpd",
-      "id": 28935,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/com/sonar/vb/cpd",
-      "longName": "src/main/java/com/sonar/vb/cpd",
-      "path": "src/main/java/com/sonar/vb/cpd",
-      "projectId": 28554,
-      "subProjectId": 28610
-    },
-    {
-      "uuid": "9d44133a-d633-48b4-a54b-800df905a1fd",
-      "key": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/pp/EmptyLinesRemovalPreprocessor.java",
-      "id": 28631,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "EmptyLinesRemovalPreprocessor.java",
-      "longName": "src/main/java/com/sonar/vb/pp/EmptyLinesRemovalPreprocessor.java",
-      "path": "src/main/java/com/sonar/vb/pp/EmptyLinesRemovalPreprocessor.java",
-      "projectId": 28554,
-      "subProjectId": 28555
-    },
-    {
-      "uuid": "b6d552ca-aabe-499b-9c72-18247177ae68",
-      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin",
-      "id": 17158,
-      "enabled": true,
-      "qualifier": "BRC",
-      "name": "XML :: SonarQube Plugin",
-      "longName": "XML :: SonarQube Plugin",
-      "path": "sonar-xml-plugin",
-      "projectId": 17156,
-      "subProjectId": 17156
-    },
-    {
-      "uuid": "2e9ae8fd-fa5c-48a4-a0f6-1eaba1c38a2f",
-      "key": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/batch",
-      "id": 28928,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/com/sonar/vb/batch",
-      "longName": "src/main/java/com/sonar/vb/batch",
-      "path": "src/main/java/com/sonar/vb/batch",
-      "projectId": 28554,
-      "subProjectId": 28610
-    },
-    {
-      "uuid": "015c6451-1709-4360-b4fa-e4508e13082d",
-      "key": "org.codehaus.sonar-plugins.xml:xml",
-      "id": 17156,
-      "enabled": true,
-      "qualifier": "TRK",
-      "name": "XML",
-      "longName": "XML"
-    },
-    {
-      "uuid": "1bb3f177-d173-469e-a178-6ae8078bd765",
-      "key": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/metrics",
-      "id": 28626,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/com/sonar/vb/metrics",
-      "longName": "src/main/java/com/sonar/vb/metrics",
-      "path": "src/main/java/com/sonar/vb/metrics",
-      "projectId": 28554,
-      "subProjectId": 28555
-    },
-    {
-      "uuid": "216ebdfc-9fc9-4c06-9f14-859d051fae69",
-      "key": "org.codehaus.sonar-plugins.xml:xml-squid",
-      "id": 17157,
-      "enabled": true,
-      "qualifier": "BRC",
-      "name": "XML :: Squid",
-      "longName": "XML :: Squid",
-      "path": "xml-squid",
-      "projectId": 17156,
-      "subProjectId": 17156
-    },
-    {
-      "uuid": "aad717d1-12f5-48c0-9273-0c9aac102467",
-      "key": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/metrics/CommentsVisitor.java",
-      "id": 28627,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "CommentsVisitor.java",
-      "longName": "src/main/java/com/sonar/vb/metrics/CommentsVisitor.java",
-      "path": "src/main/java/com/sonar/vb/metrics/CommentsVisitor.java",
-      "projectId": 28554,
-      "subProjectId": 28555
-    },
-    {
-      "uuid": "53ecdff7-a6af-4cc9-b30c-7656a33cf732",
-      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/XPathCheck.java",
-      "id": 17162,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "XPathCheck.java",
-      "longName": "src/main/java/org/sonar/plugins/xml/checks/XPathCheck.java",
-      "path": "src/main/java/org/sonar/plugins/xml/checks/XPathCheck.java",
-      "projectId": 17156,
-      "subProjectId": 17158
-    },
-    {
-      "uuid": "d8f590fb-5a56-49a9-991c-4c9d4ec5a7fe",
-      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/IndentCheck.java",
-      "id": 17163,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "IndentCheck.java",
-      "longName": "src/main/java/org/sonar/plugins/xml/checks/IndentCheck.java",
-      "path": "src/main/java/org/sonar/plugins/xml/checks/IndentCheck.java",
-      "projectId": 17156,
-      "subProjectId": 17158
-    },
-    {
-      "uuid": "7d79ad61-0f0a-449a-bdce-fd544c8d8d27",
-      "key": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/api/XmlGrammar.java",
-      "id": 17160,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "XmlGrammar.java",
-      "longName": "src/main/java/org/sonar/xml/api/XmlGrammar.java",
-      "path": "src/main/java/org/sonar/xml/api/XmlGrammar.java",
-      "projectId": 17156,
-      "subProjectId": 17157
-    },
-    {
-      "uuid": "be763c66-8400-432d-9e84-bc2e9d6e164c",
-      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/NewlineCheck.java",
-      "id": 17166,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "NewlineCheck.java",
-      "longName": "src/main/java/org/sonar/plugins/xml/checks/NewlineCheck.java",
-      "path": "src/main/java/org/sonar/plugins/xml/checks/NewlineCheck.java",
-      "projectId": 17156,
-      "subProjectId": 17158
-    },
-    {
-      "uuid": "c2c82fc7-073f-449e-bb18-ebbf60ceb1d9",
-      "key": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/cpd/VbCpdTokenizer.java",
-      "id": 28937,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "VbCpdTokenizer.java",
-      "longName": "src/main/java/com/sonar/vb/cpd/VbCpdTokenizer.java",
-      "path": "src/main/java/com/sonar/vb/cpd/VbCpdTokenizer.java",
-      "projectId": 28554,
-      "subProjectId": 28610
-    },
-    {
-      "uuid": "bc2e055a-eb0a-4ba6-8c06-8390bdb2c08a",
-      "key": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks/ExpressionComplexityCheck.java",
-      "id": 29783,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "ExpressionComplexityCheck.java",
-      "longName": "src/main/java/com/sonar/vb/checks/ExpressionComplexityCheck.java",
-      "path": "src/main/java/com/sonar/vb/checks/ExpressionComplexityCheck.java",
-      "projectId": 28554,
-      "subProjectId": 29689
-    },
-    {
-      "uuid": "7bbe651e-5b83-4002-9fa9-79397693d529",
-      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/XmlSchemaCheck.java",
-      "id": 17164,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "XmlSchemaCheck.java",
-      "longName": "src/main/java/org/sonar/plugins/xml/checks/XmlSchemaCheck.java",
-      "path": "src/main/java/org/sonar/plugins/xml/checks/XmlSchemaCheck.java",
-      "projectId": 17156,
-      "subProjectId": 17158
-    },
-    {
-      "uuid": "2dc0e6d7-09b9-4f99-a25e-acf288b26581",
-      "key": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/foundation",
-      "id": 28938,
-      "enabled": true,
-      "qualifier": "DIR",
-      "name": "src/main/java/com/sonar/vb/foundation",
-      "longName": "src/main/java/com/sonar/vb/foundation",
-      "path": "src/main/java/com/sonar/vb/foundation",
-      "projectId": 28554,
-      "subProjectId": 28610
-    }
-  ],
-  "issues": [
-    {
-      "key": "94357807-fcb4-40cc-9598-9a715f1eee6e",
-      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml",
-      "componentId": 26177,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:26:37+0200",
-      "updateDate": "2014-10-09T06:32:55+0200",
-      "fUpdateAge": "26 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "c24088ec-b204-4744-827e-7509fd34c2a7",
-      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks",
-      "componentId": 26178,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml/checks' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:26:37+0200",
-      "updateDate": "2014-10-09T06:33:02+0200",
-      "fUpdateAge": "26 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "e5f8e82a-2765-4084-ba57-4a81ee8da1df",
-      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/AbstractXmlCheck.java",
-      "componentId": 17168,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "common-java:InsufficientBranchCoverage",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "1 more branches need to be covered by unit tests to reach the minimum threshold of 65.0% branch coverage.",
-      "debt": "10min",
-      "creationDate": "2013-02-05T00:47:29+0100",
-      "updateDate": "2014-02-14T23:34:11+0100",
-      "fUpdateAge": "8 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "56f021c3-b717-4cc8-9fad-5f1911a8d66f",
-      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/IndentCheck.java",
-      "componentId": 17163,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:MethodCyclomaticComplexity",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "The Cyclomatic Complexity of this method \"collectIndent\" is 13 which is greater than 10 authorized.",
-      "line": 47,
-      "debt": "10min",
-      "author": "Evgeny Mandrikov",
-      "creationDate": "2013-02-05T00:47:29+0100",
-      "updateDate": "2013-12-18T23:52:20+0100",
-      "fUpdateAge": "10 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "b32333fe-7efd-4bc8-a72b-bad90361af1a",
-      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/IndentCheck.java",
-      "componentId": 17163,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1151",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Reduce this switch case number of lines from 26 to at most 5, for example by extracting code into methods.",
-      "line": 54,
-      "debt": "10min",
-      "author": "Evgeny Mandrikov",
-      "creationDate": "2013-08-11T00:06:49+0200",
-      "updateDate": "2013-10-23T15:15:05+0200",
-      "fUpdateAge": "about a year",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "2174148b-6be9-4213-8f57-c63576904e9e",
-      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/IndentCheck.java",
-      "componentId": 17163,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S134",
-      "status": "CONFIRMED",
-      "severity": "MINOR",
-      "message": "Refactor this code to not nest more than 4 if/for/while/switch/try statements.",
-      "line": 59,
-      "debt": "20min",
-      "author": "mandrikov@gmail.com",
-      "creationDate": "2013-10-18T23:46:56+0200",
-      "updateDate": "2013-12-18T23:52:20+0100",
-      "fUpdateAge": "10 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "633c9ba7-b757-4bdf-9e91-ff2ccbc9dd74",
-      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/NewlineCheck.java",
-      "componentId": 17166,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1151",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Reduce this switch case number of lines from 9 to at most 5, for example by extracting code into methods.",
-      "line": 49,
-      "debt": "10min",
-      "author": "Evgeny Mandrikov",
-      "creationDate": "2013-08-11T00:06:49+0200",
-      "updateDate": "2013-10-23T15:15:05+0200",
-      "fUpdateAge": "about a year",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "63f5037f-a060-4cec-820a-25221a4cc313",
-      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/NewlineCheck.java",
-      "componentId": 17166,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1151",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Reduce this switch case number of lines from 6 to at most 5, for example by extracting code into methods.",
-      "line": 58,
-      "debt": "10min",
-      "author": "Evgeny Mandrikov",
-      "creationDate": "2013-08-13T23:58:09+0200",
-      "updateDate": "2013-10-23T15:15:05+0200",
-      "fUpdateAge": "about a year",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "bf75fe08-7ddc-4c69-989d-7e5b83cee043",
-      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/XmlSchemaCheck.java",
-      "componentId": 17164,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:RightCurlyBraceSameLineAsNextBlockCheck",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Move this \"else\" on the same line that the previous closing curly brace.",
-      "line": 167,
-      "debt": "1min",
-      "author": "Evgeny Mandrikov",
-      "creationDate": "2013-08-07T23:58:51+0200",
-      "updateDate": "2013-10-23T15:15:05+0200",
-      "fUpdateAge": "about a year",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "6d6e64ae-94cd-4367-a9bc-df51093a6468",
-      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/XmlSchemaCheck.java",
-      "componentId": 17164,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "common-java:InsufficientBranchCoverage",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "5 more branches need to be covered by unit tests to reach the minimum threshold of 65.0% branch coverage.",
-      "debt": "50min",
-      "creationDate": "2013-02-05T00:47:29+0100",
-      "updateDate": "2014-06-06T15:53:08+0200",
-      "fUpdateAge": "5 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "5ddc1783-3c72-4f68-bbd1-d2d1fad425eb",
-      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/XPathCheck.java",
-      "componentId": 17162,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "common-java:InsufficientBranchCoverage",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "1 more branches need to be covered by unit tests to reach the minimum threshold of 65.0% branch coverage.",
-      "debt": "10min",
-      "creationDate": "2014-06-06T15:53:08+0200",
-      "updateDate": "2014-06-06T16:53:27+0200",
-      "fUpdateAge": "5 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "f0853649-fe5e-4c6c-92b9-42ad460fcc0f",
-      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/language",
-      "componentId": 26179,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml/language' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:26:37+0200",
-      "updateDate": "2014-10-09T06:32:43+0200",
-      "fUpdateAge": "26 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "24f4c570-a96d-42ea-a99e-60aded51d69c",
-      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/parsers",
-      "componentId": 26180,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml/parsers' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:26:37+0200",
-      "updateDate": "2014-10-09T06:32:48+0200",
-      "fUpdateAge": "26 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "aeeb9e4e-fd39-4b7e-a482-36d9da710127",
-      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/parsers/AbstractParser.java",
-      "componentId": 17191,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1694",
-      "status": "OPEN",
-      "severity": "MAJOR",
-      "message": "Convert this \"AbstractParser\" class to a concrete class with a private constructor",
-      "line": 33,
-      "debt": "5min",
-      "author": "matthijs.galesloot@gmail.com",
-      "creationDate": "2014-06-26T23:08:13+0200",
-      "updateDate": "2014-07-23T23:07:58+0200",
-      "fUpdateAge": "3 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "66a25a73-b555-4c35-8bc5-536da40a3493",
-      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/rules",
-      "componentId": 26181,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml/rules' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:26:37+0200",
-      "updateDate": "2014-10-09T06:33:03+0200",
-      "fUpdateAge": "26 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "89695ec6-63c2-457f-966b-b2cfd7ad8489",
-      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/schemas",
-      "componentId": 26182,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml/schemas' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:26:37+0200",
-      "updateDate": "2014-10-09T06:32:50+0200",
-      "fUpdateAge": "26 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "3ac6d2e6-6af2-435f-abc7-b281f3676d34",
-      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/schemas/SchemaResolver.java",
-      "componentId": 17178,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1192",
-      "status": "CONFIRMED",
-      "severity": "MINOR",
-      "message": "Define a constant instead of duplicating this literal \"xhtml1/xhtml1-strict.xsd\" 3 times.",
-      "line": 58,
-      "debt": "10min",
-      "author": "Evgeny Mandrikov",
-      "creationDate": "2013-08-22T23:52:06+0200",
-      "updateDate": "2014-04-24T23:32:18+0200",
-      "fUpdateAge": "6 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "39942422-fbc2-4383-81fe-82777eb3ce7f",
-      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml",
-      "componentId": 26174,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/xml' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:26:37+0200",
-      "updateDate": "2014-10-09T06:33:07+0200",
-      "fUpdateAge": "26 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "e44fb44e-df1c-460a-b807-66ff79e21194",
-      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/api",
-      "componentId": 26175,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/xml/api' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:26:37+0200",
-      "updateDate": "2014-10-09T06:32:52+0200",
-      "fUpdateAge": "26 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "08f9aedf-5119-4875-8e58-260bfc2e3f69",
-      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/api/XmlGrammar.java",
-      "componentId": 17160,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S138",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "This method has 233 lines, which is greater than the 100 lines authorized. Split it into smaller methods.",
-      "line": 134,
-      "debt": "1h",
-      "author": "Dinesh Bolkensteyn",
-      "creationDate": "2013-08-22T23:52:06+0200",
-      "updateDate": "2013-10-23T15:15:05+0200",
-      "fUpdateAge": "about a year",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "f781c518-83bd-4bd9-8806-c889d0711a39",
-      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/CDataDocTokenizer.java",
-      "componentId": 19130,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1067",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Reduce the number of conditional operators (4) used in the expression (maximum allowed 3).",
-      "line": 47,
-      "debt": "10min",
-      "author": "Dinesh Bolkensteyn",
-      "creationDate": "2013-08-28T23:50:16+0200",
-      "updateDate": "2013-10-23T15:15:05+0200",
-      "fUpdateAge": "about a year",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "cdde8bbf-9d13-4832-8faa-4d189d79fb6b",
-      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/CDataDocTokenizer.java",
-      "componentId": 19130,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1698",
-      "status": "OPEN",
-      "severity": "MAJOR",
-      "message": "Change this comparison to use the equals method.",
-      "line": 82,
-      "debt": "2min",
-      "author": "dinesh.bolkensteyn@sonarsource.com",
-      "creationDate": "2014-06-26T23:08:13+0200",
-      "updateDate": "2014-06-26T23:08:13+0200",
-      "fUpdateAge": "4 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "f9eae4c0-ca44-440f-aeb7-327dca040f57",
-      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/CDataDocTokenizer.java",
-      "componentId": 19130,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "common-java:InsufficientBranchCoverage",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "3 more branches need to be covered by unit tests to reach the minimum threshold of 65.0% branch coverage.",
-      "debt": "30min",
-      "creationDate": "2013-04-04T15:37:48+0200",
-      "updateDate": "2014-02-14T23:34:11+0100",
-      "fUpdateAge": "8 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "19516152-0ad2-485a-bc5f-576d19f5dea4",
-      "component": "org.codehaus.sonar-plugins.xml:sslr-xml-toolkit:src/main/java/org/sonar/xml/toolkit",
-      "componentId": 26183,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/xml/toolkit' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:26:37+0200",
-      "updateDate": "2014-10-09T06:33:05+0200",
-      "fUpdateAge": "26 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "2c767e87-dd31-4803-b8da-581dddb8b73b",
-      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/XmlStartElementTokenizer.java",
-      "componentId": 19132,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1142",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Reduce the number of returns of this method 7, down to the maximum allowed 5.",
-      "line": 74,
-      "debt": "20min",
-      "author": "Dinesh Bolkensteyn",
-      "creationDate": "2013-08-11T00:06:49+0200",
-      "updateDate": "2013-10-23T15:15:05+0200",
-      "fUpdateAge": "about a year",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "f8665ff6-6f1b-4014-acb9-2d8cbcd9bd8b",
-      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/XmlStartElementTokenizer.java",
-      "componentId": 19132,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:MethodCyclomaticComplexity",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "The Cyclomatic Complexity of this method \"consumeStartElement\" is 15 which is greater than 10 authorized.",
-      "line": 74,
-      "debt": "10min",
-      "author": "Dinesh Bolkensteyn",
-      "creationDate": "2013-04-04T15:37:48+0200",
-      "updateDate": "2013-12-18T23:52:20+0100",
-      "fUpdateAge": "10 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "5f039a47-9dcc-474e-894c-5598720cb4e0",
-      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/XmlStartElementTokenizer.java",
-      "componentId": 19132,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1698",
-      "status": "OPEN",
-      "severity": "MAJOR",
-      "message": "Change this comparison to use the equals method.",
-      "line": 155,
-      "debt": "2min",
-      "author": "dinesh.bolkensteyn@sonarsource.com",
-      "creationDate": "2014-06-26T23:08:13+0200",
-      "updateDate": "2014-06-26T23:08:13+0200",
-      "fUpdateAge": "4 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "7985c68b-2a1d-4aa7-af55-bb6236a01450",
-      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/XmlStartElementTokenizer.java",
-      "componentId": 19132,
-      "project": "org.codehaus.sonar-plugins.xml:xml",
-      "rule": "squid:S1698",
-      "status": "OPEN",
-      "severity": "MAJOR",
-      "message": "Change this comparison to use the equals method.",
-      "line": 160,
-      "debt": "2min",
-      "author": "dinesh.bolkensteyn@sonarsource.com",
-      "creationDate": "2014-06-26T23:08:13+0200",
-      "updateDate": "2014-06-26T23:08:13+0200",
-      "fUpdateAge": "4 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "d0dba7cd-e31d-4577-a047-644cdc7e2172",
-      "component": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb",
-      "componentId": 28611,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:05:55+0200",
-      "updateDate": "2014-10-09T06:37:50+0200",
-      "fUpdateAge": "26 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "6d77a59b-53c2-444c-b288-a803d1f7f18d",
-      "component": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/api",
-      "componentId": 28622,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb/api' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:05:55+0200",
-      "updateDate": "2014-10-09T06:38:38+0200",
-      "fUpdateAge": "26 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "bda16272-3785-47af-a0cd-c3fd3c581887",
-      "component": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/batch",
-      "componentId": 28928,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb/batch' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:05:55+0200",
-      "updateDate": "2014-10-09T06:38:06+0200",
-      "fUpdateAge": "26 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "4ea78cde-76c0-41ad-8809-a4e406168a00",
-      "component": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks",
-      "componentId": 29690,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb/checks' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:05:55+0200",
-      "updateDate": "2014-10-09T06:38:04+0200",
-      "fUpdateAge": "26 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "459f9f04-0901-4250-9e9b-946d505455ac",
-      "component": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks/ExpressionComplexityCheck.java",
-      "componentId": 29783,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "squid:S1698",
-      "status": "OPEN",
-      "severity": "MAJOR",
-      "message": "Change this comparison to use the equals method.",
-      "line": 54,
-      "debt": "2min",
-      "author": "pierre-yves.nicolas@sonarsource.com",
-      "creationDate": "2014-06-26T23:07:23+0200",
-      "updateDate": "2014-06-26T23:07:23+0200",
-      "fUpdateAge": "4 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "47ec8d6b-b7df-4e8c-a254-f9ccf7c0b90a",
-      "component": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks/NumberedLineProcessor.java",
-      "componentId": 29907,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "common-java:DuplicatedBlocks",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "1 duplicated blocks of code.",
-      "debt": "1h",
-      "creationDate": "2014-05-01T23:14:46+0200",
-      "updateDate": "2014-05-02T09:05:22+0200",
-      "fUpdateAge": "6 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "84f34eb4-5aec-419b-8a2d-094d79d7969a",
-      "component": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks/TrailingCommentCheck.java",
-      "componentId": 29769,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "common-java:DuplicatedBlocks",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "4 duplicated blocks of code.",
-      "debt": "4h",
-      "creationDate": "2014-04-14T23:14:16+0200",
-      "updateDate": "2014-05-23T23:13:54+0200",
-      "fUpdateAge": "5 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "bd85131c-2bac-474d-ac0f-2cf3c8848d40",
-      "component": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks/UnusedPrivateVariableCheck.java",
-      "componentId": 29801,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "squid:S1643",
-      "status": "REOPENED",
-      "severity": "MAJOR",
-      "message": "Use a StringBuilder instead.",
-      "line": 57,
-      "debt": "10min",
-      "author": "pierre-yves.nicolas@sonarsource.com",
-      "creationDate": "2014-06-26T23:07:23+0200",
-      "updateDate": "2014-11-03T09:50:23+0100",
-      "fUpdateAge": "a day",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "0f81cd62-e82d-44b1-8773-a7a61536a516",
-      "component": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/colorizer",
-      "componentId": 28932,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb/colorizer' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:05:55+0200",
-      "updateDate": "2014-10-09T06:38:03+0200",
-      "fUpdateAge": "26 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "c7d665b1-0d77-4f7b-b893-8678c5324a70",
-      "component": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/cpd",
-      "componentId": 28935,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb/cpd' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:05:55+0200",
-      "updateDate": "2014-10-09T06:38:30+0200",
-      "fUpdateAge": "26 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "47780a07-2b00-47bb-a5e0-91af1ab53b49",
-      "component": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/cpd/VbCpdTokenizer.java",
-      "componentId": 28937,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "squid:S1698",
-      "status": "OPEN",
-      "severity": "MAJOR",
-      "message": "Change this comparison to use the equals method.",
-      "line": 55,
-      "debt": "2min",
-      "author": "julien.henry@sonarsource.com",
-      "creationDate": "2014-06-26T23:07:23+0200",
-      "updateDate": "2014-06-26T23:07:23+0200",
-      "fUpdateAge": "4 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "4882c235-98a2-4ac8-8131-acbe30010be5",
-      "component": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/cpd/VbCpdTokenizer.java",
-      "componentId": 28937,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "squid:S1698",
-      "status": "OPEN",
-      "severity": "MAJOR",
-      "message": "Change this comparison to use the equals method.",
-      "line": 55,
-      "debt": "2min",
-      "author": "julien.henry@sonarsource.com",
-      "creationDate": "2014-06-26T23:07:23+0200",
-      "updateDate": "2014-06-26T23:07:23+0200",
-      "fUpdateAge": "4 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "a7816c2c-4a24-4edc-955b-4bf064c8da6c",
-      "component": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/cpd/VbCpdTokenizer.java",
-      "componentId": 28937,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "squid:S1698",
-      "status": "OPEN",
-      "severity": "MAJOR",
-      "message": "Change this comparison to use the equals method.",
-      "line": 55,
-      "debt": "2min",
-      "author": "julien.henry@sonarsource.com",
-      "creationDate": "2014-06-26T23:07:23+0200",
-      "updateDate": "2014-06-26T23:07:23+0200",
-      "fUpdateAge": "4 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "5c6bc4d6-560f-47c7-9170-873c7ec51243",
-      "component": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/foundation",
-      "componentId": 28938,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb/foundation' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:05:55+0200",
-      "updateDate": "2014-10-09T06:38:32+0200",
-      "fUpdateAge": "26 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "4df1a07e-1961-4b7c-bd9d-f08670b7dc53",
-      "component": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/LineContinuationChannel.java",
-      "componentId": 28613,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "common-java:DuplicatedBlocks",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "1 duplicated blocks of code.",
-      "debt": "1h",
-      "creationDate": "2014-03-24T23:14:21+0100",
-      "updateDate": "2014-04-28T16:56:33+0200",
-      "fUpdateAge": "6 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "8d505c3e-e944-40a7-bdc4-3e55a6d80ddf",
-      "component": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/metrics",
-      "componentId": 28626,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb/metrics' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:05:55+0200",
-      "updateDate": "2014-10-09T06:37:59+0200",
-      "fUpdateAge": "26 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "5420d272-a363-44a5-9a8d-4ed9236aee6c",
-      "component": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/metrics/CommentsVisitor.java",
-      "componentId": 28627,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "common-java:DuplicatedBlocks",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "2 duplicated blocks of code.",
-      "debt": "2h",
-      "creationDate": "2014-03-24T23:14:21+0100",
-      "updateDate": "2014-04-28T16:56:15+0200",
-      "fUpdateAge": "6 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "eaff60ef-0e3f-4744-9ada-a701eb92fc38",
-      "component": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/metrics/LinesOfCodeVisitor.java",
-      "componentId": 28629,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "common-java:DuplicatedBlocks",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "2 duplicated blocks of code.",
-      "debt": "2h",
-      "creationDate": "2014-03-24T23:14:21+0100",
-      "updateDate": "2014-04-28T16:56:13+0200",
-      "fUpdateAge": "6 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "4b6e0ff7-8343-4389-bfee-74fb06ae1a4c",
-      "component": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/plugin",
-      "componentId": 28952,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb/plugin' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:05:55+0200",
-      "updateDate": "2014-10-09T06:37:48+0200",
-      "fUpdateAge": "26 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "86a0cb1a-c36b-442e-aac0-5d29efc8b0f0",
-      "component": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/pp",
-      "componentId": 28630,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "squid:S1228",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb/pp' package",
-      "debt": "20min",
-      "creationDate": "2014-10-03T23:05:55+0200",
-      "updateDate": "2014-10-09T06:38:40+0200",
-      "fUpdateAge": "26 days",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "8d5d8cb6-2f92-4cdd-858e-6d551b6507a3",
-      "component": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/pp/EmptyLinesRemovalPreprocessor.java",
-      "componentId": 28631,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "common-java:DuplicatedBlocks",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "1 duplicated blocks of code.",
-      "debt": "1h",
-      "creationDate": "2014-03-24T23:14:21+0100",
-      "updateDate": "2014-04-28T16:56:10+0200",
-      "fUpdateAge": "6 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "dd34e8a9-7c6a-4a66-8b02-7bf5d9daa4f9",
-      "component": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/ProgressAstScanner.java",
-      "componentId": 28614,
-      "project": "com.sonarsource.plugins.vb:vb",
-      "rule": "common-java:DuplicatedBlocks",
-      "status": "CONFIRMED",
-      "severity": "MAJOR",
-      "message": "1 duplicated blocks of code.",
-      "debt": "1h",
-      "creationDate": "2014-03-24T23:14:21+0100",
-      "updateDate": "2014-04-28T16:56:31+0200",
-      "fUpdateAge": "6 months",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "unconfirm",
-        "resolve",
-        "falsepositive"
-      ]
-    }
-  ],
-  "rules": [
-    {
-      "key": "squid:S1698",
-      "name": "Objects should be compared with \"equals()\"",
-      "desc": "<p>Using the equality (<code>==</code>) and inequality (<code>!=</code>) operators to compare two objects does not check to see if they have the same values. Rather it checks to see if both object references point to exactly the same object in memory. The vast majority of the time, this is not what you want to do. Use the .equals() method to compare the values of two objects or to compare a string object to a string literal.</p>\n\n<h2>Noncompliant Code Sample</h2>\n<pre>\nString str1 = \"blue\";\nString str2 = \"blue\";\nString str3 = str1;\n\nif (str1 == str2)\n{\n  System.out.println(\"they're both 'blue'\"); // this doesn't print because the objects are different\n}\n\nif (str1 == \"blue\")\n{\n  System.out.println(\"they're both 'blue'\"); // this doesn't print because the objects are different\n}\n\nif (str1 == str3)\n{\n  System.out.println(\"they're the same object\"); // this prints\n}\n</pre>\n\n<h2>Compliant Solution</h2>\n<pre>\nString str1 = \"blue\";\nString str2 = \"blue\";\nString str3 = str1;\n\nif (str1.equals(str2))\n{\n  System.out.println(\"they're both 'blue'\"); // this prints\n}\n\nif (str1.equals(\"blue\"))\n{\n  System.out.println(\"they're both 'blue'\"); // this prints\n}\n\nif (str1 == str3)\n{\n  System.out.println(\"they're the same object\"); // this still prints, but it's probably not what you meant to do\n}\n</pre>",
-      "status": "READY"
-    },
-    {
-      "key": "squid:S1142",
-      "name": "Methods should not contain too many return statements",
-      "desc": "<p>\nHaving too many return statements in a method increases the method's essential complexity because the flow of execution is broken each time a return statement is encountered.\nThis makes it harder to read and understand the logic of the method.\n</p>\n\n<p>\nThe following code snippet illustrates this rule with the default threshold of 3:\n</p>\n\n<pre>\npublic boolean myMethod() { // Non-Compliant as there are 4 return statements\n  if (condition1) {\n    return true;\n  } else {\n    if (condition2) {\n      return false;\n    } else {\n      return true;\n    }\n  }\n  return false;\n}\n</pre>",
-      "status": "READY"
-    },
-    {
-      "key": "squid:S1694",
-      "name": "An abstract class should have both abstract and concrete methods",
-      "desc": "<p>The purpose of an abstract class is to provide some heritable behaviors while also defining methods which must be implemented by sub-classes.</p>\n\n<p>A class with no abstract methods that was made abstract purely to prevent instantiation should be converted to a concrete class (i.e. remove the <code>abstract</code> keyword) with a private constructor.</p>\n\n<p>A class with only abstract methods and no inheritable behavior should be converted to an interface.</p>\n\n<h2>Noncompliant Code Sample</h2>\n<pre>\npublic abstract class Animal {\n  abstract void move();\n  abstract void feed();\n}\n\npublic abstract class Color {\n  private int red = 0;\n  private int green = 0;\n  private int blue = 0;\n\n  public int getRed(){\n    return red;\n  }\n}\n</pre>\n\n<h2>Compliant Solution</h2>\n<pre>\npublic interface Animal {\n  void move();\n  void feed();\n}\n\npublic class Color {\n  private int red = 0;\n  private int green = 0;\n  private int blue = 0;\n\n  private Color (){\n  }\n\n  public int getRed() {\n    return red;\n  }\n}\n\npublic abstract class Lamp {\n\n  private boolean switchLamp=false;\n  public abstract void glow();\n\n  public void flipSwitch() {\n    switchLamp = !switchLamp;\n    if (switchLamp) {\n       glow();\n    }\n  }\n}\n</pre>",
-      "status": "READY"
-    },
-    {
-      "key": "squid:S1151",
-      "name": "Switch cases should not have too many lines",
-      "desc": "<p>Switch cases should remain small to keep the overall switch compact and readable.</p>\n\n<p>The following code snippet illustrates this rule with the default threshold of 5:</p>\n\n<pre>\nswitch (myVariable) {\n  case 0:                     // Compliant - 5 lines till following case\n    System.out.println(\"\");\n    System.out.println(\"\");\n    System.out.println(\"\");\n    break;\n  default:                    // Non-Compliant - 6 lines till switch end\n    System.out.println(\"\");\n    System.out.println(\"\");\n    System.out.println(\"\");\n    System.out.println(\"\");\n    break;\n}\n</pre>",
-      "status": "READY"
-    },
-    {
-      "key": "squid:S1643",
-      "name": "Strings should not be concatenated using '+' in a loop",
-      "desc": "<p>Strings are immutable objects in Java, so concatenation doesn't simply add the new String to the end of the existing string. Instead, in each loop iteration, the first String is converted to an intermediate object type, the second string is appended, and then the intermediate object is converted back to a String. Further, performance of these intermediate operations degrades as the String gets longer. Therefore, the use of StringBuilder is preferred.</p>\n\n<h2>Noncompliant Code Example</h2>\n<pre>\nString str = \"\";\nfor (int i = 0; i < arrayOfStrings.length ; ++i) {\n  str = str + arrayOfStrings[i];\n}\n</pre>\n\n<h2>Compliant Solution</h2>\n<pre>\nStringBuilder bld = new StringBuilder();\nfor (int i = 0; i < arrayOfStrings.length; ++i) {\n  bld.append(arrayOfStrings[i]);\n}\nString str = bld.toString();\n</pre>",
-      "status": "READY"
-    },
-    {
-      "key": "squid:S134",
-      "name": "Control flow statements \"if\", \"for\", \"while\", \"switch\" and \"try\" should not be nested too deeply",
-      "desc": "<p>\nNested <code>if</code>, <code>for</code>, <code>while</code> and <code>try</code> statements is a key ingredient for making what's known as \"Spaghetti code\".\nSuch code is hard to read, refactor and therefore maintain.\n</p>\n\n<h2>Noncompliant Code Example</h2>\n\n<p>The following code snippet illustrates this rule with the default threshold of 3.</p>\n\n<pre>\npublic void process() {\n  if (condition1) {                  // Compliant - depth = 1\n    /* ... */\n    if (condition2) {                // Compliant - depth = 2\n      /* ... */\n      for(int i = 0; i < 10; i++) {  // Compliant - depth = 3, not exceeding the limit\n        /* ... */\n        if (condition4) {            // Non-Compliant - depth = 4\n          if (condition5) {          // Depth = 5, exceeding the limit, but issues are only reported on depth = 4\n            /* ... */\n          }\n          return;\n        }\n      }\n    }\n  }\n}\n</pre>",
-      "status": "READY"
-    },
-    {
-      "key": "common-java:DuplicatedBlocks",
-      "name": "Duplicated blocks",
-      "desc": "<p>An issue is created on a file as soon as there is a block of duplicated code on this file. It gives the number of blocks in the file.</p>",
-      "status": "READY"
-    },
-    {
-      "key": "squid:RightCurlyBraceSameLineAsNextBlockCheck",
-      "name": "Right curly brace and next \"else\", \"catch\" and \"finally\" keywords should be located on the same line",
-      "desc": "<p>\nSharing some coding conventions is a key point to make it possible for a team to efficiently collaborate.\nThis rule make it mandatory to place closing curly braces on the same line that next <code>else</code>, <code>catch</code> or <code>finally</code> keywords.\n</p>\n\n<p>\nThe following code snippet illustrates this rule:\n</p>\n\n<pre>\npublic void myMethod() {\n  if(something) {\n    executeTask();\n  } else if (somethingElse) {          // Compliant\n    doSomethingElse();\n  }\n  else {                               // Non-Compliant\n     generateError();\n  }\n\n  try {\n    generateOrder();\n  } catch (Exception e) {              // Compliant\n    log(e);\n  }\n  finally {                            // Non-Compliant\n    closeConnection();\n  }\n}\n</pre>",
-      "status": "READY"
-    },
-    {
-      "key": "squid:MethodCyclomaticComplexity",
-      "name": "Methods should not be too complex",
-      "desc": "<p>The Cyclomatic Complexity is measured by the number of\n\t(&amp;&amp;, ||) operators and (if, while, do, for, ?:, catch, switch,\n\tcase, return, throw) statements in the body of a class plus one for\n\teach constructor, method (but not getter/setter), static initializer,\n\tor instance initializer in the class. The last return stament in\n\tmethod, if exists, is not taken into account.</p>\n<p>\n\tEven when the Cyclomatic Complexity of a class is very high, this\n\tcomplexity might be well distributed among all methods. Nevertheless,\n\tmost of the time, a very complex class is a class which breaks the <a\n\t\thref=\"http://en.wikipedia.org/wiki/Single_responsibility_principle\">Single\n\t\tResponsibility Principle</a> and which should be re-factored to be split\n\tin several classes.\n</p>",
-      "status": "READY"
-    },
-    {
-      "key": "squid:S1192",
-      "name": "String literals should not be duplicated",
-      "desc": "<p>\n  Duplicated string literals make the process of refactoring error-prone, since you must be sure to update all occurrences.\n  On the other hand, constants can be referenced from many places, but only need to be updated in a single place.\n</p>\n\n<h2>Non Compliant Code Example</h2>\n\n<pre>\npublic void run() {\n  prepare(\"action1\");                              // Non-Compliant - \"action1\" is duplicated 3 times\n  execute(\"action1\");\n  release(\"action1\");\n}\n\n@SuppressWarning(\"all\")                            // Compliant - annotations are excluded\nprivate void method1() { /* ... */ }\n@SuppressWarning(\"all\")\nprivate void method2() { /* ... */ }\n\npublic String method3(String a) {\n  System.out.println(\"'\" + a + \"'\");               // Compliant - literal \"'\" has less than 5 characters and is excluded\n  return \"\";                                       // Compliant - literal \"\" has less than 5 characters and is excluded\n}\n</pre>\n\n<h2>Compliant Code Example</h2>\n\n<pre>\nprivate static final String ACTION_1 = \"action1\";  // Compliant\n\npublic void run() {\n  prepare(ACTION_1);                               // Compliant\n  execute(ACTION_1);\n  release(ACTION_1);\n}\n</pre>\n\n<h2>Exceptions</h2>\n<p>To prevent generating some false-positives, literals having less than 5 characters are excluded.</p>",
-      "status": "READY"
-    },
-    {
-      "key": "squid:S138",
-      "name": "Methods should not have too many lines",
-      "desc": "<p>\nA method that grows too large tends to aggregate too many responsibilities.\nSuch methods inevitably become harder to understand and therefore harder to maintain.\n</p>\n\n<p>\nAbove a specific threshold, it is strongly advised to refactor into smaller methods which focus on well-defined tasks.\nThose smaller methods will not only be easier to understand, but also probably easier to test.\n</p>",
-      "status": "READY"
-    },
-    {
-      "key": "squid:S1067",
-      "name": "Expressions should not be too complex",
-      "desc": "<p>\nThe complexity of an expression is defined by the number of <code>&&</code>, <code>||</code> and <code>condition ? ifTrue : ifFalse</code> operators it contains.\nA single expression's complexity should not become too high to keep the code readable.\n</p>\n\n<p>The following code, with a maximum complexity of 3:</p>\n\n<pre>\nif (condition1 && condition2 && condition3 && condition4) { /* ... */ }  // Non-Compliant\n</pre>\n\n<p>could be refactored into something like:</p>\n\n<pre>\nif (relevantMethodName1() && relevantMethodName2()) { /* ... */ }        // Compliant\n\n/* ... */\n\nprivate boolean relevantMethodName1() {\n  return condition1 && condition2;\n}\n\nprivate boolean relevantMethodName2() {\n  return condition3 && condition4;\n}\n</pre>",
-      "status": "READY"
-    },
-    {
-      "key": "common-java:InsufficientBranchCoverage",
-      "name": "Insufficient branch coverage by unit tests",
-      "desc": "<p>An issue is created on a file as soon as the branch coverage on this file is less than the required threshold.It gives the number of branches to be covered in order to reach the required threshold.</p>",
-      "status": "READY"
-    },
-    {
-      "key": "squid:S1228",
-      "name": "Packages should have a javadoc file 'package-info.java'",
-      "desc": "<p>Each package in a Java project should include a <code>package-info.java</code> file. The purpose of this file is to document the Java package using javadoc and declare package annotations.</p>\n\n<h2>Compliant Solution</h2>\n<pre>\n/**\n* This package has non null parameters and is documented.\n**/\n@ParametersAreNonnullByDefault\npackage org.foo.bar;\n</pre>",
-      "status": "REMOVED"
-    }
-  ],
-  "users": [],
-  "languages": [
-    {
-      "key": "js",
-      "name": "JavaScript"
-    },
-    {
-      "key": "java",
-      "name": "Java"
-    }
-  ],
-  "maxResultsReached": false,
-  "paging": {
-    "pageIndex": 1,
-    "pageSize": 50,
-    "total": 4623,
-    "fTotal": "4,623",
-    "pages": 93
-  },
-  "facets": [
-    {
-      "property": "severities",
-      "values": [
-        {
-          "val": "MAJOR",
-          "count": 3214
-        },
-        {
-          "val": "INFO",
-          "count": 930
-        },
-        {
-          "val": "MINOR",
-          "count": 436
-        },
-        {
-          "val": "CRITICAL",
-          "count": 43
-        },
-        {
-          "val": "BLOCKER",
-          "count": 0
-        }
-      ]
-    },
-    {
-      "property": "statuses",
-      "values": [
-        {
-          "val": "CONFIRMED",
-          "count": 4123
-        },
-        {
-          "val": "OPEN",
-          "count": 499
-        },
-        {
-          "val": "REOPENED",
-          "count": 1
-        },
-        {
-          "val": "CLOSED",
-          "count": 0
-        },
-        {
-          "val": "RESOLVED",
-          "count": 0
-        }
-      ]
-    },
-    {
-      "property": "resolutions",
-      "values": [
-        {
-          "val": "",
-          "count": 4623
-        },
-        {
-          "val": "FIXED",
-          "count": 39744
-        },
-        {
-          "val": "REMOVED",
-          "count": 14385
-        },
-        {
-          "val": "FALSE-POSITIVE",
-          "count": 724
-        }
-      ]
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/show-open.json b/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/show-open.json
deleted file mode 100644 (file)
index 071d6bd..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "issue": {
-    "key": "94357807-fcb4-40cc-9598-9a715f1eee6e",
-    "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml",
-    "componentId": 26177,
-    "project": "org.codehaus.sonar-plugins.xml:xml",
-    "rule": "squid:S1228",
-    "status": "OPEN",
-    "severity": "MAJOR",
-    "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml' package",
-    "debt": "20min",
-    "creationDate": "2014-10-03T23:26:37+0200",
-    "updateDate": "2014-10-09T06:32:55+0200",
-    "fUpdateAge": "26 days",
-    "actions": [
-      "comment",
-      "assign",
-      "assign_to_me",
-      "plan",
-      "set_severity"
-    ],
-    "transitions": [
-      "confirm",
-      "resolve",
-      "falsepositive"
-    ]
-  }
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/show-resolved.json b/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/show-resolved.json
deleted file mode 100644 (file)
index f4eab74..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-  "issue": {
-    "key": "94357807-fcb4-40cc-9598-9a715f1eee6e",
-    "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml",
-    "componentId": 26177,
-    "project": "org.codehaus.sonar-plugins.xml:xml",
-    "rule": "squid:S1228",
-    "status": "RESOLVED",
-    "severity": "MAJOR",
-    "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml' package",
-    "debt": "20min",
-    "creationDate": "2014-10-03T23:26:37+0200",
-    "updateDate": "2014-10-09T06:32:55+0200",
-    "fUpdateAge": "26 days",
-    "actions": [
-      "comment",
-      "assign",
-      "assign_to_me",
-      "plan",
-      "set_severity"
-    ],
-    "transitions": [
-      "reopen"
-    ]
-  }
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/show-with-tags.json b/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/show-with-tags.json
deleted file mode 100644 (file)
index 6eb9475..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-  "issue": {
-    "key": "94357807-fcb4-40cc-9598-9a715f1eee6e",
-    "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml",
-    "componentId": 26177,
-    "project": "org.codehaus.sonar-plugins.xml:xml",
-    "rule": "squid:S1228",
-    "status": "CONFIRMED",
-    "severity": "MAJOR",
-    "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml' package",
-    "debt": "20min",
-    "creationDate": "2014-10-03T23:26:37+0200",
-    "updateDate": "2014-10-09T06:32:55+0200",
-    "fUpdateAge": "26 days",
-    "actions": [
-      "comment",
-      "assign",
-      "assign_to_me",
-      "plan",
-      "set_severity"
-    ],
-    "tags": ["security", "cwe"]
-    "transitions": [
-      "unconfirm",
-      "resolve",
-      "falsepositive"
-    ]
-  }
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/show.json b/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/show.json
deleted file mode 100644 (file)
index c125f5f..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "issue": {
-    "key": "94357807-fcb4-40cc-9598-9a715f1eee6e",
-    "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml",
-    "componentId": 26177,
-    "project": "org.codehaus.sonar-plugins.xml:xml",
-    "rule": "squid:S1228",
-    "status": "CONFIRMED",
-    "severity": "MAJOR",
-    "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml' package",
-    "debt": "20min",
-    "creationDate": "2014-10-03T23:26:37+0200",
-    "updateDate": "2014-10-09T06:32:55+0200",
-    "fUpdateAge": "26 days",
-    "actions": [
-      "comment",
-      "assign",
-      "assign_to_me",
-      "plan",
-      "set_severity"
-    ],
-    "transitions": [
-      "unconfirm",
-      "resolve",
-      "falsepositive"
-    ]
-  }
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/tags-modified.json b/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/tags-modified.json
deleted file mode 100644 (file)
index d1b5389..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "tags": [
-    "security",
-    "cwe",
-    "cert"
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/tags.json b/server/sonar-web/src/main/js/tests/e2e/tests/issues-spec/tags.json
deleted file mode 100644 (file)
index af6bc92..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "tags": [
-    "brain-overload",
-    "bug",
-    "cert",
-    "convention",
-    "cwe",
-    "design",
-    "error-handling",
-    "misra",
-    "misra-c",
-    "misra-c++",
-    "multithreading",
-    "obsolete",
-    "owasp-top10",
-    "performance",
-    "pitfall",
-    "sans-top25",
-    "sans-top25-2011",
-    "security",
-    "sql",
-    "unused"
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/quality-gates-spec.js b/server/sonar-web/src/main/js/tests/e2e/tests/quality-gates-spec.js
deleted file mode 100644 (file)
index 8de770c..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('quality-gates-spec');
-lib.configureCasper();
-
-
-casper.test.begin('Quality Gates', function suite (test) {
-  casper
-      .start(lib.buildUrl('quality-gates'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/qualitygates/app', 'app.json');
-        lib.mockRequestFromFile('/api/qualitygates/list', 'list.json');
-        lib.mockRequestFromFile('/api/qualitygates/show?id=1', 'show.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.active', function () {
-          test.assertElementCount('.active', 1);
-          test.assertSelectorHasText('.search-navigator-side .active', 'Default Gate');
-        });
-      })
-
-      .then(function () {
-        casper.waitForSelector('.search-navigator-workspace-header', function () {
-          test.assertSelectorHasText('.search-navigator-workspace-header', 'Default Gate');
-        });
-      })
-
-      .then(function () {
-        casper.waitForSelector('table.quality-gate-conditions tbody tr:nth-child(9)', function () {
-          test.assertElementCount('table.quality-gate-conditions tbody tr', 9);
-        });
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/quality-gates-spec/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/quality-gates-spec/app.json
deleted file mode 100644 (file)
index 6a38a3e..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-{
-  "edit": false,
-  "periods": [
-    {
-      "key": 1,
-      "text": "since previous analysis"
-    },
-    {
-      "key": 2,
-      "text": "over 365 days"
-    },
-    {
-      "key": 3,
-      "text": "since previous version"
-    },
-    {
-      "key": 4,
-      "text": "over period 4 - defined at project level"
-    },
-    {
-      "key": 5,
-      "text": "over period 5 - defined at project level"
-    }
-  ],
-  "metrics": [
-      {
-          "id": 62,
-          "key": "blocker_violations",
-          "name": "Blocker issues",
-          "type": "INT",
-          "domain": "Issues",
-          "hidden": false
-      },
-      {
-          "id": 37,
-          "key": "new_coverage",
-          "name": "Coverage on new code",
-          "type": "PERCENT",
-          "domain": "Tests",
-          "hidden": false
-      },
-      {
-          "id": 63,
-          "key": "critical_violations",
-          "name": "Critical issues",
-          "type": "INT",
-          "domain": "Issues",
-          "hidden": false
-      },
-      {
-          "id": 154,
-          "key": "sqale_effort_to_grade_a",
-          "name": "Effort to rating A",
-          "type": "WORK_DUR",
-          "domain": "SQALE",
-          "hidden": false
-      },
-      {
-          "id": 218,
-          "key": "open_issues",
-          "name": "Open issues",
-          "type": "INT",
-          "domain": "Issues",
-          "hidden": false
-      },
-      {
-          "id": 219,
-          "key": "reopened_issues",
-          "name": "Reopened issues",
-          "type": "INT",
-          "domain": "Issues",
-          "hidden": false
-      },
-      {
-          "id": 32,
-          "key": "skipped_tests",
-          "name": "Skipped unit tests",
-          "type": "INT",
-          "domain": "Tests",
-          "hidden": false
-      },
-      {
-          "id": 31,
-          "key": "test_errors",
-          "name": "Unit test errors",
-          "type": "INT",
-          "domain": "Tests",
-          "hidden": false
-      },
-      {
-          "id": 33,
-          "key": "test_failures",
-          "name": "Unit test failures",
-          "type": "INT",
-          "domain": "Tests",
-          "hidden": false
-      }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/quality-gates-spec/list.json b/server/sonar-web/src/main/js/tests/e2e/tests/quality-gates-spec/list.json
deleted file mode 100644 (file)
index 9d7ac91..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  "qualitygates": [
-    {
-      "id": 1,
-      "name": "Default Gate"
-    }
-  ],
-  "default": 1
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/quality-gates-spec/show.json b/server/sonar-web/src/main/js/tests/e2e/tests/quality-gates-spec/show.json
deleted file mode 100644 (file)
index bc36acb..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "id": 1,
-  "name": "Default Gate",
-  "conditions": [
-      {
-          "id": 1,
-          "metric": "blocker_violations",
-          "op": "GT",
-          "warning": "",
-          "error": "0"
-      },
-      {
-          "id": 2,
-          "metric": "new_coverage",
-          "op": "LT",
-          "warning": "",
-          "error": "80",
-          "period": 3
-      },
-      {
-          "id": 3,
-          "metric": "critical_violations",
-          "op": "GT",
-          "warning": "",
-          "error": "0"
-      },
-      {
-          "id": 4,
-          "metric": "sqale_effort_to_grade_a",
-          "op": "GT",
-          "warning": "",
-          "error": "0"
-      },
-      {
-          "id": 5,
-          "metric": "open_issues",
-          "op": "GT",
-          "warning": "0",
-          "error": ""
-      },
-      {
-          "id": 6,
-          "metric": "reopened_issues",
-          "op": "GT",
-          "warning": "0",
-          "error": ""
-      },
-      {
-          "id": 7,
-          "metric": "skipped_tests",
-          "op": "GT",
-          "warning": "0",
-          "error": ""
-      },
-      {
-          "id": 8,
-          "metric": "test_errors",
-          "op": "GT",
-          "warning": "",
-          "error": "0"
-      },
-      {
-          "id": 9,
-          "metric": "test_failures",
-          "op": "GT",
-          "warning": "",
-          "error": "0"
-      }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-create-manual-issue.js b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-create-manual-issue.js
deleted file mode 100644 (file)
index 794947f..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib'),
-    testName = lib.testName('Source Viewer');
-
-lib.initMessages();
-lib.changeWorkingDirectory('source-viewer-create-manual-issue');
-lib.configureCasper();
-
-
-casper.test.begin(testName('source-viewer-create-manual-issue'), function (test) {
-  casper
-      .start(lib.buildUrl('source-viewer'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/components/app', 'app.json');
-        lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
-        lib.mockRequestFromFile('/api/issues/search', 'issues.json');
-        lib.mockRequestFromFile('/api/issues/create', 'create-issue.json');
-        lib.mockRequestFromFile('/api/issues/show', 'create-issue.json');
-        lib.mockRequestFromFile('/api/rules/search*', 'api-rules-search.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.source-line-number[data-line-number="3"]');
-      })
-
-      .then(function () {
-        casper.click('.source-line-number[data-line-number="3"]');
-        casper.waitForSelector('.js-add-manual-issue');
-      })
-
-      .then(function () {
-        casper.click('.js-add-manual-issue');
-        casper.waitForSelector('.js-manual-issue-form');
-      })
-
-      .then(function () {
-        casper.fill('.js-manual-issue-form', {
-          rule: 'manual:api',
-          message: 'An issue message'
-        }, true);
-      })
-
-      .then(function () {
-        casper.waitForSelector('.source-line-code.has-issues[data-line-number="3"]', function () {
-          test.assertExists('.source-line-code.has-issues[data-line-number="3"]');
-        });
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-create-manual-issue/api-rules-search.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-create-manual-issue/api-rules-search.json
deleted file mode 100644 (file)
index 9a176d3..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-{
-  "total": 5,
-  "p": 1,
-  "ps": 999999,
-  "rules": [
-    {
-      "key": "manual:api",
-      "name": "API"
-    },
-    {
-      "key": "manual:design",
-      "name": "Design"
-    },
-    {
-      "key": "manual:error_handling",
-      "name": "Error handling"
-    },
-    {
-      "key": "manual:performance",
-      "name": "Performance"
-    },
-    {
-      "key": "manual:sql_pitfalls",
-      "name": "SQL Pitfall"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-create-manual-issue/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-create-manual-issue/app.json
deleted file mode 100644 (file)
index dd6a3fb..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "uuid": "12345",
-  "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-  "path": "src/main/java/org/sonar/batch/index/Cache.java",
-  "name": "Cache.java",
-  "longName": "src/main/java/org/sonar/batch/index/Cache.java",
-  "q": "FIL",
-  "subProject": "org.codehaus.sonar:sonar-batch",
-  "subProjectName": "SonarQube :: Batch",
-  "project": "org.codehaus.sonar:sonar",
-  "projectName": "SonarQube",
-  "fav": false,
-  "canMarkAsFavourite": true,
-  "canCreateManualIssue": true,
-  "measures": {
-    "lines": "378",
-    "coverage": "74.3%",
-    "duplicationDensity": "5.8%",
-    "debt": "2h 10min",
-    "sqaleRating": "A",
-    "debtRatio": "1.1%",
-    "issues": "6"
-  }
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-create-manual-issue/create-issue.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-create-manual-issue/create-issue.json
deleted file mode 100644 (file)
index db69ef3..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-  "issue": {
-    "key": "e69e2012-c58e-4c37-9e0e-9595576de9de",
-    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "componentId": null,
-    "project": "org.codehaus.sonar:sonar",
-    "rule": "manual:api",
-    "status": "OPEN",
-    "severity": "MAJOR",
-    "message": "An issue message",
-    "line": 3,
-    "reporter": "admin",
-    "creationDate": "2014-12-08T14:22:49+0100",
-    "updateDate": "2014-12-08T14:22:49+0100",
-    "fUpdateAge": "less than a minute"
-  }
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-create-manual-issue/issues.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-create-manual-issue/issues.json
deleted file mode 100644 (file)
index 0b16011..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-{"total": 6, "p": 1, "ps": 100, "projects": [
-  {
-    "uuid": "69e57151-be0d-4157-adff-c06741d88879",
-    "key": "org.codehaus.sonar:sonar",
-    "id": 2865,
-    "qualifier": "TRK",
-    "name": "SonarQube",
-    "longName": "SonarQube"
-  }
-], "components": [
-  {
-    "uuid": "83379565-7af3-4047-8d1a-ed42b10309b0",
-    "key": "org.codehaus.sonar:sonar-batch",
-    "id": 1624,
-    "enabled": true,
-    "qualifier": "BRC",
-    "name": "SonarQube :: Batch",
-    "longName": "SonarQube :: Batch",
-    "path": "sonar-batch",
-    "projectId": 2865,
-    "subProjectId": 2865
-  },
-  {
-    "uuid": "69e57151-be0d-4157-adff-c06741d88879",
-    "key": "org.codehaus.sonar:sonar",
-    "id": 2865,
-    "enabled": true,
-    "qualifier": "TRK",
-    "name": "SonarQube",
-    "longName": "SonarQube"
-  },
-  {
-    "uuid": "b9615992-2458-4d54-a22f-b91ee7ba5bc5",
-    "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "id": 19983,
-    "enabled": true,
-    "qualifier": "FIL",
-    "name": "Cache.java",
-    "longName": "src/main/java/org/sonar/batch/index/Cache.java",
-    "path": "src/main/java/org/sonar/batch/index/Cache.java",
-    "projectId": 2865,
-    "subProjectId": 1624
-  }
-], "issues": [
-  {
-    "key": "20002ec7-b647-44da-bdf5-4d9fbf4b7c58",
-    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "componentId": 19983,
-    "project": "org.codehaus.sonar:sonar",
-    "subProject": "org.codehaus.sonar:sonar-batch",
-    "rule": "common-java:DuplicatedBlocks",
-    "status": "CONFIRMED",
-    "severity": "MAJOR",
-    "message": "2 duplicated blocks of code.",
-    "debt": "2h",
-    "creationDate": "2014-05-01T23:38:31+0200",
-    "updateDate": "2014-07-01T17:48:47+0200",
-    "fUpdateAge": "5 months",
-    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
-    "transitions": ["unconfirm", "resolve", "falsepositive"]
-  },
-  {
-    "key": "71a26f48-a90d-4a76-a745-4f6e6e8b1773",
-    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "componentId": 19983,
-    "project": "org.codehaus.sonar:sonar",
-    "subProject": "org.codehaus.sonar:sonar-batch",
-    "rule": "squid:S1135",
-    "status": "CONFIRMED",
-    "severity": "INFO",
-    "message": "Complete the task associated to this TODO comment.",
-    "line": 125,
-    "author": "simon.brandhof@gmail.com",
-    "creationDate": "2013-10-10T23:51:33+0200",
-    "updateDate": "2014-07-29T23:15:18+0200",
-    "fUpdateAge": "4 months",
-    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
-    "transitions": ["unconfirm", "resolve", "falsepositive"]
-  },
-  {
-    "key": "75419c88-0e3c-4311-aa47-fe5731e67558",
-    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "componentId": 19983,
-    "project": "org.codehaus.sonar:sonar",
-    "subProject": "org.codehaus.sonar:sonar-batch",
-    "rule": "squid:S1135",
-    "status": "CONFIRMED",
-    "severity": "INFO",
-    "message": "Complete the task associated to this TODO comment.",
-    "line": 155,
-    "author": "simon.brandhof@gmail.com",
-    "creationDate": "2013-10-10T23:51:33+0200",
-    "updateDate": "2014-07-29T23:15:18+0200",
-    "fUpdateAge": "4 months",
-    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
-    "transitions": ["unconfirm", "resolve", "falsepositive"]
-  },
-  {
-    "key": "01461208-6c1e-4cdf-9f27-b7afa78e76ec",
-    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "componentId": 19983,
-    "project": "org.codehaus.sonar:sonar",
-    "subProject": "org.codehaus.sonar:sonar-batch",
-    "rule": "squid:S1135",
-    "status": "CONFIRMED",
-    "severity": "INFO",
-    "message": "Complete the task associated to this TODO comment.",
-    "line": 184,
-    "author": "simon.brandhof@gmail.com",
-    "creationDate": "2013-10-10T23:51:33+0200",
-    "updateDate": "2014-07-29T23:15:18+0200",
-    "fUpdateAge": "4 months",
-    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
-    "transitions": ["unconfirm", "resolve", "falsepositive"]
-  },
-  {
-    "key": "e4de6481-7bfb-460a-8b3c-24459f9561d3",
-    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "componentId": 19983,
-    "project": "org.codehaus.sonar:sonar",
-    "subProject": "org.codehaus.sonar:sonar-batch",
-    "rule": "squid:S1135",
-    "status": "CONFIRMED",
-    "severity": "INFO",
-    "message": "Complete the task associated to this TODO comment.",
-    "line": 239,
-    "author": "Simon Brandhof",
-    "creationDate": "2013-08-09T16:04:33+0200",
-    "updateDate": "2014-07-29T23:15:18+0200",
-    "fUpdateAge": "4 months",
-    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
-    "transitions": ["unconfirm", "resolve", "falsepositive"]
-  },
-  {
-    "key": "59fc17f7-c977-4cb6-8f04-fbe88e4b9186",
-    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "componentId": 19983,
-    "project": "org.codehaus.sonar:sonar",
-    "subProject": "org.codehaus.sonar:sonar-batch",
-    "rule": "squid:S1192",
-    "status": "CONFIRMED",
-    "severity": "MINOR",
-    "message": "Define a constant instead of duplicating this literal \"Fail to get keys from cache \" 3 times.",
-    "line": 257,
-    "debt": "10min",
-    "author": "simon.brandhof@gmail.com",
-    "creationDate": "2014-02-20T07:48:16+0100",
-    "updateDate": "2014-02-24T16:57:34+0100",
-    "fUpdateAge": "9 months",
-    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
-    "transitions": ["unconfirm", "resolve", "falsepositive"]
-  }
-], "rules": [
-  {
-    "key": "common-java:DuplicatedBlocks",
-    "name": "Duplicated blocks",
-    "lang": "java",
-    "desc": "<p>An issue is created on a file as soon as there is a block of duplicated code on this file. It gives the number of blocks in the file.</p>",
-    "status": "READY",
-    "langName": "Java"
-  },
-  {
-    "key": "squid:S1192",
-    "name": "String literals should not be duplicated",
-    "lang": "java",
-    "desc": "<p>\n  Duplicated string literals make the process of refactoring error-prone, since you must be sure to update all occurrences.\n  On the other hand, constants can be referenced from many places, but only need to be updated in a single place.\n</p>\n\n<h2>Non Compliant Code Example</h2>\n\n<pre>\npublic void run() {\n  prepare(\"action1\");                              // Non-Compliant - \"action1\" is duplicated 3 times\n  execute(\"action1\");\n  release(\"action1\");\n}\n\n@SuppressWarning(\"all\")                            // Compliant - annotations are excluded\nprivate void method1() { /* ... */ }\n@SuppressWarning(\"all\")\nprivate void method2() { /* ... */ }\n\npublic String method3(String a) {\n  System.out.println(\"'\" + a + \"'\");               // Compliant - literal \"'\" has less than 5 characters and is excluded\n  return \"\";                                       // Compliant - literal \"\" has less than 5 characters and is excluded\n}\n</pre>\n\n<h2>Compliant Code Example</h2>\n\n<pre>\nprivate static final String ACTION_1 = \"action1\";  // Compliant\n\npublic void run() {\n  prepare(ACTION_1);                               // Compliant\n  execute(ACTION_1);\n  release(ACTION_1);\n}\n</pre>\n\n<h2>Exceptions</h2>\n<p>To prevent generating some false-positives, literals having less than 5 characters are excluded.</p>",
-    "status": "READY",
-    "langName": "Java"
-  },
-  {
-    "key": "squid:S1135",
-    "name": "TODO tags should be handled",
-    "lang": "java",
-    "desc": "<p>\n<code>TODO</code> tags are commonly used to mark places where some more code is required, but which the developer wants to implement later.\nSometimes the developer will not have the time or will simply forget to get back to that tag.\nThis rule is meant to track those tags, and ensure that they do not go unnoticed.\n</p>\n\n<p>The following code illustrates this rule:</p>\n\n<pre>\nvoid doSomething() {\n  // TODO\n}\n</pre>",
-    "status": "READY",
-    "langName": "Java"
-  }
-], "users": [
-  {
-    "login": "admin",
-    "name": "Admin Admin",
-    "active": true,
-    "email": "admin@sonarsource.com"
-  }
-], "languages": [
-  {
-    "key": "js",
-    "name": "JavaScript"
-  },
-  {
-    "key": "java",
-    "name": "Java"
-  }
-], "maxResultsReached": false, "paging": {
-  "pageIndex": 1,
-  "pageSize": 100,
-  "total": 6,
-  "fTotal": "6",
-  "pages": 1
-}}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-create-manual-issue/lines.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-create-manual-issue/lines.json
deleted file mode 100644 (file)
index e33d02b..0000000
+++ /dev/null
@@ -1,3868 +0,0 @@
-{"sources": [
-  {
-    "line": 1,
-    "code": "<span class=\"cppd\">/*</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 2,
-    "code": "<span class=\"cppd\"> * SonarQube, open source software quality management tool.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
-    "scmDate": "2013-04-21T11:58:14+0200"
-  },
-  {
-    "line": 3,
-    "code": "<span class=\"cppd\"> * Copyright (C) 2008-2014 SonarSource</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "57ae3026c36ae3b0b71756d6161124b1ae594c53",
-    "scmDate": "2014-03-11T17:52:41+0100"
-  },
-  {
-    "line": 4,
-    "code": "<span class=\"cppd\"> * mailto:contact AT sonarsource DOT com</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 5,
-    "code": "<span class=\"cppd\"> *</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 6,
-    "code": "<span class=\"cppd\"> * SonarQube is free software; you can redistribute it and/or</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
-    "scmDate": "2013-04-21T11:58:14+0200"
-  },
-  {
-    "line": 7,
-    "code": "<span class=\"cppd\"> * modify it under the terms of the GNU Lesser General Public</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 8,
-    "code": "<span class=\"cppd\"> * License as published by the Free Software Foundation; either</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 9,
-    "code": "<span class=\"cppd\"> * version 3 of the License, or (at your option) any later version.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 10,
-    "code": "<span class=\"cppd\"> *</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 11,
-    "code": "<span class=\"cppd\"> * SonarQube is distributed in the hope that it will be useful,</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
-    "scmDate": "2013-04-21T11:58:14+0200"
-  },
-  {
-    "line": 12,
-    "code": "<span class=\"cppd\"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 13,
-    "code": "<span class=\"cppd\"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 14,
-    "code": "<span class=\"cppd\"> * Lesser General Public License for more details.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 15,
-    "code": "<span class=\"cppd\"> *</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 16,
-    "code": "<span class=\"cppd\"> * You should have received a copy of the GNU Lesser General Public License</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
-    "scmDate": "2013-04-22T09:37:03+0200"
-  },
-  {
-    "line": 17,
-    "code": "<span class=\"cppd\"> * along with this program; if not, write to the Free Software Foundation,</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
-    "scmDate": "2013-04-22T09:37:03+0200"
-  },
-  {
-    "line": 18,
-    "code": "<span class=\"cppd\"> * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
-    "scmDate": "2013-04-22T09:37:03+0200"
-  },
-  {
-    "line": 19,
-    "code": "<span class=\"cppd\"> */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 20,
-    "code": "<span class=\"k\">package</span> org.sonar.batch.index;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 21,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 22,
-    "code": "<span class=\"k\">import </span>com.google.common.collect.<span class=\"sym-1 sym\">Sets</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 23,
-    "code": "<span class=\"k\">import </span>com.persistit.<span class=\"sym-2 sym\">Exchange</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 24,
-    "code": "<span class=\"k\">import </span>com.persistit.<span class=\"sym-3 sym\">Key</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 25,
-    "code": "<span class=\"k\">import </span>com.persistit.<span class=\"sym-4 sym\">KeyFilter</span>;",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 26,
-    "code": "<span class=\"k\">import </span>com.persistit.exception.<span class=\"sym-5 sym\">PersistitException</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 27,
-    "code": "<span class=\"k\">import </span>org.apache.commons.lang.builder.<span class=\"sym-6 sym\">ToStringBuilder</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 28,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 29,
-    "code": "<span class=\"k\">import </span>javax.annotation.<span class=\"sym-7 sym\">CheckForNull</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 30,
-    "code": "",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 31,
-    "code": "<span class=\"k\">import </span>java.util.<span class=\"sym-8 sym\">Iterator</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 32,
-    "code": "<span class=\"k\">import </span>java.util.<span class=\"sym-9 sym\">NoSuchElementException</span>;",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 33,
-    "code": "<span class=\"k\">import </span>java.util.<span class=\"sym-10 sym\">Set</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 34,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 35,
-    "code": "<span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 36,
-    "code": "<span class=\"cppd\"> * &lt;p&gt;</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 37,
-    "code": "<span class=\"cppd\"> * This cache is not thread-safe, due to direct usage of {@link com.persistit.Exchange}</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 38,
-    "code": "<span class=\"cppd\"> * &lt;/p&gt;</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 39,
-    "code": "<span class=\"cppd\"> */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 40,
-    "code": "<span class=\"k\">public </span><span class=\"k\">class</span> <span class=\"sym-11 sym\">Cache</span>&lt;V&gt; {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
-    "scmDate": "2014-07-25T16:31:45+0200"
-  },
-  {
-    "line": 41,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 42,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">final </span>String <span class=\"sym-12 sym\">name</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 43,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-13 sym\">exchange</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 44,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 45,
-    "code": "  <span class=\"sym-14 sym\">Cache</span>(String <span class=\"sym-15 sym\">name</span>, <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-16 sym\">exchange</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 46,
-    "code": "    <span class=\"k\">this</span>.<span class=\"sym-12 sym\">name</span> = <span class=\"sym-15 sym\">name</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 47,
-    "code": "    <span class=\"k\">this</span>.<span class=\"sym-13 sym\">exchange</span> = <span class=\"sym-16 sym\">exchange</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 48,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 49,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 50,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-17 sym\">put</span>(Object <span class=\"sym-18 sym\">key</span>, V <span class=\"sym-19 sym\">value</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 51,
-    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-18 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 52,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-19 sym\">value</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 53,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 54,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 55,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-20 sym\">put</span>(Object <span class=\"sym-21 sym\">firstKey</span>, Object <span class=\"sym-22 sym\">secondKey</span>, V <span class=\"sym-23 sym\">value</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 56,
-    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-21 sym\">firstKey</span>, <span class=\"sym-22 sym\">secondKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 57,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-23 sym\">value</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 58,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 59,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 60,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-24 sym\">put</span>(Object <span class=\"sym-25 sym\">firstKey</span>, Object <span class=\"sym-26 sym\">secondKey</span>, Object <span class=\"sym-27 sym\">thirdKey</span>, V <span class=\"sym-28 sym\">value</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 61,
-    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-25 sym\">firstKey</span>, <span class=\"sym-26 sym\">secondKey</span>, <span class=\"sym-27 sym\">thirdKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 62,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-28 sym\">value</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 63,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 64,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 65,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-29 sym\">put</span>(Object[] <span class=\"sym-30 sym\">key</span>, V <span class=\"sym-31 sym\">value</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 66,
-    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-30 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 67,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-31 sym\">value</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 68,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 69,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 70,
-    "code": "  <span class=\"k\">private </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-32 sym\">doPut</span>(V <span class=\"sym-33 sym\">value</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 71,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 72,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.getValue().put(<span class=\"sym-33 sym\">value</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 73,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.store();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 74,
-    "code": "      <span class=\"k\">return</span> <span class=\"k\">this</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 75,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-34 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 76,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to put element in the cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-34 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 77,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 78,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 79,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 80,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 81,
-    "code": "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 82,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 83,
-    "code": "  <span class=\"k\">public </span>V <span class=\"sym-35 sym\">get</span>(Object <span class=\"sym-36 sym\">key</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 84,
-    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-36 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 85,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 86,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 87,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 88,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 89,
-    "code": "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 90,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 91,
-    "code": "  <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 92,
-    "code": "<span class=\"a\">  </span><span class=\"k\">public </span>V <span class=\"sym-37 sym\">get</span>(Object <span class=\"sym-38 sym\">firstKey</span>, Object <span class=\"sym-39 sym\">secondKey</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 93,
-    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-38 sym\">firstKey</span>, <span class=\"sym-39 sym\">secondKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 94,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 95,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 96,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 97,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 98,
-    "code": "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 99,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 100,
-    "code": "  <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 101,
-    "code": "<span class=\"a\">  </span><span class=\"k\">public </span>V <span class=\"sym-40 sym\">get</span>(Object <span class=\"sym-41 sym\">firstKey</span>, Object <span class=\"sym-42 sym\">secondKey</span>, Object <span class=\"sym-43 sym\">thirdKey</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 102,
-    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-41 sym\">firstKey</span>, <span class=\"sym-42 sym\">secondKey</span>, <span class=\"sym-43 sym\">thirdKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 103,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 104,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 105,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 106,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 107,
-    "code": "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 108,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 109,
-    "code": "  <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 110,
-    "code": "<span class=\"a\">  </span><span class=\"k\">public </span>V <span class=\"sym-44 sym\">get</span>(Object[] <span class=\"sym-45 sym\">key</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 111,
-    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-45 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 112,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 113,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 114,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 115,
-    "code": "  <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 116,
-    "code": "  <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 117,
-    "code": "<span class=\"a\">  </span><span class=\"k\">private </span>V <span class=\"sym-46 sym\">doGet</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 118,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 119,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.fetch();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 120,
-    "code": "      <span class=\"k\">if </span>(!<span class=\"sym-13 sym\">exchange</span>.getValue().isDefined()) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1,
-    "conditions": 2,
-    "coveredConditions": 2
-  },
-  {
-    "line": 121,
-    "code": "        <span class=\"k\">return</span> <span class=\"k\">null</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 122,
-    "code": "      }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 123,
-    "code": "      <span class=\"k\">return</span> (V) <span class=\"sym-13 sym\">exchange</span>.getValue().get();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 124,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-47 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 125,
-    "code": "      <span class=\"cppd\">// TODO add parameters to message</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200"
-  },
-  {
-    "line": 126,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get element from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-47 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 127,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 128,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 129,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 130,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-48 sym\">containsKey</span>(Object <span class=\"sym-49 sym\">key</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 131,
-    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-49 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 132,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 133,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 134,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 135,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-50 sym\">containsKey</span>(Object <span class=\"sym-51 sym\">firstKey</span>, Object <span class=\"sym-52 sym\">secondKey</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 136,
-    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-51 sym\">firstKey</span>, <span class=\"sym-52 sym\">secondKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 137,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 138,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 139,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 140,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-53 sym\">containsKey</span>(Object <span class=\"sym-54 sym\">firstKey</span>, Object <span class=\"sym-55 sym\">secondKey</span>, Object <span class=\"sym-56 sym\">thirdKey</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 141,
-    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-54 sym\">firstKey</span>, <span class=\"sym-55 sym\">secondKey</span>, <span class=\"sym-56 sym\">thirdKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 142,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 143,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 144,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 145,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-57 sym\">containsKey</span>(Object[] <span class=\"sym-58 sym\">key</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 146,
-    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-58 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 147,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 148,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 149,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 150,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">boolean </span><span class=\"sym-59 sym\">doContainsKey</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 151,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200"
-  },
-  {
-    "line": 152,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.fetch();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 153,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-13 sym\">exchange</span>.isValueDefined();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 154,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-60 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 155,
-    "code": "      <span class=\"cppd\">// TODO add parameters to message</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200"
-  },
-  {
-    "line": 156,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to check if element is in cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-60 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 157,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200"
-  },
-  {
-    "line": 158,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200"
-  },
-  {
-    "line": 159,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200"
-  },
-  {
-    "line": 160,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-61 sym\">remove</span>(Object <span class=\"sym-62 sym\">key</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 161,
-    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-62 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 162,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 163,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 164,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 165,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-63 sym\">remove</span>(Object <span class=\"sym-64 sym\">firstKey</span>, Object <span class=\"sym-65 sym\">secondKey</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 166,
-    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-64 sym\">firstKey</span>, <span class=\"sym-65 sym\">secondKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 167,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 168,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 169,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 170,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-66 sym\">remove</span>(Object <span class=\"sym-67 sym\">firstKey</span>, Object <span class=\"sym-68 sym\">secondKey</span>, Object <span class=\"sym-69 sym\">thirdKey</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 171,
-    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-67 sym\">firstKey</span>, <span class=\"sym-68 sym\">secondKey</span>, <span class=\"sym-69 sym\">thirdKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 172,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 173,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 174,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 175,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-70 sym\">remove</span>(Object[] <span class=\"sym-71 sym\">key</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 176,
-    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-71 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 177,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 178,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 179,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 180,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">boolean </span><span class=\"sym-72 sym\">doRemove</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 181,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 182,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-13 sym\">exchange</span>.remove();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "6f1161efb92298ace498df544e38f6f97216ec36",
-    "scmDate": "2013-04-26T15:19:16+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 183,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-73 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 184,
-    "code": "      <span class=\"cppd\">// TODO add parameters to message</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200"
-  },
-  {
-    "line": 185,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get element from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-73 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 186,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 187,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 188,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 189,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 190,
-    "code": "<span class=\"cppd\">   * Removes everything in the specified group.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 191,
-    "code": "<span class=\"cppd\">   *</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 192,
-    "code": "<span class=\"cppd\">   * @param group The group name.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 193,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 194,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-74 sym\">clear</span>(Object <span class=\"sym-75 sym\">key</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 195,
-    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-75 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 196,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 197,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 198,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 199,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-76 sym\">clear</span>(Object <span class=\"sym-77 sym\">firstKey</span>, Object <span class=\"sym-78 sym\">secondKey</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 200,
-    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-77 sym\">firstKey</span>, <span class=\"sym-78 sym\">secondKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 201,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 202,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 203,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 204,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-79 sym\">clear</span>(Object <span class=\"sym-80 sym\">firstKey</span>, Object <span class=\"sym-81 sym\">secondKey</span>, Object <span class=\"sym-82 sym\">thirdKey</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 205,
-    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-80 sym\">firstKey</span>, <span class=\"sym-81 sym\">secondKey</span>, <span class=\"sym-82 sym\">thirdKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 206,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 207,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 208,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 209,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-83 sym\">clear</span>(Object[] <span class=\"sym-84 sym\">key</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 210,
-    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-84 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 211,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 212,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 213,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 214,
-    "code": "  <span class=\"k\">private </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-85 sym\">doClear</span>() {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 215,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 216,
-    "code": "      <span class=\"sym-3 sym\">Key</span> <span class=\"sym-86 sym\">to</span> = <span class=\"k\">new</span> <span class=\"sym-3 sym\">Key</span>(<span class=\"sym-13 sym\">exchange</span>.getKey());",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 217,
-    "code": "      <span class=\"sym-86 sym\">to</span>.append(<span class=\"sym-3 sym\">Key</span>.AFTER);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 218,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.removeKeyRange(<span class=\"sym-13 sym\">exchange</span>.getKey(), <span class=\"sym-86 sym\">to</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 219,
-    "code": "      <span class=\"k\">return</span> <span class=\"k\">this</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 220,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-87 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 221,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to clear values from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-87 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 222,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 223,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 224,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 225,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 226,
-    "code": "<span class=\"cppd\">   * Clears the default as well as all group caches.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 227,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 228,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-88 sym\">clear</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 229,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 230,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 231,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.removeAll();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 232,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-89 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 233,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to clear cache\"</span>, <span class=\"sym-89 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 234,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 235,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 236,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 237,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 238,
-    "code": "<span class=\"cppd\">   * Returns the set of cache keys associated with this group.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 239,
-    "code": "<span class=\"cppd\">   * TODO implement a lazy-loading equivalent with Iterator/Iterable</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 240,
-    "code": "<span class=\"cppd\">   *</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 241,
-    "code": "<span class=\"cppd\">   * @param group The group.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 242,
-    "code": "<span class=\"cppd\">   * @return The set of cache keys for this group.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 243,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 244,
-    "code": "  <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"rawtypes\"</span>)",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 245,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-10 sym\">Set</span> <span class=\"sym-90 sym\">keySet</span>(Object <span class=\"sym-91 sym\">key</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 246,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 247,
-    "code": "      <span class=\"sym-10 sym\">Set</span>&lt;Object&gt; <span class=\"sym-92 sym\">keys</span> = <span class=\"sym-1 sym\">Sets</span>.newLinkedHashSet();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 248,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 249,
-    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-93 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 250,
-    "code": "      <span class=\"sym-93 sym\">iteratorExchange</span>.append(<span class=\"sym-91 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 251,
-    "code": "      <span class=\"sym-93 sym\">iteratorExchange</span>.append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 252,
-    "code": "      <span class=\"k\">while </span>(<span class=\"sym-93 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1,
-    "conditions": 2,
-    "coveredConditions": 2
-  },
-  {
-    "line": 253,
-    "code": "        <span class=\"sym-92 sym\">keys</span>.add(<span class=\"sym-93 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 254,
-    "code": "      }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 255,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-92 sym\">keys</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 256,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-94 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 257,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-94 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 258,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 259,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 260,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 261,
-    "code": "  <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"rawtypes\"</span>)",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 262,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-10 sym\">Set</span> <span class=\"sym-95 sym\">keySet</span>(Object <span class=\"sym-96 sym\">firstKey</span>, Object <span class=\"sym-97 sym\">secondKey</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 263,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 264,
-    "code": "      <span class=\"sym-10 sym\">Set</span>&lt;Object&gt; <span class=\"sym-98 sym\">keys</span> = <span class=\"sym-1 sym\">Sets</span>.newLinkedHashSet();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 265,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 266,
-    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-99 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 267,
-    "code": "      <span class=\"sym-99 sym\">iteratorExchange</span>.append(<span class=\"sym-96 sym\">firstKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 268,
-    "code": "      <span class=\"sym-99 sym\">iteratorExchange</span>.append(<span class=\"sym-97 sym\">secondKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 269,
-    "code": "      <span class=\"sym-99 sym\">iteratorExchange</span>.append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 270,
-    "code": "      <span class=\"k\">while </span>(<span class=\"sym-99 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1,
-    "conditions": 2,
-    "coveredConditions": 2
-  },
-  {
-    "line": 271,
-    "code": "        <span class=\"sym-98 sym\">keys</span>.add(<span class=\"sym-99 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 272,
-    "code": "      }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 273,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-98 sym\">keys</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 274,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-100 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 275,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-100 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 276,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 277,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 278,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 279,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 280,
-    "code": "<span class=\"cppd\">   * Returns the set of keys associated with this cache.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 281,
-    "code": "<span class=\"cppd\">   *</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 282,
-    "code": "<span class=\"cppd\">   * @return The set containing the keys for this cache.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 283,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 284,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-10 sym\">Set</span>&lt;Object&gt; <span class=\"sym-101 sym\">keySet</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 285,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 286,
-    "code": "      <span class=\"sym-10 sym\">Set</span>&lt;Object&gt; <span class=\"sym-102 sym\">keys</span> = <span class=\"sym-1 sym\">Sets</span>.newLinkedHashSet();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 287,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 288,
-    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-103 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 289,
-    "code": "      <span class=\"sym-103 sym\">iteratorExchange</span>.append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 290,
-    "code": "      <span class=\"k\">while </span>(<span class=\"sym-103 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1,
-    "conditions": 2,
-    "coveredConditions": 2
-  },
-  {
-    "line": 291,
-    "code": "        <span class=\"sym-102 sym\">keys</span>.add(<span class=\"sym-103 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 292,
-    "code": "      }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 293,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-102 sym\">keys</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 294,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-104 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 295,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-104 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 296,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 297,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 298,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 299,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 300,
-    "code": "<span class=\"cppd\">   * Lazy-loading values for given keys</span>",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 301,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 302,
-    "code": "  <span class=\"k\">public </span>Iterable&lt;V&gt; <span class=\"sym-105 sym\">values</span>(Object <span class=\"sym-106 sym\">firstKey</span>, Object <span class=\"sym-107 sym\">secondKey</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 303,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 304,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 305,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-106 sym\">firstKey</span>).append(<span class=\"sym-107 sym\">secondKey</span>).append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 306,
-    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-108 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 307,
-    "code": "      <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-109 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-106 sym\">firstKey</span>)).append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-107 sym\">secondKey</span>));",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 308,
-    "code": "      <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-139 sym\">ValueIterable</span>&lt;V&gt;(<span class=\"sym-108 sym\">iteratorExchange</span>, <span class=\"sym-109 sym\">filter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 309,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-110 sym\">e</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 310,
-    "code": "      <span class=\"k\">throw</span> <span class=\"sym-111 sym\">failToGetValues</span>(<span class=\"sym-110 sym\">e</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
-    "scmDate": "2014-06-20T14:13:01+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 311,
-    "code": "    }",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 312,
-    "code": "  }",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
-    "scmDate": "2014-06-20T14:13:01+0200"
-  },
-  {
-    "line": 313,
-    "code": "",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
-    "scmDate": "2014-06-20T14:13:01+0200"
-  },
-  {
-    "line": 314,
-    "code": "  <span class=\"k\">private </span>IllegalStateException <span class=\"sym-111 sym\">failToGetValues</span>(Exception <span class=\"sym-112 sym\">e</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
-    "scmDate": "2014-06-20T14:13:01+0200"
-  },
-  {
-    "line": 315,
-    "code": "    <span class=\"k\">return</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get values from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-112 sym\">e</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
-    "scmDate": "2014-06-20T14:13:01+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 316,
-    "code": "  }",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 317,
-    "code": "",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 318,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 319,
-    "code": "<span class=\"cppd\">   * Lazy-loading values for a given key</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 320,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 321,
-    "code": "  <span class=\"k\">public </span>Iterable&lt;V&gt; <span class=\"sym-113 sym\">values</span>(Object <span class=\"sym-114 sym\">firstKey</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 322,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 323,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 324,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-114 sym\">firstKey</span>).append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 325,
-    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-115 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 326,
-    "code": "      <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-116 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-114 sym\">firstKey</span>));",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 327,
-    "code": "      <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-139 sym\">ValueIterable</span>&lt;V&gt;(<span class=\"sym-115 sym\">iteratorExchange</span>, <span class=\"sym-116 sym\">filter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 328,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-117 sym\">e</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
-    "scmDate": "2014-04-23T14:41:32+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 329,
-    "code": "      <span class=\"k\">throw</span> <span class=\"sym-111 sym\">failToGetValues</span>(<span class=\"sym-117 sym\">e</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
-    "scmDate": "2014-06-20T14:13:01+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 330,
-    "code": "    }",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 331,
-    "code": "  }",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 332,
-    "code": "",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 333,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 334,
-    "code": "<span class=\"cppd\">   * Lazy-loading values</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 335,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 336,
-    "code": "  <span class=\"k\">public </span>Iterable&lt;V&gt; <span class=\"sym-118 sym\">values</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 337,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 338,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear().append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 339,
-    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-119 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 340,
-    "code": "      <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-120 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.ALL);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 341,
-    "code": "      <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-139 sym\">ValueIterable</span>&lt;V&gt;(<span class=\"sym-119 sym\">iteratorExchange</span>, <span class=\"sym-120 sym\">filter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 342,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-121 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 343,
-    "code": "      <span class=\"k\">throw</span> <span class=\"sym-111 sym\">failToGetValues</span>(<span class=\"sym-121 sym\">e</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
-    "scmDate": "2014-06-20T14:13:01+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 344,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 345,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 346,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 347,
-    "code": "  <span class=\"k\">public </span>Iterable&lt;<span class=\"sym-177 sym\">Entry</span>&lt;V&gt;&gt; <span class=\"sym-122 sym\">entries</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 348,
-    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear().to(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 349,
-    "code": "    <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-123 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.ALL);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 350,
-    "code": "    <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-156 sym\">EntryIterable</span>&lt;V&gt;(<span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>), <span class=\"sym-123 sym\">filter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 351,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 352,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 353,
-    "code": "  <span class=\"k\">public </span>Iterable&lt;<span class=\"sym-177 sym\">Entry</span>&lt;V&gt;&gt; <span class=\"sym-124 sym\">entries</span>(Object <span class=\"sym-125 sym\">firstKey</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 354,
-    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear().append(<span class=\"sym-125 sym\">firstKey</span>).append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 355,
-    "code": "    <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-126 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-125 sym\">firstKey</span>));",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 356,
-    "code": "    <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-156 sym\">EntryIterable</span>&lt;V&gt;(<span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>), <span class=\"sym-126 sym\">filter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 357,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 358,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 359,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-127 sym\">resetKey</span>(Object <span class=\"sym-128 sym\">key</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 360,
-    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 361,
-    "code": "    <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-128 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 362,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 363,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 364,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-129 sym\">resetKey</span>(Object <span class=\"sym-130 sym\">first</span>, Object <span class=\"sym-131 sym\">second</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 365,
-    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 366,
-    "code": "    <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-130 sym\">first</span>).append(<span class=\"sym-131 sym\">second</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 367,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 368,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 369,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-132 sym\">resetKey</span>(Object <span class=\"sym-133 sym\">first</span>, Object <span class=\"sym-134 sym\">second</span>, Object <span class=\"sym-135 sym\">third</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 370,
-    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 371,
-    "code": "    <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-133 sym\">first</span>).append(<span class=\"sym-134 sym\">second</span>).append(<span class=\"sym-135 sym\">third</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 372,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 373,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 374,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-136 sym\">resetKey</span>(Object[] <span class=\"sym-137 sym\">keys</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 375,
-    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 376,
-    "code": "    <span class=\"k\">for</span> (Object <span class=\"sym-138 sym\">o</span> : <span class=\"sym-137 sym\">keys</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0,
-    "conditions": 2,
-    "coveredConditions": 0
-  },
-  {
-    "line": 377,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-138 sym\">o</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 378,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 379,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 380,
-    "code": "",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "7b301db8c7e3000ff2a04fce5534e45e7d973a1f",
-    "scmDate": "2014-04-25T11:17:09+0200"
-  },
-  {
-    "line": 381,
-    "code": "  <span class=\"cppd\">//</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 382,
-    "code": "  <span class=\"cppd\">// LAZY ITERATORS AND ITERABLES</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 383,
-    "code": "  <span class=\"cppd\">//</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 384,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 385,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-139 sym\">ValueIterable</span>&lt;T&gt; <span class=\"k\">implements</span> Iterable&lt;T&gt; {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
-    "scmDate": "2014-07-25T16:31:45+0200"
-  },
-  {
-    "line": 386,
-    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-8 sym\">Iterator</span>&lt;T&gt; <span class=\"sym-140 sym\">iterator</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 387,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 388,
-    "code": "    <span class=\"k\">private </span><span class=\"sym-141 sym\">ValueIterable</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-142 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-143 sym\">keyFilter</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 389,
-    "code": "      <span class=\"k\">this</span>.<span class=\"sym-140 sym\">iterator</span> = <span class=\"k\">new</span> <span class=\"sym-145 sym\">ValueIterator</span>&lt;T&gt;(<span class=\"sym-142 sym\">exchange</span>, <span class=\"sym-143 sym\">keyFilter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 390,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 391,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 392,
-    "code": "    <span class=\"a\">@Override</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 393,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"sym-8 sym\">Iterator</span>&lt;T&gt; <span class=\"sym-144 sym\">iterator</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 394,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-140 sym\">iterator</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 395,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 396,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 397,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 398,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-145 sym\">ValueIterator</span>&lt;T&gt; <span class=\"k\">implements</span> <span class=\"sym-8 sym\">Iterator</span>&lt;T&gt; {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
-    "scmDate": "2014-07-25T16:31:45+0200"
-  },
-  {
-    "line": 399,
-    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-146 sym\">exchange</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 400,
-    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-147 sym\">keyFilter</span>;",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 401,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 402,
-    "code": "    <span class=\"k\">private </span><span class=\"sym-148 sym\">ValueIterator</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-149 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-150 sym\">keyFilter</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 403,
-    "code": "      <span class=\"k\">this</span>.<span class=\"sym-146 sym\">exchange</span> = <span class=\"sym-149 sym\">exchange</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "lineHits": 1,
-    "duplicated": true
-  },
-  {
-    "line": 404,
-    "code": "      <span class=\"k\">this</span>.<span class=\"sym-147 sym\">keyFilter</span> = <span class=\"sym-150 sym\">keyFilter</span>;",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1,
-    "duplicated": true
-  },
-  {
-    "line": 405,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "lineHits": 1,
-    "duplicated": true
-  },
-  {
-    "line": 406,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "duplicated": true
-  },
-  {
-    "line": 407,
-    "code": "    <span class=\"a\">@Override</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "duplicated": true
-  },
-  {
-    "line": 408,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-151 sym\">hasNext</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "duplicated": true
-  },
-  {
-    "line": 409,
-    "code": "      <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "duplicated": true
-  },
-  {
-    "line": 410,
-    "code": "        <span class=\"k\">return</span> <span class=\"sym-146 sym\">exchange</span>.hasNext(<span class=\"sym-147 sym\">keyFilter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1,
-    "duplicated": true
-  },
-  {
-    "line": 411,
-    "code": "      } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-152 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "lineHits": 0,
-    "duplicated": true
-  },
-  {
-    "line": 412,
-    "code": "        <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-152 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "lineHits": 0,
-    "duplicated": true
-  },
-  {
-    "line": 413,
-    "code": "      }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "duplicated": true
-  },
-  {
-    "line": 414,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "duplicated": true
-  },
-  {
-    "line": 415,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "duplicated": true
-  },
-  {
-    "line": 416,
-    "code": "    <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "duplicated": true
-  },
-  {
-    "line": 417,
-    "code": "    <span class=\"a\">@Override</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "duplicated": true
-  },
-  {
-    "line": 418,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span>T <span class=\"sym-153 sym\">next</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 419,
-    "code": "      <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 420,
-    "code": "        <span class=\"sym-146 sym\">exchange</span>.next(<span class=\"sym-147 sym\">keyFilter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 421,
-    "code": "      } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-154 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 422,
-    "code": "        <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-154 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 423,
-    "code": "      }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 424,
-    "code": "      <span class=\"k\">if </span>(<span class=\"sym-146 sym\">exchange</span>.getValue().isDefined()) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "lineHits": 1,
-    "conditions": 2,
-    "coveredConditions": 1
-  },
-  {
-    "line": 425,
-    "code": "        <span class=\"k\">return</span> (T) <span class=\"sym-146 sym\">exchange</span>.getValue().get();",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 426,
-    "code": "      }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 427,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> <span class=\"sym-9 sym\">NoSuchElementException</span>();",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 428,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 429,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 430,
-    "code": "    <span class=\"a\">@Override</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 431,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-155 sym\">remove</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 432,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> UnsupportedOperationException(<span class=\"s\">\"Removing an item is not supported\"</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "34cce8e330192c56a159a856ebd8072d38299087",
-    "scmDate": "2014-02-24T14:21:50+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 433,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 434,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 435,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 436,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-156 sym\">EntryIterable</span>&lt;T&gt; <span class=\"k\">implements</span> Iterable&lt;<span class=\"sym-177 sym\">Entry</span>&lt;T&gt;&gt; {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
-    "scmDate": "2014-07-25T16:31:45+0200"
-  },
-  {
-    "line": 437,
-    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-162 sym\">EntryIterator</span>&lt;T&gt; <span class=\"sym-157 sym\">it</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 438,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 439,
-    "code": "    <span class=\"k\">private </span><span class=\"sym-158 sym\">EntryIterable</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-159 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-160 sym\">keyFilter</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 440,
-    "code": "      <span class=\"sym-157 sym\">it</span> = <span class=\"k\">new</span> <span class=\"sym-162 sym\">EntryIterator</span>&lt;T&gt;(<span class=\"sym-159 sym\">exchange</span>, <span class=\"sym-160 sym\">keyFilter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 441,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 442,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 443,
-    "code": "    <span class=\"a\">@Override</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 444,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"sym-8 sym\">Iterator</span>&lt;<span class=\"sym-177 sym\">Entry</span>&lt;T&gt;&gt; <span class=\"sym-161 sym\">iterator</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 445,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-157 sym\">it</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 446,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 447,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 448,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 449,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-162 sym\">EntryIterator</span>&lt;T&gt; <span class=\"k\">implements</span> <span class=\"sym-8 sym\">Iterator</span>&lt;<span class=\"sym-177 sym\">Entry</span>&lt;T&gt;&gt; {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
-    "scmDate": "2014-07-25T16:31:45+0200"
-  },
-  {
-    "line": 450,
-    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-163 sym\">exchange</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 451,
-    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-164 sym\">keyFilter</span>;",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 452,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 453,
-    "code": "    <span class=\"k\">private </span><span class=\"sym-165 sym\">EntryIterator</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-166 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-167 sym\">keyFilter</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 454,
-    "code": "      <span class=\"k\">this</span>.<span class=\"sym-163 sym\">exchange</span> = <span class=\"sym-166 sym\">exchange</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "lineHits": 1,
-    "duplicated": true
-  },
-  {
-    "line": 455,
-    "code": "      <span class=\"k\">this</span>.<span class=\"sym-164 sym\">keyFilter</span> = <span class=\"sym-167 sym\">keyFilter</span>;",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1,
-    "duplicated": true
-  },
-  {
-    "line": 456,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "lineHits": 1,
-    "duplicated": true
-  },
-  {
-    "line": 457,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "duplicated": true
-  },
-  {
-    "line": 458,
-    "code": "    <span class=\"a\">@Override</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "duplicated": true
-  },
-  {
-    "line": 459,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-168 sym\">hasNext</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "duplicated": true
-  },
-  {
-    "line": 460,
-    "code": "      <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "duplicated": true
-  },
-  {
-    "line": 461,
-    "code": "        <span class=\"k\">return</span> <span class=\"sym-163 sym\">exchange</span>.hasNext(<span class=\"sym-164 sym\">keyFilter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1,
-    "duplicated": true
-  },
-  {
-    "line": 462,
-    "code": "      } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-169 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "lineHits": 0,
-    "duplicated": true
-  },
-  {
-    "line": 463,
-    "code": "        <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-169 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "lineHits": 0,
-    "duplicated": true
-  },
-  {
-    "line": 464,
-    "code": "      }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "duplicated": true
-  },
-  {
-    "line": 465,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "duplicated": true
-  },
-  {
-    "line": 466,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "duplicated": true
-  },
-  {
-    "line": 467,
-    "code": "    <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "duplicated": true
-  },
-  {
-    "line": 468,
-    "code": "    <span class=\"a\">@Override</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "duplicated": true
-  },
-  {
-    "line": 469,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"sym-177 sym\">Entry</span>&lt;T&gt; <span class=\"sym-170 sym\">next</span>() {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 470,
-    "code": "      <span class=\"k\">try </span>{",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 471,
-    "code": "        <span class=\"sym-163 sym\">exchange</span>.next(<span class=\"sym-164 sym\">keyFilter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 472,
-    "code": "      } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-171 sym\">e</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 473,
-    "code": "        <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-171 sym\">e</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 474,
-    "code": "      }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 475,
-    "code": "      <span class=\"k\">if </span>(<span class=\"sym-163 sym\">exchange</span>.getValue().isDefined()) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1,
-    "conditions": 2,
-    "coveredConditions": 1
-  },
-  {
-    "line": 476,
-    "code": "        T <span class=\"sym-172 sym\">value</span> = (T) <span class=\"sym-163 sym\">exchange</span>.getValue().get();",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 477,
-    "code": "        <span class=\"sym-3 sym\">Key</span> <span class=\"sym-173 sym\">key</span> = <span class=\"sym-163 sym\">exchange</span>.getKey();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 478,
-    "code": "        Object[] <span class=\"sym-174 sym\">array</span> = <span class=\"k\">new</span> Object[<span class=\"sym-173 sym\">key</span>.getDepth()];",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 479,
-    "code": "        <span class=\"k\">for</span> (<span class=\"k\">int </span><span class=\"sym-175 sym\">i</span> = <span class=\"c\">0</span>; <span class=\"sym-175 sym\">i</span> &lt; <span class=\"sym-173 sym\">key</span>.getDepth(); <span class=\"sym-175 sym\">i</span>++) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1,
-    "conditions": 2,
-    "coveredConditions": 2
-  },
-  {
-    "line": 480,
-    "code": "          <span class=\"sym-174 sym\">array</span>[<span class=\"sym-175 sym\">i</span>] = <span class=\"sym-173 sym\">key</span>.indexTo(<span class=\"sym-175 sym\">i</span> - <span class=\"sym-173 sym\">key</span>.getDepth()).decode();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 481,
-    "code": "        }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 482,
-    "code": "        <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-177 sym\">Entry</span>&lt;T&gt;(<span class=\"sym-174 sym\">array</span>, <span class=\"sym-172 sym\">value</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 483,
-    "code": "      }",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 484,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> <span class=\"sym-9 sym\">NoSuchElementException</span>();",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 485,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 486,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 487,
-    "code": "    <span class=\"a\">@Override</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 488,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-176 sym\">remove</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 489,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> UnsupportedOperationException(<span class=\"s\">\"Removing an item is not supported\"</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "34cce8e330192c56a159a856ebd8072d38299087",
-    "scmDate": "2014-02-24T14:21:50+0100",
-    "lineHits": 0
-  },
-  {
-    "line": 490,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 491,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 492,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 493,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-177 sym\">Entry</span>&lt;V&gt; {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
-    "scmDate": "2014-07-25T16:31:45+0200"
-  },
-  {
-    "line": 494,
-    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span>Object[] <span class=\"sym-178 sym\">key</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 495,
-    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span>V <span class=\"sym-179 sym\">value</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 496,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 497,
-    "code": "    <span class=\"sym-180 sym\">Entry</span>(Object[] <span class=\"sym-181 sym\">key</span>, V <span class=\"sym-182 sym\">value</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "lineHits": 1
-  },
-  {
-    "line": 498,
-    "code": "      <span class=\"k\">this</span>.<span class=\"sym-178 sym\">key</span> = <span class=\"sym-181 sym\">key</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 499,
-    "code": "      <span class=\"k\">this</span>.<span class=\"sym-179 sym\">value</span> = <span class=\"sym-182 sym\">value</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 500,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 501,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 502,
-    "code": "    <span class=\"k\">public </span>Object[] <span class=\"sym-183 sym\">key</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 503,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-178 sym\">key</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 504,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 505,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 506,
-    "code": "    <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 507,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span>V <span class=\"sym-184 sym\">value</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 508,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-179 sym\">value</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "lineHits": 1
-  },
-  {
-    "line": 509,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 510,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 511,
-    "code": "    <span class=\"a\">@Override</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 512,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span>String <span class=\"sym-185 sym\">toString</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 513,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-6 sym\">ToStringBuilder</span>.reflectionToString(<span class=\"k\">this</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "lineHits": 0
-  },
-  {
-    "line": 514,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 515,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 516,
-    "code": "",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "43fc31f75a2de06b23faefb0d2bbf1dd97290232",
-    "scmDate": "2014-05-05T16:43:19+0200"
-  },
-  {
-    "line": 517,
-    "code": "}",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 518,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  }
-]}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-favorite-spec.js b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-favorite-spec.js
deleted file mode 100644 (file)
index 6a43987..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib'),
-    testName = lib.testName('Source Viewer');
-
-lib.initMessages();
-lib.changeWorkingDirectory('source-viewer-spec');
-lib.configureCasper();
-
-
-casper.test.begin(testName('Mark as Favorite'), function (test) {
-  casper
-      .start(lib.buildUrl('source-viewer'), function () {
-        lib.setDefaultViewport();
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequest('/api/favourites', '{}', { type: 'POST' });
-        lib.mockRequest('/api/favourites/*', '{}', { type: 'DELETE' });
-        lib.mockRequestFromFile('/api/components/app', 'app.json');
-        lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
-        lib.mockRequestFromFile('/api/issues/search', 'issues.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.source-line');
-      })
-
-      .then(function () {
-        test.assertExists('.js-favorite');
-        test.assertExists('.icon-not-favorite');
-        casper.click('.js-favorite');
-        casper.waitForSelector('.icon-favorite', function () {
-          test.assertExists('.icon-favorite');
-          casper.click('.js-favorite');
-          casper.waitForSelector('.icon-not-favorite', function () {
-            test.assertExists('.icon-not-favorite');
-          });
-        });
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
-
-
-casper.test.begin(testName('Don\'t Show Favorite If Not Logged In'), function (test) {
-  casper
-      .start(lib.buildUrl('source-viewer'), function () {
-        lib.setDefaultViewport();
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/components/app', 'app-not-logged-in.json');
-        lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
-        lib.mockRequestFromFile('/api/issues/search', 'issues.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.source-line');
-      })
-
-      .then(function () {
-        test.assertDoesntExist('.js-favorite');
-        test.assertDoesntExist('.icon-favorite');
-        test.assertDoesntExist('.icon-not-favorite');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-link-to-raw-spec.js b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-link-to-raw-spec.js
deleted file mode 100644 (file)
index 3c9f83f..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib'),
-    testName = lib.testName('Source Viewer');
-
-lib.initMessages();
-lib.changeWorkingDirectory('source-viewer-spec');
-lib.configureCasper();
-
-
-casper.test.begin(testName('Link to Raw'), function (test) {
-  casper
-      .start(lib.buildUrl('source-viewer'), function () {
-        lib.setDefaultViewport();
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/components/app', 'app.json');
-        lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
-        lib.mockRequestFromFile('/api/issues/search', 'issues.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.source-line');
-      })
-
-      .then(function () {
-        casper.click('.js-actions');
-        casper.waitForSelector('.js-raw-source', function () {
-          casper.click('.js-raw-source');
-        });
-      })
-
-      .then(function () {
-        casper.withPopup(/Cache\.java/, function () {
-          this.test.assertUrlMatch('org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java');
-        });
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-not-show-source-if-no-permission.js b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-not-show-source-if-no-permission.js
deleted file mode 100644 (file)
index 51786db..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib'),
-    testName = lib.testName('Source Viewer');
-
-lib.initMessages();
-lib.changeWorkingDirectory('source-viewer-should-not-show-source-if-no-permission');
-lib.configureCasper();
-
-
-casper.test.begin(testName('source-viewer-should-not-show-source-if-no-permission'), function (test) {
-  casper
-      .start(lib.buildUrl('source-viewer'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/components/app', 'api-components-app.json');
-        lib.mockRequest('/api/sources/lines', '{}', { status: 403 });
-        lib.mockRequestFromFile('/api/issues/search', 'api-issues-search.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.message-error', function () {
-          test.assertDoesntExist('.source-line');
-        });
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-not-show-source-if-no-permission/api-components-app.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-not-show-source-if-no-permission/api-components-app.json
deleted file mode 100644 (file)
index db4620f..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-  "uuid": "12345",
-  "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Simplest.java",
-  "path": "src/main/java/foo/Simplest.java",
-  "name": "Simplest.java",
-  "longName": "src/main/java/foo/Simplest.java",
-  "q": "FIL",
-  "project": "test:fake-project-for-tests",
-  "projectName": "Fake Project for Tests",
-  "fav": false,
-  "canMarkAsFavourite": true,
-  "canCreateManualIssue": true,
-  "measures": {
-    "lines": "8",
-    "coverage": "75.0%",
-    "debt": "44min",
-    "sqaleRating": "C",
-    "debtRatio": "18.3%",
-    "issues": "5"
-  }
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-not-show-source-if-no-permission/api-issues-search.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-not-show-source-if-no-permission/api-issues-search.json
deleted file mode 100644 (file)
index 73d6a9f..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-{
-  "total": 5,
-  "p": 1,
-  "ps": 100,
-  "projects": [
-    {
-      "uuid": "e07e9bed-f45d-4538-a5e8-77031c1ecae7",
-      "key": "test:fake-project-for-tests",
-      "id": 36125,
-      "qualifier": "TRK",
-      "name": "Fake Project for Tests",
-      "longName": "Fake Project for Tests"
-    }
-  ],
-  "components": [
-    {
-      "uuid": "b4248001-df0c-436a-8acd-a152809b8a23",
-      "key": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
-      "id": 36129,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "Simplest.java",
-      "longName": "src/main/java/foo/Simplest.java",
-      "path": "src/main/java/foo/Simplest.java",
-      "projectId": 36125,
-      "subProjectId": 36125
-    },
-    {
-      "uuid": "e07e9bed-f45d-4538-a5e8-77031c1ecae7",
-      "key": "test:fake-project-for-tests",
-      "id": 36125,
-      "enabled": true,
-      "qualifier": "TRK",
-      "name": "Fake Project for Tests",
-      "longName": "Fake Project for Tests"
-    }
-  ],
-  "issues": [
-    {
-      "key": "91b13078-6f69-4b51-ab0f-8fd0bc391532",
-      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
-      "componentId": 36129,
-      "project": "test:fake-project-for-tests",
-      "rule": "squid:S00105",
-      "status": "OPEN",
-      "severity": "MINOR",
-      "message": "Replace all tab characters in this file by sequences of white-spaces.",
-      "debt": "2min",
-      "creationDate": "2014-12-09T10:47:33+0100",
-      "updateDate": "2014-12-09T10:47:33+0100",
-      "fUpdateAge": "3 hours",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "c18ae6fa-fac7-46b5-bd71-feef7906b05a",
-      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
-      "componentId": 36129,
-      "project": "test:fake-project-for-tests",
-      "rule": "squid:S1118",
-      "status": "OPEN",
-      "severity": "MAJOR",
-      "message": "Add a private constructor to hide the implicit public one.",
-      "line": 6,
-      "debt": "30min",
-      "creationDate": "2014-12-09T10:47:33+0100",
-      "updateDate": "2014-12-09T10:47:33+0100",
-      "fUpdateAge": "3 hours",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "816282ec-0ca9-4d03-b8bc-22b515496fe4",
-      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
-      "componentId": 36129,
-      "project": "test:fake-project-for-tests",
-      "rule": "squid:IndentationCheck",
-      "status": "OPEN",
-      "severity": "MAJOR",
-      "message": "Make this line start at column 3.",
-      "line": 8,
-      "debt": "1min",
-      "creationDate": "2014-12-09T10:47:33+0100",
-      "updateDate": "2014-12-09T10:47:33+0100",
-      "fUpdateAge": "3 hours",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "0229497b-a613-48f3-83ed-2b98983e5e60",
-      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
-      "componentId": 36129,
-      "project": "test:fake-project-for-tests",
-      "rule": "squid:IndentationCheck",
-      "status": "OPEN",
-      "severity": "MAJOR",
-      "message": "Make this line start at column 5.",
-      "line": 10,
-      "debt": "1min",
-      "creationDate": "2014-12-09T10:47:33+0100",
-      "updateDate": "2014-12-09T10:47:33+0100",
-      "fUpdateAge": "3 hours",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "896ccfe0-bb85-4155-be1f-1aaece716539",
-      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
-      "componentId": 36129,
-      "project": "test:fake-project-for-tests",
-      "rule": "squid:S106",
-      "status": "OPEN",
-      "severity": "MAJOR",
-      "message": "Replace this usage of System.out or System.err by a logger.",
-      "line": 12,
-      "debt": "10min",
-      "creationDate": "2014-12-09T10:47:33+0100",
-      "updateDate": "2014-12-09T10:47:33+0100",
-      "fUpdateAge": "3 hours",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ]
-    }
-  ],
-  "rules": [
-    {
-      "key": "squid:IndentationCheck",
-      "name": "Source code should be correctly indented",
-      "lang": "java",
-      "desc": "<p>\nProper indentation is a simple and effective way to improve the code's readability.\nConsistent indentation among developers also reduces the differences that are committed to source control systems, making code reviews easier.\n</p>\n\n<p>The following code illustrates this rule with an indentation level of 2:</p>\n\n<pre>\nclass Foo {\n  public int a; // Compliant\npublic int b;   // Non-Compliant\n}\n</pre>",
-      "status": "READY",
-      "langName": "Java"
-    },
-    {
-      "key": "squid:S1118",
-      "name": "Utility classes should not have a public constructor",
-      "lang": "java",
-      "desc": "<p>\nUtility classes, which are a collection of static members, are not meant to be instantiated.\nThey should therefore not have public constructors.\n</p>\n\n<p>\nJava adds an implicit public constructor to every class which does not define at least one explicitly.\nHence, at least one non-public constructor should be defined.\n</p>\n\n<p>The following code:</p>\n\n<pre>\nclass StringUtils { // Non-Compliant\n\n  public static String concatenate(String s1, String s2) {\n    return s1 + s2;\n  }\n\n}\n</pre>\n\n<p>should be refactored into:</p>\n\n<pre>\nclass StringUtils { // Compliant\n\n  private StringUtils() {\n  }\n\n  public static String concatenate(String s1, String s2) {\n    return s1 + s2;\n  }\n\n}\n</pre>",
-      "status": "READY",
-      "langName": "Java"
-    },
-    {
-      "key": "squid:S00105",
-      "name": "Tabulation characters should not be used",
-      "lang": "java",
-      "desc": "<p>\nDevelopers should not need to configure the tab width of their text editors in order to be able to read source code.\nSo the use of tabulation character must be banned.\n</p>",
-      "status": "READY",
-      "langName": "Java"
-    },
-    {
-      "key": "squid:S106",
-      "name": "System.out and System.err should not be used as loggers",
-      "lang": "java",
-      "desc": "<p>Two important requirements must be fulfilled when logging messages:</p>\n\n<ul>\n  <li>The user must be able to easily retrieve the logs.</li>\n  <li>The format of all messages must be uniform to enable users to easily browse them.</li>\n</ul>\n\n<p>\nIf a program directly writes to the standard output, there is absolutely no way to comply with these requirements.\nThat's why defining and using a dedicated logger is highly recommended.\n</p>\n\n<p>\nThe following code snippet illustrates this rule:\n</p>\n\n<pre>\nSystem.out.println(\"My Message\");  // Non-Compliant\n\nlogger.log(\"My Message\");          // Compliant\n</pre>",
-      "status": "READY",
-      "langName": "Java"
-    }
-  ],
-  "users": [
-    {
-      "login": "admin",
-      "name": "Admin Admin",
-      "active": true,
-      "email": "admin@sonarsource.com"
-    }
-  ],
-  "languages": [
-    {
-      "key": "js",
-      "name": "JavaScript"
-    },
-    {
-      "key": "java",
-      "name": "Java"
-    }
-  ],
-  "maxResultsReached": false,
-  "paging": {
-    "pageIndex": 1,
-    "pageSize": 100,
-    "total": 5,
-    "fTotal": "5",
-    "pages": 1
-  }
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-open-in-new-window-with-line.js b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-open-in-new-window-with-line.js
deleted file mode 100644 (file)
index fd5f817..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib'),
-    testName = lib.testName('Source Viewer');
-
-lib.initMessages();
-lib.changeWorkingDirectory('source-viewer-should-open-in-new-window');
-lib.configureCasper();
-
-
-casper.test.begin(testName('source-viewer-should-open-in-new-window-with-line'), function (test) {
-  casper
-      .start(lib.buildUrl('source-viewer'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/components/app', 'api-components-app.json');
-        lib.mockRequestFromFile('/api/sources/lines', 'api-sources-lines.json');
-        lib.mockRequestFromFile('/api/issues/search', 'api-issues-search.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.source-line');
-      })
-
-      .then(function () {
-        casper.click('.source-line-number[data-line-number="6"]');
-        casper.waitForSelector('.bubble-popup');
-      })
-
-      .then(function () {
-        casper.click('.js-actions');
-        casper.waitForSelector('.js-new-window', function () {
-          casper.click('.js-new-window');
-        });
-      })
-
-      .then(function () {
-        casper.withPopup(/Simplest\.java/, function () {
-          this.test.assertUrlMatch('test:fake-project-for-tests:src/main/java/foo/Simplest.java');
-          this.test.assertUrlMatch('line=6');
-        });
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-open-in-new-window.js b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-open-in-new-window.js
deleted file mode 100644 (file)
index 35188e2..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-var lib = require('../lib'),
-    testName = lib.testName('Source Viewer');
-
-lib.initMessages();
-lib.changeWorkingDirectory('source-viewer-should-open-in-new-window');
-lib.configureCasper();
-
-
-casper.test.begin(testName('source-viewer-should-open-in-new-window'), function (test) {
-  casper
-      .start(lib.buildUrl('source-viewer'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/components/app', 'api-components-app.json');
-        lib.mockRequestFromFile('/api/sources/lines', 'api-sources-lines.json');
-        lib.mockRequestFromFile('/api/issues/search', 'api-issues-search.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.source-line');
-      })
-
-      .then(function () {
-        casper.click('.js-actions');
-        casper.waitForSelector('.js-new-window', function () {
-          casper.click('.js-new-window');
-        });
-      })
-
-      .then(function () {
-        casper.withPopup(/Simplest\.java/, function () {
-          this.test.assertUrlMatch('test:fake-project-for-tests:src/main/java/foo/Simplest.java');
-        });
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-open-in-new-window/api-components-app.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-open-in-new-window/api-components-app.json
deleted file mode 100644 (file)
index 5af670f..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-  "uuid": "12345",
-  "key": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
-  "path": "src/main/java/foo/Simplest.java",
-  "name": "Simplest.java",
-  "longName": "src/main/java/foo/Simplest.java",
-  "q": "FIL",
-  "project": "test:fake-project-for-tests",
-  "projectName": "Fake Project for Tests",
-  "fav": false,
-  "canMarkAsFavourite": true,
-  "canCreateManualIssue": true,
-  "measures": {
-    "lines": "8",
-    "coverage": "75.0%",
-    "debt": "44min",
-    "sqaleRating": "C",
-    "debtRatio": "18.3%",
-    "issues": "5"
-  }
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-open-in-new-window/api-issues-search.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-open-in-new-window/api-issues-search.json
deleted file mode 100644 (file)
index 73d6a9f..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-{
-  "total": 5,
-  "p": 1,
-  "ps": 100,
-  "projects": [
-    {
-      "uuid": "e07e9bed-f45d-4538-a5e8-77031c1ecae7",
-      "key": "test:fake-project-for-tests",
-      "id": 36125,
-      "qualifier": "TRK",
-      "name": "Fake Project for Tests",
-      "longName": "Fake Project for Tests"
-    }
-  ],
-  "components": [
-    {
-      "uuid": "b4248001-df0c-436a-8acd-a152809b8a23",
-      "key": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
-      "id": 36129,
-      "enabled": true,
-      "qualifier": "FIL",
-      "name": "Simplest.java",
-      "longName": "src/main/java/foo/Simplest.java",
-      "path": "src/main/java/foo/Simplest.java",
-      "projectId": 36125,
-      "subProjectId": 36125
-    },
-    {
-      "uuid": "e07e9bed-f45d-4538-a5e8-77031c1ecae7",
-      "key": "test:fake-project-for-tests",
-      "id": 36125,
-      "enabled": true,
-      "qualifier": "TRK",
-      "name": "Fake Project for Tests",
-      "longName": "Fake Project for Tests"
-    }
-  ],
-  "issues": [
-    {
-      "key": "91b13078-6f69-4b51-ab0f-8fd0bc391532",
-      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
-      "componentId": 36129,
-      "project": "test:fake-project-for-tests",
-      "rule": "squid:S00105",
-      "status": "OPEN",
-      "severity": "MINOR",
-      "message": "Replace all tab characters in this file by sequences of white-spaces.",
-      "debt": "2min",
-      "creationDate": "2014-12-09T10:47:33+0100",
-      "updateDate": "2014-12-09T10:47:33+0100",
-      "fUpdateAge": "3 hours",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "c18ae6fa-fac7-46b5-bd71-feef7906b05a",
-      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
-      "componentId": 36129,
-      "project": "test:fake-project-for-tests",
-      "rule": "squid:S1118",
-      "status": "OPEN",
-      "severity": "MAJOR",
-      "message": "Add a private constructor to hide the implicit public one.",
-      "line": 6,
-      "debt": "30min",
-      "creationDate": "2014-12-09T10:47:33+0100",
-      "updateDate": "2014-12-09T10:47:33+0100",
-      "fUpdateAge": "3 hours",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "816282ec-0ca9-4d03-b8bc-22b515496fe4",
-      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
-      "componentId": 36129,
-      "project": "test:fake-project-for-tests",
-      "rule": "squid:IndentationCheck",
-      "status": "OPEN",
-      "severity": "MAJOR",
-      "message": "Make this line start at column 3.",
-      "line": 8,
-      "debt": "1min",
-      "creationDate": "2014-12-09T10:47:33+0100",
-      "updateDate": "2014-12-09T10:47:33+0100",
-      "fUpdateAge": "3 hours",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "0229497b-a613-48f3-83ed-2b98983e5e60",
-      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
-      "componentId": 36129,
-      "project": "test:fake-project-for-tests",
-      "rule": "squid:IndentationCheck",
-      "status": "OPEN",
-      "severity": "MAJOR",
-      "message": "Make this line start at column 5.",
-      "line": 10,
-      "debt": "1min",
-      "creationDate": "2014-12-09T10:47:33+0100",
-      "updateDate": "2014-12-09T10:47:33+0100",
-      "fUpdateAge": "3 hours",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ]
-    },
-    {
-      "key": "896ccfe0-bb85-4155-be1f-1aaece716539",
-      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
-      "componentId": 36129,
-      "project": "test:fake-project-for-tests",
-      "rule": "squid:S106",
-      "status": "OPEN",
-      "severity": "MAJOR",
-      "message": "Replace this usage of System.out or System.err by a logger.",
-      "line": 12,
-      "debt": "10min",
-      "creationDate": "2014-12-09T10:47:33+0100",
-      "updateDate": "2014-12-09T10:47:33+0100",
-      "fUpdateAge": "3 hours",
-      "actions": [
-        "comment",
-        "assign",
-        "assign_to_me",
-        "plan",
-        "set_severity"
-      ],
-      "transitions": [
-        "confirm",
-        "resolve",
-        "falsepositive"
-      ]
-    }
-  ],
-  "rules": [
-    {
-      "key": "squid:IndentationCheck",
-      "name": "Source code should be correctly indented",
-      "lang": "java",
-      "desc": "<p>\nProper indentation is a simple and effective way to improve the code's readability.\nConsistent indentation among developers also reduces the differences that are committed to source control systems, making code reviews easier.\n</p>\n\n<p>The following code illustrates this rule with an indentation level of 2:</p>\n\n<pre>\nclass Foo {\n  public int a; // Compliant\npublic int b;   // Non-Compliant\n}\n</pre>",
-      "status": "READY",
-      "langName": "Java"
-    },
-    {
-      "key": "squid:S1118",
-      "name": "Utility classes should not have a public constructor",
-      "lang": "java",
-      "desc": "<p>\nUtility classes, which are a collection of static members, are not meant to be instantiated.\nThey should therefore not have public constructors.\n</p>\n\n<p>\nJava adds an implicit public constructor to every class which does not define at least one explicitly.\nHence, at least one non-public constructor should be defined.\n</p>\n\n<p>The following code:</p>\n\n<pre>\nclass StringUtils { // Non-Compliant\n\n  public static String concatenate(String s1, String s2) {\n    return s1 + s2;\n  }\n\n}\n</pre>\n\n<p>should be refactored into:</p>\n\n<pre>\nclass StringUtils { // Compliant\n\n  private StringUtils() {\n  }\n\n  public static String concatenate(String s1, String s2) {\n    return s1 + s2;\n  }\n\n}\n</pre>",
-      "status": "READY",
-      "langName": "Java"
-    },
-    {
-      "key": "squid:S00105",
-      "name": "Tabulation characters should not be used",
-      "lang": "java",
-      "desc": "<p>\nDevelopers should not need to configure the tab width of their text editors in order to be able to read source code.\nSo the use of tabulation character must be banned.\n</p>",
-      "status": "READY",
-      "langName": "Java"
-    },
-    {
-      "key": "squid:S106",
-      "name": "System.out and System.err should not be used as loggers",
-      "lang": "java",
-      "desc": "<p>Two important requirements must be fulfilled when logging messages:</p>\n\n<ul>\n  <li>The user must be able to easily retrieve the logs.</li>\n  <li>The format of all messages must be uniform to enable users to easily browse them.</li>\n</ul>\n\n<p>\nIf a program directly writes to the standard output, there is absolutely no way to comply with these requirements.\nThat's why defining and using a dedicated logger is highly recommended.\n</p>\n\n<p>\nThe following code snippet illustrates this rule:\n</p>\n\n<pre>\nSystem.out.println(\"My Message\");  // Non-Compliant\n\nlogger.log(\"My Message\");          // Compliant\n</pre>",
-      "status": "READY",
-      "langName": "Java"
-    }
-  ],
-  "users": [
-    {
-      "login": "admin",
-      "name": "Admin Admin",
-      "active": true,
-      "email": "admin@sonarsource.com"
-    }
-  ],
-  "languages": [
-    {
-      "key": "js",
-      "name": "JavaScript"
-    },
-    {
-      "key": "java",
-      "name": "Java"
-    }
-  ],
-  "maxResultsReached": false,
-  "paging": {
-    "pageIndex": 1,
-    "pageSize": 100,
-    "total": 5,
-    "fTotal": "5",
-    "pages": 1
-  }
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-open-in-new-window/api-sources-lines.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-should-open-in-new-window/api-sources-lines.json
deleted file mode 100644 (file)
index b095d82..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-{
-  "sources": [
-    {
-      "line": 1,
-      "code": "<span class=\"k\">package </span>foo;",
-      "scmAuthor": "fabrice.bellingard@sonarsource.com",
-      "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
-      "scmDate": "2013-09-16T15:31:49+0200"
-    },
-    {
-      "line": 2,
-      "code": "",
-      "scmAuthor": "fabrice.bellingard@sonarsource.com",
-      "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
-      "scmDate": "2013-09-16T15:31:49+0200"
-    },
-    {
-      "line": 3,
-      "code": "<span class=\"cppd\">/**</span>",
-      "scmAuthor": "fabrice.bellingard@sonarsource.com",
-      "scmRevision": "37acee5ff6e67cdb501c08a656fbabf21160b052",
-      "scmDate": "2013-09-19T15:37:05+0200"
-    },
-    {
-      "line": 4,
-      "code": "<span class=\"cppd\"> * Simple class</span>",
-      "scmAuthor": "fabrice.bellingard@sonarsource.com",
-      "scmRevision": "37acee5ff6e67cdb501c08a656fbabf21160b052",
-      "scmDate": "2013-09-19T15:37:05+0200"
-    },
-    {
-      "line": 5,
-      "code": "<span class=\"cppd\"> */</span>",
-      "scmAuthor": "fabrice.bellingard@sonarsource.com",
-      "scmRevision": "37acee5ff6e67cdb501c08a656fbabf21160b052",
-      "scmDate": "2013-09-19T15:37:05+0200"
-    },
-    {
-      "line": 6,
-      "code": "<span class=\"k\">public </span><span class=\"k\">class </span><span class=\"sym-1 sym\">Simplest</span> {",
-      "scmAuthor": "fabrice.bellingard@sonarsource.com",
-      "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
-      "scmDate": "2013-09-16T15:31:49+0200"
-    },
-    {
-      "line": 7,
-      "code": "",
-      "scmAuthor": "fabrice.bellingard@sonarsource.com",
-      "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
-      "scmDate": "2013-09-16T15:31:49+0200"
-    },
-    {
-      "line": 8,
-      "code": "    <span class=\"k\">public </span><span class=\"k\">static </span><span class=\"k\">int </span><span class=\"sym-2 sym\">add</span>(<span class=\"k\">int </span><span class=\"sym-3 sym\">a</span>, <span class=\"k\">int </span><span class=\"sym-4 sym\">b</span>) {",
-      "scmAuthor": "fabrice.bellingard@sonarsource.com",
-      "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
-      "scmDate": "2013-09-16T15:31:49+0200"
-    },
-    {
-      "line": 9,
-      "code": "    \t<span class=\"cppd\">// introduce a variable that is not needed - just to get a violation</span>",
-      "scmAuthor": "fabrice.bellingard@sonarsource.com",
-      "scmRevision": "322e4e8b3cb54a39651f563273745e6ee737fb3e",
-      "scmDate": "2013-10-15T16:14:22+0200"
-    },
-    {
-      "line": 10,
-      "code": "    \t<span class=\"k\">int </span><span class=\"sym-5 sym\">result</span> = <span class=\"sym-3 sym\">a</span> + <span class=\"sym-4 sym\">b</span>;",
-      "scmAuthor": "fabrice.bellingard@sonarsource.com",
-      "scmRevision": "322e4e8b3cb54a39651f563273745e6ee737fb3e",
-      "scmDate": "2013-10-15T16:14:22+0200"
-    },
-    {
-      "line": 11,
-      "code": "",
-      "scmAuthor": "fabrice.bellingard@sonarsource.com",
-      "scmRevision": "44e0c5b4fc18a006a405d3f3d489896245fab3d1",
-      "scmDate": "2014-01-09T16:48:59+0100"
-    },
-    {
-      "line": 12,
-      "code": "    \tSystem.out.println(<span class=\"s\">\"\"</span>);",
-      "scmAuthor": "fabrice.bellingard@sonarsource.com",
-      "scmRevision": "44e0c5b4fc18a006a405d3f3d489896245fab3d1",
-      "scmDate": "2014-01-09T16:48:59+0100"
-    },
-    {
-      "line": 13,
-      "code": "",
-      "scmAuthor": "fabrice.bellingard@sonarsource.com",
-      "scmRevision": "44e0c5b4fc18a006a405d3f3d489896245fab3d1",
-      "scmDate": "2014-01-09T16:48:59+0100"
-    },
-    {
-      "line": 14,
-      "code": "        <span class=\"k\">return </span><span class=\"sym-5 sym\">result</span>;",
-      "scmAuthor": "fabrice.bellingard@sonarsource.com",
-      "scmRevision": "322e4e8b3cb54a39651f563273745e6ee737fb3e",
-      "scmDate": "2013-10-15T16:14:22+0200"
-    },
-    {
-      "line": 15,
-      "code": "    }",
-      "scmAuthor": "fabrice.bellingard@sonarsource.com",
-      "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
-      "scmDate": "2013-09-16T15:31:49+0200"
-    },
-    {
-      "line": 16,
-      "code": "",
-      "scmAuthor": "fabrice.bellingard@sonarsource.com",
-      "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
-      "scmDate": "2013-09-16T15:31:49+0200"
-    },
-    {
-      "line": 17,
-      "code": "}",
-      "scmAuthor": "fabrice.bellingard@sonarsource.com",
-      "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
-      "scmDate": "2013-09-16T15:31:49+0200"
-    },
-    {
-      "line": 18,
-      "code": "",
-      "scmAuthor": "fabrice.bellingard@sonarsource.com",
-      "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
-      "scmDate": "2013-09-16T15:31:49+0200"
-    }
-  ]
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec.js b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec.js
deleted file mode 100644 (file)
index d707894..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* global casper:false */
-
-
-var lib = require('../lib'),
-    testName = lib.testName('Source Viewer');
-
-lib.initMessages();
-lib.changeWorkingDirectory('source-viewer-spec');
-lib.configureCasper();
-
-
-casper.test.begin(testName('Base'), function (test) {
-  casper
-      .start(lib.buildUrl('source-viewer'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/components/app', 'app.json');
-        lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
-        lib.mockRequestFromFile('/api/issues/search', 'issues.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.source-line', function () {
-          // Check header elements
-          test.assertExists('.source-viewer-header');
-          test.assertSelectorContains('.source-viewer-header', 'SonarQube');
-          test.assertSelectorContains('.source-viewer-header', 'SonarQube :: Batch');
-          test.assertSelectorContains('.source-viewer-header', 'src/main/java/org/sonar/batch/index/Cache.java');
-          test.assertExists('.source-viewer-header .js-favorite');
-          test.assertExists('.source-viewer-header-actions');
-
-          // Check main measures
-          // FIXME enable lines check
-          //test.assertSelectorContains('.source-viewer-header-measure', '379');
-          test.assertSelectorContains('.source-viewer-header-measure', 'A');
-          test.assertSelectorContains('.source-viewer-header-measure', '2h 10min');
-          test.assertSelectorContains('.source-viewer-header-measure', '6');
-          test.assertSelectorContains('.source-viewer-header-measure', '74.3%');
-          test.assertSelectorContains('.source-viewer-header-measure', '5.8%');
-
-          // Check source
-          // FIXME enable source lines count check
-          //test.assertElementCount('.source-line', 518);
-          test.assertSelectorContains('.source-viewer', 'public class Cache');
-        });
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
-
-
-casper.test.begin(testName('Decoration'), function (test) {
-  casper
-      .start(lib.buildUrl('source-viewer'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/components/app', 'app.json');
-        lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
-        lib.mockRequestFromFile('/api/issues/search', 'issues.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.source-line');
-      })
-
-      .then(function () {
-        // Check issues decoration
-        test.assertElementCount('.has-issues', 6);
-      })
-
-      .then(function () {
-        // Check coverage decoration
-        test.assertElementCount('.source-line-covered', 142);
-        test.assertElementCount('.source-line-uncovered', 50);
-        test.assertElementCount('.source-line-partially-covered', 2);
-      })
-
-      .then(function () {
-        // Check duplications decoration
-        test.assertElementCount('.source-line-duplicated', 30);
-      })
-
-      .then(function () {
-        // Check scm decoration
-        test.assertElementCount('.source-line-scm-inner', 186);
-        test.assertExists('.source-line-scm-inner[data-author="simon.brandhof@gmail.com"]');
-        test.assertExists('.source-line-scm-inner[data-author="julien.henry@sonarsource.com"]');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
-
-
-casper.test.begin(testName('Test File'), function (test) {
-  casper
-      .start(lib.buildUrl('source-viewer'), function () {
-        lib.setDefaultViewport();
-
-        lib.mockRequest('/api/l10n/index', '{}');
-        lib.mockRequestFromFile('/api/components/app', 'tests/app.json');
-        lib.mockRequestFromFile('/api/sources/lines', 'tests/lines.json');
-        lib.mockRequestFromFile('/api/issues/search', 'issues.json');
-      })
-
-      .then(function () {
-        casper.waitForSelector('.source-line');
-      })
-
-      .then(function () {
-        test.assertSelectorContains('.source-viewer-header-measure', '6');
-      })
-
-      .run(function () {
-        test.done();
-      });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/app-not-logged-in.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/app-not-logged-in.json
deleted file mode 100644 (file)
index e8b7516..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "uuid": "12345",
-  "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-  "path": "src/main/java/org/sonar/batch/index/Cache.java",
-  "name": "Cache.java",
-  "longName": "src/main/java/org/sonar/batch/index/Cache.java",
-  "q": "FIL",
-  "subProject": "org.codehaus.sonar:sonar-batch",
-  "subProjectName": "SonarQube :: Batch",
-  "project": "org.codehaus.sonar:sonar",
-  "projectName": "SonarQube",
-  "fav": false,
-  "canMarkAsFavourite": false,
-  "canCreateManualIssue": false,
-  "measures": {
-    "lines": "378",
-    "coverage": "74.3%",
-    "duplicationDensity": "5.8%",
-    "debt": "2h 10min",
-    "sqaleRating": "A",
-    "debtRatio": "1.1%",
-    "issues": "6"
-  }
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/app.json
deleted file mode 100644 (file)
index dd6a3fb..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "uuid": "12345",
-  "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-  "path": "src/main/java/org/sonar/batch/index/Cache.java",
-  "name": "Cache.java",
-  "longName": "src/main/java/org/sonar/batch/index/Cache.java",
-  "q": "FIL",
-  "subProject": "org.codehaus.sonar:sonar-batch",
-  "subProjectName": "SonarQube :: Batch",
-  "project": "org.codehaus.sonar:sonar",
-  "projectName": "SonarQube",
-  "fav": false,
-  "canMarkAsFavourite": true,
-  "canCreateManualIssue": true,
-  "measures": {
-    "lines": "378",
-    "coverage": "74.3%",
-    "duplicationDensity": "5.8%",
-    "debt": "2h 10min",
-    "sqaleRating": "A",
-    "debtRatio": "1.1%",
-    "issues": "6"
-  }
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/coverage.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/coverage.json
deleted file mode 100644 (file)
index ace41da..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-{"coverage": [
-  [46, true, 32, null, null],
-  [47, true, 32, null, null],
-  [48, true, 32, null, null],
-  [49, true, 32, null, null],
-  [52, true, 2, null, null],
-  [53, true, 2, null, null],
-  [57, true, 18, null, null],
-  [58, true, 18, null, null],
-  [62, true, 13, null, null],
-  [63, true, 13, null, null],
-  [67, false, null, null, null],
-  [68, false, null, null, null],
-  [73, true, 27, null, null],
-  [74, true, 27, null, null],
-  [75, true, 27, null, null],
-  [76, true, 1, null, null],
-  [77, true, 1, null, null],
-  [85, true, 5, null, null],
-  [86, true, 5, null, null],
-  [94, true, 10, null, null],
-  [95, true, 10, null, null],
-  [103, true, 11, null, null],
-  [104, true, 11, null, null],
-  [112, false, null, null, null],
-  [113, false, null, null, null],
-  [120, true, 17, null, null],
-  [121, true, 17, 2, 2],
-  [122, true, 8, null, null],
-  [124, true, 13, null, null],
-  [125, false, null, null, null],
-  [127, false, null, null, null],
-  [132, true, 4, null, null],
-  [133, true, 4, null, null],
-  [137, true, 3, null, null],
-  [138, true, 3, null, null],
-  [142, true, 5, null, null],
-  [143, true, 5, null, null],
-  [147, false, null, null, null],
-  [148, false, null, null, null],
-  [153, true, 7, null, null],
-  [154, true, 7, null, null],
-  [155, false, null, null, null],
-  [157, false, null, null, null],
-  [162, true, 3, null, null],
-  [163, true, 3, null, null],
-  [167, true, 3, null, null],
-  [168, true, 3, null, null],
-  [172, true, 2, null, null],
-  [173, true, 2, null, null],
-  [177, false, null, null, null],
-  [178, false, null, null, null],
-  [183, true, 6, null, null],
-  [184, false, null, null, null],
-  [186, false, null, null, null],
-  [196, true, 5, null, null],
-  [197, true, 5, null, null],
-  [201, true, 2, null, null],
-  [202, true, 2, null, null],
-  [206, true, 1, null, null],
-  [207, true, 1, null, null],
-  [211, false, null, null, null],
-  [212, false, null, null, null],
-  [217, true, 5, null, null],
-  [218, true, 5, null, null],
-  [219, true, 5, null, null],
-  [220, true, 5, null, null],
-  [221, false, null, null, null],
-  [222, false, null, null, null],
-  [231, true, 4, null, null],
-  [232, true, 4, null, null],
-  [233, false, null, null, null],
-  [234, false, null, null, null],
-  [235, true, 4, null, null],
-  [236, true, 4, null, null],
-  [248, true, 4, null, null],
-  [249, true, 4, null, null],
-  [250, true, 4, null, null],
-  [251, true, 4, null, null],
-  [252, true, 4, null, null],
-  [253, true, 4, 2, 2],
-  [254, true, 2, null, null],
-  [256, true, 4, null, null],
-  [257, false, null, null, null],
-  [258, false, null, null, null],
-  [265, true, 1, null, null],
-  [266, true, 1, null, null],
-  [267, true, 1, null, null],
-  [268, true, 1, null, null],
-  [269, true, 1, null, null],
-  [270, true, 1, null, null],
-  [271, true, 1, 2, 2],
-  [272, true, 1, null, null],
-  [274, true, 1, null, null],
-  [275, false, null, null, null],
-  [276, false, null, null, null],
-  [287, true, 4, null, null],
-  [288, true, 4, null, null],
-  [289, true, 4, null, null],
-  [290, true, 4, null, null],
-  [291, true, 4, 2, 2],
-  [292, true, 3, null, null],
-  [294, true, 4, null, null],
-  [295, false, null, null, null],
-  [296, false, null, null, null],
-  [305, true, 1, null, null],
-  [306, true, 1, null, null],
-  [307, true, 1, null, null],
-  [308, true, 1, null, null],
-  [309, true, 1, null, null],
-  [310, false, null, null, null],
-  [311, false, null, null, null],
-  [316, false, null, null, null],
-  [324, true, 23, null, null],
-  [325, true, 23, null, null],
-  [326, true, 23, null, null],
-  [327, true, 23, null, null],
-  [328, true, 23, null, null],
-  [329, false, null, null, null],
-  [330, false, null, null, null],
-  [339, true, 16, null, null],
-  [340, true, 16, null, null],
-  [341, true, 16, null, null],
-  [342, true, 16, null, null],
-  [343, false, null, null, null],
-  [344, false, null, null, null],
-  [349, true, 9, null, null],
-  [350, true, 9, null, null],
-  [351, true, 9, null, null],
-  [355, true, 3, null, null],
-  [356, true, 3, null, null],
-  [357, true, 3, null, null],
-  [361, true, 7, null, null],
-  [362, true, 7, null, null],
-  [363, true, 7, null, null],
-  [366, true, 20, null, null],
-  [367, true, 20, null, null],
-  [368, true, 20, null, null],
-  [371, true, 18, null, null],
-  [372, true, 18, null, null],
-  [373, true, 18, null, null],
-  [376, false, null, null, null],
-  [377, false, null, 2, 0],
-  [378, false, null, null, null],
-  [380, false, null, null, null],
-  [389, true, 26, null, null],
-  [390, true, 26, null, null],
-  [391, true, 26, null, null],
-  [395, true, 26, null, null],
-  [403, true, 26, null, null],
-  [404, true, 26, null, null],
-  [405, true, 26, null, null],
-  [406, true, 26, null, null],
-  [411, true, 25, null, null],
-  [412, false, null, null, null],
-  [413, false, null, null, null],
-  [421, true, 23, null, null],
-  [422, false, null, null, null],
-  [423, false, null, null, null],
-  [424, true, 23, null, null],
-  [425, true, 23, 2, 1],
-  [426, true, 23, null, null],
-  [428, false, null, null, null],
-  [433, false, null, null, null],
-  [440, true, 10, null, null],
-  [441, true, 10, null, null],
-  [442, true, 10, null, null],
-  [446, true, 10, null, null],
-  [454, true, 10, null, null],
-  [455, true, 10, null, null],
-  [456, true, 10, null, null],
-  [457, true, 10, null, null],
-  [462, true, 10, null, null],
-  [463, false, null, null, null],
-  [464, false, null, null, null],
-  [472, true, 9, null, null],
-  [473, false, null, null, null],
-  [474, false, null, null, null],
-  [475, true, 9, null, null],
-  [476, true, 9, 2, 1],
-  [477, true, 9, null, null],
-  [478, true, 9, null, null],
-  [479, true, 9, null, null],
-  [480, true, 9, 2, 2],
-  [481, true, 9, null, null],
-  [483, true, 9, null, null],
-  [485, false, null, null, null],
-  [490, false, null, null, null],
-  [498, true, 16, null, null],
-  [499, true, 16, null, null],
-  [500, true, 16, null, null],
-  [501, true, 16, null, null],
-  [504, true, 14, null, null],
-  [509, true, 14, null, null],
-  [514, false, null, null, null]
-]}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/cross-project-duplications.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/cross-project-duplications.json
deleted file mode 100644 (file)
index cd445d5..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-{"duplications": [
-  {
-    "blocks": [
-      {
-        "from": 404,
-        "size": 15,
-        "_ref": "1"
-      },
-      {
-        "from": 455,
-        "size": 15,
-        "_ref": "2"
-      }
-    ]
-  }
-], "files": {
-  "1": {
-    "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "name": "src/main/java/org/sonar/batch/index/Cache.java",
-    "project": "org.codehaus.sonar:sonar",
-    "projectName": "SonarQube",
-    "subProject": "org.codehaus.sonar:sonar-batch",
-    "subProjectName": "SonarQube :: Batch"
-  },
-  "2": {
-    "key": "org.codehaus.sonar-plugins.javascript:sonar-javascript-plugin:src/main/java/org/sonar/plugins/javascript/core/JavaScript.java",
-    "name": "src/main/java/org/sonar/plugins/javascript/core/JavaScript.java",
-    "project": "org.codehaus.sonar-plugins.javascript:javascript",
-    "projectName": "JavaScript",
-    "subProject": "org.codehaus.sonar-plugins.javascript:sonar-javascript-plugin",
-    "subProjectName": "JavaScript :: Sonar Plugin"
-  }
-}}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/duplications-in-deleted-files.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/duplications-in-deleted-files.json
deleted file mode 100644 (file)
index 9de23d1..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-{"duplications": [
-  {
-    "blocks": [
-      {
-        "from": 404,
-        "size": 15,
-        "_ref": "1"
-      },
-      {
-        "from": 455,
-        "size": 15
-      }
-    ]
-  }
-], "files": {
-  "1": {
-    "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "name": "src/main/java/org/sonar/batch/index/Cache.java",
-    "project": "org.codehaus.sonar:sonar",
-    "projectName": "SonarQube",
-    "subProject": "org.codehaus.sonar:sonar-batch",
-    "subProjectName": "SonarQube :: Batch"
-  }
-}}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/duplications.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/duplications.json
deleted file mode 100644 (file)
index f77e92b..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-{"duplications": [
-  {
-    "blocks": [
-      {
-        "from": 404,
-        "size": 15,
-        "_ref": "1"
-      },
-      {
-        "from": 455,
-        "size": 15,
-        "_ref": "1"
-      }
-    ]
-  }
-], "files": {
-  "1": {
-    "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "name": "src/main/java/org/sonar/batch/index/Cache.java",
-    "project": "org.codehaus.sonar:sonar",
-    "projectName": "SonarQube",
-    "subProject": "org.codehaus.sonar:sonar-batch",
-    "subProjectName": "SonarQube :: Batch"
-  }
-}}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/issues.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/issues.json
deleted file mode 100644 (file)
index 0b16011..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-{"total": 6, "p": 1, "ps": 100, "projects": [
-  {
-    "uuid": "69e57151-be0d-4157-adff-c06741d88879",
-    "key": "org.codehaus.sonar:sonar",
-    "id": 2865,
-    "qualifier": "TRK",
-    "name": "SonarQube",
-    "longName": "SonarQube"
-  }
-], "components": [
-  {
-    "uuid": "83379565-7af3-4047-8d1a-ed42b10309b0",
-    "key": "org.codehaus.sonar:sonar-batch",
-    "id": 1624,
-    "enabled": true,
-    "qualifier": "BRC",
-    "name": "SonarQube :: Batch",
-    "longName": "SonarQube :: Batch",
-    "path": "sonar-batch",
-    "projectId": 2865,
-    "subProjectId": 2865
-  },
-  {
-    "uuid": "69e57151-be0d-4157-adff-c06741d88879",
-    "key": "org.codehaus.sonar:sonar",
-    "id": 2865,
-    "enabled": true,
-    "qualifier": "TRK",
-    "name": "SonarQube",
-    "longName": "SonarQube"
-  },
-  {
-    "uuid": "b9615992-2458-4d54-a22f-b91ee7ba5bc5",
-    "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "id": 19983,
-    "enabled": true,
-    "qualifier": "FIL",
-    "name": "Cache.java",
-    "longName": "src/main/java/org/sonar/batch/index/Cache.java",
-    "path": "src/main/java/org/sonar/batch/index/Cache.java",
-    "projectId": 2865,
-    "subProjectId": 1624
-  }
-], "issues": [
-  {
-    "key": "20002ec7-b647-44da-bdf5-4d9fbf4b7c58",
-    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "componentId": 19983,
-    "project": "org.codehaus.sonar:sonar",
-    "subProject": "org.codehaus.sonar:sonar-batch",
-    "rule": "common-java:DuplicatedBlocks",
-    "status": "CONFIRMED",
-    "severity": "MAJOR",
-    "message": "2 duplicated blocks of code.",
-    "debt": "2h",
-    "creationDate": "2014-05-01T23:38:31+0200",
-    "updateDate": "2014-07-01T17:48:47+0200",
-    "fUpdateAge": "5 months",
-    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
-    "transitions": ["unconfirm", "resolve", "falsepositive"]
-  },
-  {
-    "key": "71a26f48-a90d-4a76-a745-4f6e6e8b1773",
-    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "componentId": 19983,
-    "project": "org.codehaus.sonar:sonar",
-    "subProject": "org.codehaus.sonar:sonar-batch",
-    "rule": "squid:S1135",
-    "status": "CONFIRMED",
-    "severity": "INFO",
-    "message": "Complete the task associated to this TODO comment.",
-    "line": 125,
-    "author": "simon.brandhof@gmail.com",
-    "creationDate": "2013-10-10T23:51:33+0200",
-    "updateDate": "2014-07-29T23:15:18+0200",
-    "fUpdateAge": "4 months",
-    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
-    "transitions": ["unconfirm", "resolve", "falsepositive"]
-  },
-  {
-    "key": "75419c88-0e3c-4311-aa47-fe5731e67558",
-    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "componentId": 19983,
-    "project": "org.codehaus.sonar:sonar",
-    "subProject": "org.codehaus.sonar:sonar-batch",
-    "rule": "squid:S1135",
-    "status": "CONFIRMED",
-    "severity": "INFO",
-    "message": "Complete the task associated to this TODO comment.",
-    "line": 155,
-    "author": "simon.brandhof@gmail.com",
-    "creationDate": "2013-10-10T23:51:33+0200",
-    "updateDate": "2014-07-29T23:15:18+0200",
-    "fUpdateAge": "4 months",
-    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
-    "transitions": ["unconfirm", "resolve", "falsepositive"]
-  },
-  {
-    "key": "01461208-6c1e-4cdf-9f27-b7afa78e76ec",
-    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "componentId": 19983,
-    "project": "org.codehaus.sonar:sonar",
-    "subProject": "org.codehaus.sonar:sonar-batch",
-    "rule": "squid:S1135",
-    "status": "CONFIRMED",
-    "severity": "INFO",
-    "message": "Complete the task associated to this TODO comment.",
-    "line": 184,
-    "author": "simon.brandhof@gmail.com",
-    "creationDate": "2013-10-10T23:51:33+0200",
-    "updateDate": "2014-07-29T23:15:18+0200",
-    "fUpdateAge": "4 months",
-    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
-    "transitions": ["unconfirm", "resolve", "falsepositive"]
-  },
-  {
-    "key": "e4de6481-7bfb-460a-8b3c-24459f9561d3",
-    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "componentId": 19983,
-    "project": "org.codehaus.sonar:sonar",
-    "subProject": "org.codehaus.sonar:sonar-batch",
-    "rule": "squid:S1135",
-    "status": "CONFIRMED",
-    "severity": "INFO",
-    "message": "Complete the task associated to this TODO comment.",
-    "line": 239,
-    "author": "Simon Brandhof",
-    "creationDate": "2013-08-09T16:04:33+0200",
-    "updateDate": "2014-07-29T23:15:18+0200",
-    "fUpdateAge": "4 months",
-    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
-    "transitions": ["unconfirm", "resolve", "falsepositive"]
-  },
-  {
-    "key": "59fc17f7-c977-4cb6-8f04-fbe88e4b9186",
-    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "componentId": 19983,
-    "project": "org.codehaus.sonar:sonar",
-    "subProject": "org.codehaus.sonar:sonar-batch",
-    "rule": "squid:S1192",
-    "status": "CONFIRMED",
-    "severity": "MINOR",
-    "message": "Define a constant instead of duplicating this literal \"Fail to get keys from cache \" 3 times.",
-    "line": 257,
-    "debt": "10min",
-    "author": "simon.brandhof@gmail.com",
-    "creationDate": "2014-02-20T07:48:16+0100",
-    "updateDate": "2014-02-24T16:57:34+0100",
-    "fUpdateAge": "9 months",
-    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
-    "transitions": ["unconfirm", "resolve", "falsepositive"]
-  }
-], "rules": [
-  {
-    "key": "common-java:DuplicatedBlocks",
-    "name": "Duplicated blocks",
-    "lang": "java",
-    "desc": "<p>An issue is created on a file as soon as there is a block of duplicated code on this file. It gives the number of blocks in the file.</p>",
-    "status": "READY",
-    "langName": "Java"
-  },
-  {
-    "key": "squid:S1192",
-    "name": "String literals should not be duplicated",
-    "lang": "java",
-    "desc": "<p>\n  Duplicated string literals make the process of refactoring error-prone, since you must be sure to update all occurrences.\n  On the other hand, constants can be referenced from many places, but only need to be updated in a single place.\n</p>\n\n<h2>Non Compliant Code Example</h2>\n\n<pre>\npublic void run() {\n  prepare(\"action1\");                              // Non-Compliant - \"action1\" is duplicated 3 times\n  execute(\"action1\");\n  release(\"action1\");\n}\n\n@SuppressWarning(\"all\")                            // Compliant - annotations are excluded\nprivate void method1() { /* ... */ }\n@SuppressWarning(\"all\")\nprivate void method2() { /* ... */ }\n\npublic String method3(String a) {\n  System.out.println(\"'\" + a + \"'\");               // Compliant - literal \"'\" has less than 5 characters and is excluded\n  return \"\";                                       // Compliant - literal \"\" has less than 5 characters and is excluded\n}\n</pre>\n\n<h2>Compliant Code Example</h2>\n\n<pre>\nprivate static final String ACTION_1 = \"action1\";  // Compliant\n\npublic void run() {\n  prepare(ACTION_1);                               // Compliant\n  execute(ACTION_1);\n  release(ACTION_1);\n}\n</pre>\n\n<h2>Exceptions</h2>\n<p>To prevent generating some false-positives, literals having less than 5 characters are excluded.</p>",
-    "status": "READY",
-    "langName": "Java"
-  },
-  {
-    "key": "squid:S1135",
-    "name": "TODO tags should be handled",
-    "lang": "java",
-    "desc": "<p>\n<code>TODO</code> tags are commonly used to mark places where some more code is required, but which the developer wants to implement later.\nSometimes the developer will not have the time or will simply forget to get back to that tag.\nThis rule is meant to track those tags, and ensure that they do not go unnoticed.\n</p>\n\n<p>The following code illustrates this rule:</p>\n\n<pre>\nvoid doSomething() {\n  // TODO\n}\n</pre>",
-    "status": "READY",
-    "langName": "Java"
-  }
-], "users": [
-  {
-    "login": "admin",
-    "name": "Admin Admin",
-    "active": true,
-    "email": "admin@sonarsource.com"
-  }
-], "languages": [
-  {
-    "key": "js",
-    "name": "JavaScript"
-  },
-  {
-    "key": "java",
-    "name": "Java"
-  }
-], "maxResultsReached": false, "paging": {
-  "pageIndex": 1,
-  "pageSize": 100,
-  "total": 6,
-  "fTotal": "6",
-  "pages": 1
-}}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/lines.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/lines.json
deleted file mode 100644 (file)
index 2983d8e..0000000
+++ /dev/null
@@ -1,3868 +0,0 @@
-{"sources": [
-  {
-    "line": 1,
-    "code": "<span class=\"cppd\">/*</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 2,
-    "code": "<span class=\"cppd\"> * SonarQube, open source software quality management tool.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
-    "scmDate": "2013-04-21T11:58:14+0200"
-  },
-  {
-    "line": 3,
-    "code": "<span class=\"cppd\"> * Copyright (C) 2008-2014 SonarSource</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "57ae3026c36ae3b0b71756d6161124b1ae594c53",
-    "scmDate": "2014-03-11T17:52:41+0100"
-  },
-  {
-    "line": 4,
-    "code": "<span class=\"cppd\"> * mailto:contact AT sonarsource DOT com</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 5,
-    "code": "<span class=\"cppd\"> *</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 6,
-    "code": "<span class=\"cppd\"> * SonarQube is free software; you can redistribute it and/or</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
-    "scmDate": "2013-04-21T11:58:14+0200"
-  },
-  {
-    "line": 7,
-    "code": "<span class=\"cppd\"> * modify it under the terms of the GNU Lesser General Public</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 8,
-    "code": "<span class=\"cppd\"> * License as published by the Free Software Foundation; either</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 9,
-    "code": "<span class=\"cppd\"> * version 3 of the License, or (at your option) any later version.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 10,
-    "code": "<span class=\"cppd\"> *</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 11,
-    "code": "<span class=\"cppd\"> * SonarQube is distributed in the hope that it will be useful,</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
-    "scmDate": "2013-04-21T11:58:14+0200"
-  },
-  {
-    "line": 12,
-    "code": "<span class=\"cppd\"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 13,
-    "code": "<span class=\"cppd\"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 14,
-    "code": "<span class=\"cppd\"> * Lesser General Public License for more details.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 15,
-    "code": "<span class=\"cppd\"> *</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 16,
-    "code": "<span class=\"cppd\"> * You should have received a copy of the GNU Lesser General Public License</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
-    "scmDate": "2013-04-22T09:37:03+0200"
-  },
-  {
-    "line": 17,
-    "code": "<span class=\"cppd\"> * along with this program; if not, write to the Free Software Foundation,</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
-    "scmDate": "2013-04-22T09:37:03+0200"
-  },
-  {
-    "line": 18,
-    "code": "<span class=\"cppd\"> * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
-    "scmDate": "2013-04-22T09:37:03+0200"
-  },
-  {
-    "line": 19,
-    "code": "<span class=\"cppd\"> */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 20,
-    "code": "<span class=\"k\">package</span> org.sonar.batch.index;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 21,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 22,
-    "code": "<span class=\"k\">import </span>com.google.common.collect.<span class=\"sym-1 sym\">Sets</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 23,
-    "code": "<span class=\"k\">import </span>com.persistit.<span class=\"sym-2 sym\">Exchange</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 24,
-    "code": "<span class=\"k\">import </span>com.persistit.<span class=\"sym-3 sym\">Key</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 25,
-    "code": "<span class=\"k\">import </span>com.persistit.<span class=\"sym-4 sym\">KeyFilter</span>;",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 26,
-    "code": "<span class=\"k\">import </span>com.persistit.exception.<span class=\"sym-5 sym\">PersistitException</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 27,
-    "code": "<span class=\"k\">import </span>org.apache.commons.lang.builder.<span class=\"sym-6 sym\">ToStringBuilder</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 28,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 29,
-    "code": "<span class=\"k\">import </span>javax.annotation.<span class=\"sym-7 sym\">CheckForNull</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 30,
-    "code": "",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 31,
-    "code": "<span class=\"k\">import </span>java.util.<span class=\"sym-8 sym\">Iterator</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 32,
-    "code": "<span class=\"k\">import </span>java.util.<span class=\"sym-9 sym\">NoSuchElementException</span>;",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 33,
-    "code": "<span class=\"k\">import </span>java.util.<span class=\"sym-10 sym\">Set</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 34,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 35,
-    "code": "<span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 36,
-    "code": "<span class=\"cppd\"> * &lt;p&gt;</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 37,
-    "code": "<span class=\"cppd\"> * This cache is not thread-safe, due to direct usage of {@link com.persistit.Exchange}</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 38,
-    "code": "<span class=\"cppd\"> * &lt;/p&gt;</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 39,
-    "code": "<span class=\"cppd\"> */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 40,
-    "code": "<span class=\"k\">public </span><span class=\"k\">class</span> <span class=\"sym-11 sym\">Cache</span>&lt;V&gt; {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
-    "scmDate": "2014-07-25T16:31:45+0200"
-  },
-  {
-    "line": 41,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 42,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">final </span>String <span class=\"sym-12 sym\">name</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 43,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-13 sym\">exchange</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 44,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 45,
-    "code": "  <span class=\"sym-14 sym\">Cache</span>(String <span class=\"sym-15 sym\">name</span>, <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-16 sym\">exchange</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 46,
-    "code": "    <span class=\"k\">this</span>.<span class=\"sym-12 sym\">name</span> = <span class=\"sym-15 sym\">name</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 47,
-    "code": "    <span class=\"k\">this</span>.<span class=\"sym-13 sym\">exchange</span> = <span class=\"sym-16 sym\">exchange</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 48,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 49,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 50,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-17 sym\">put</span>(Object <span class=\"sym-18 sym\">key</span>, V <span class=\"sym-19 sym\">value</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 51,
-    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-18 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 52,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-19 sym\">value</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 53,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 54,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 55,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-20 sym\">put</span>(Object <span class=\"sym-21 sym\">firstKey</span>, Object <span class=\"sym-22 sym\">secondKey</span>, V <span class=\"sym-23 sym\">value</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 56,
-    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-21 sym\">firstKey</span>, <span class=\"sym-22 sym\">secondKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 57,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-23 sym\">value</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 58,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 59,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 60,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-24 sym\">put</span>(Object <span class=\"sym-25 sym\">firstKey</span>, Object <span class=\"sym-26 sym\">secondKey</span>, Object <span class=\"sym-27 sym\">thirdKey</span>, V <span class=\"sym-28 sym\">value</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 61,
-    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-25 sym\">firstKey</span>, <span class=\"sym-26 sym\">secondKey</span>, <span class=\"sym-27 sym\">thirdKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 62,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-28 sym\">value</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 63,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 64,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 65,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-29 sym\">put</span>(Object[] <span class=\"sym-30 sym\">key</span>, V <span class=\"sym-31 sym\">value</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 66,
-    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-30 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 67,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-31 sym\">value</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 68,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 69,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 70,
-    "code": "  <span class=\"k\">private </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-32 sym\">doPut</span>(V <span class=\"sym-33 sym\">value</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 71,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 72,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.getValue().put(<span class=\"sym-33 sym\">value</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 73,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.store();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 74,
-    "code": "      <span class=\"k\">return</span> <span class=\"k\">this</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 75,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-34 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 76,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to put element in the cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-34 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 77,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 78,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 79,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 80,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 81,
-    "code": "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 82,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 83,
-    "code": "  <span class=\"k\">public </span>V <span class=\"sym-35 sym\">get</span>(Object <span class=\"sym-36 sym\">key</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 84,
-    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-36 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 85,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 86,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 87,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 88,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 89,
-    "code": "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 90,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 91,
-    "code": "  <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 92,
-    "code": "<span class=\"a\">  </span><span class=\"k\">public </span>V <span class=\"sym-37 sym\">get</span>(Object <span class=\"sym-38 sym\">firstKey</span>, Object <span class=\"sym-39 sym\">secondKey</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 93,
-    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-38 sym\">firstKey</span>, <span class=\"sym-39 sym\">secondKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 94,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 95,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 96,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 97,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 98,
-    "code": "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 99,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 100,
-    "code": "  <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 101,
-    "code": "<span class=\"a\">  </span><span class=\"k\">public </span>V <span class=\"sym-40 sym\">get</span>(Object <span class=\"sym-41 sym\">firstKey</span>, Object <span class=\"sym-42 sym\">secondKey</span>, Object <span class=\"sym-43 sym\">thirdKey</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 102,
-    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-41 sym\">firstKey</span>, <span class=\"sym-42 sym\">secondKey</span>, <span class=\"sym-43 sym\">thirdKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 103,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 104,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 105,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 106,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 107,
-    "code": "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 108,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 109,
-    "code": "  <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 110,
-    "code": "<span class=\"a\">  </span><span class=\"k\">public </span>V <span class=\"sym-44 sym\">get</span>(Object[] <span class=\"sym-45 sym\">key</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 111,
-    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-45 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 112,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 113,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 114,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 115,
-    "code": "  <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 116,
-    "code": "  <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 117,
-    "code": "<span class=\"a\">  </span><span class=\"k\">private </span>V <span class=\"sym-46 sym\">doGet</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 118,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 119,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.fetch();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 120,
-    "code": "      <span class=\"k\">if </span>(!<span class=\"sym-13 sym\">exchange</span>.getValue().isDefined()) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1,
-    "utConditions": 2,
-    "utCoveredConditions": 2
-  },
-  {
-    "line": 121,
-    "code": "        <span class=\"k\">return</span> <span class=\"k\">null</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 122,
-    "code": "      }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 123,
-    "code": "      <span class=\"k\">return</span> (V) <span class=\"sym-13 sym\">exchange</span>.getValue().get();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 124,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-47 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 125,
-    "code": "      <span class=\"cppd\">// TODO add parameters to message</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200"
-  },
-  {
-    "line": 126,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get element from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-47 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 127,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 128,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 129,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 130,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-48 sym\">containsKey</span>(Object <span class=\"sym-49 sym\">key</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 131,
-    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-49 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 132,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 133,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 134,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 135,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-50 sym\">containsKey</span>(Object <span class=\"sym-51 sym\">firstKey</span>, Object <span class=\"sym-52 sym\">secondKey</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 136,
-    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-51 sym\">firstKey</span>, <span class=\"sym-52 sym\">secondKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 137,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 138,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 139,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 140,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-53 sym\">containsKey</span>(Object <span class=\"sym-54 sym\">firstKey</span>, Object <span class=\"sym-55 sym\">secondKey</span>, Object <span class=\"sym-56 sym\">thirdKey</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 141,
-    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-54 sym\">firstKey</span>, <span class=\"sym-55 sym\">secondKey</span>, <span class=\"sym-56 sym\">thirdKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 142,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 143,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 144,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 145,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-57 sym\">containsKey</span>(Object[] <span class=\"sym-58 sym\">key</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 146,
-    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-58 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 147,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 148,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 149,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 150,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">boolean </span><span class=\"sym-59 sym\">doContainsKey</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 151,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200"
-  },
-  {
-    "line": 152,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.fetch();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 153,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-13 sym\">exchange</span>.isValueDefined();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 154,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-60 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 155,
-    "code": "      <span class=\"cppd\">// TODO add parameters to message</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200"
-  },
-  {
-    "line": 156,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to check if element is in cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-60 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 157,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200"
-  },
-  {
-    "line": 158,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200"
-  },
-  {
-    "line": 159,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200"
-  },
-  {
-    "line": 160,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-61 sym\">remove</span>(Object <span class=\"sym-62 sym\">key</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 161,
-    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-62 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 162,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 163,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 164,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 165,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-63 sym\">remove</span>(Object <span class=\"sym-64 sym\">firstKey</span>, Object <span class=\"sym-65 sym\">secondKey</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 166,
-    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-64 sym\">firstKey</span>, <span class=\"sym-65 sym\">secondKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 167,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 168,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 169,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 170,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-66 sym\">remove</span>(Object <span class=\"sym-67 sym\">firstKey</span>, Object <span class=\"sym-68 sym\">secondKey</span>, Object <span class=\"sym-69 sym\">thirdKey</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 171,
-    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-67 sym\">firstKey</span>, <span class=\"sym-68 sym\">secondKey</span>, <span class=\"sym-69 sym\">thirdKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 172,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 173,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 174,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 175,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-70 sym\">remove</span>(Object[] <span class=\"sym-71 sym\">key</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 176,
-    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-71 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 177,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 178,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 179,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 180,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">boolean </span><span class=\"sym-72 sym\">doRemove</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 181,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 182,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-13 sym\">exchange</span>.remove();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "6f1161efb92298ace498df544e38f6f97216ec36",
-    "scmDate": "2013-04-26T15:19:16+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 183,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-73 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 184,
-    "code": "      <span class=\"cppd\">// TODO add parameters to message</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
-    "scmDate": "2013-10-10T12:18:02+0200"
-  },
-  {
-    "line": 185,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get element from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-73 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 186,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 187,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 188,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 189,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 190,
-    "code": "<span class=\"cppd\">   * Removes everything in the specified group.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 191,
-    "code": "<span class=\"cppd\">   *</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 192,
-    "code": "<span class=\"cppd\">   * @param group The group name.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 193,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 194,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-74 sym\">clear</span>(Object <span class=\"sym-75 sym\">key</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 195,
-    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-75 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 196,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 197,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 198,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 199,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-76 sym\">clear</span>(Object <span class=\"sym-77 sym\">firstKey</span>, Object <span class=\"sym-78 sym\">secondKey</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 200,
-    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-77 sym\">firstKey</span>, <span class=\"sym-78 sym\">secondKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 201,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 202,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 203,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 204,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-79 sym\">clear</span>(Object <span class=\"sym-80 sym\">firstKey</span>, Object <span class=\"sym-81 sym\">secondKey</span>, Object <span class=\"sym-82 sym\">thirdKey</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 205,
-    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-80 sym\">firstKey</span>, <span class=\"sym-81 sym\">secondKey</span>, <span class=\"sym-82 sym\">thirdKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 206,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 207,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 208,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 209,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-83 sym\">clear</span>(Object[] <span class=\"sym-84 sym\">key</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 210,
-    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-84 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 211,
-    "code": "    <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 212,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 213,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 214,
-    "code": "  <span class=\"k\">private </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-85 sym\">doClear</span>() {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 215,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 216,
-    "code": "      <span class=\"sym-3 sym\">Key</span> <span class=\"sym-86 sym\">to</span> = <span class=\"k\">new</span> <span class=\"sym-3 sym\">Key</span>(<span class=\"sym-13 sym\">exchange</span>.getKey());",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 217,
-    "code": "      <span class=\"sym-86 sym\">to</span>.append(<span class=\"sym-3 sym\">Key</span>.AFTER);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 218,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.removeKeyRange(<span class=\"sym-13 sym\">exchange</span>.getKey(), <span class=\"sym-86 sym\">to</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 219,
-    "code": "      <span class=\"k\">return</span> <span class=\"k\">this</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 220,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-87 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 221,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to clear values from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-87 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 222,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 223,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 224,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 225,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 226,
-    "code": "<span class=\"cppd\">   * Clears the default as well as all group caches.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 227,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 228,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-88 sym\">clear</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 229,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 230,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 231,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.removeAll();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 232,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-89 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 233,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to clear cache\"</span>, <span class=\"sym-89 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 234,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 235,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 236,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 237,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 238,
-    "code": "<span class=\"cppd\">   * Returns the set of cache keys associated with this group.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 239,
-    "code": "<span class=\"cppd\">   * TODO implement a lazy-loading equivalent with Iterator/Iterable</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 240,
-    "code": "<span class=\"cppd\">   *</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 241,
-    "code": "<span class=\"cppd\">   * @param group The group.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 242,
-    "code": "<span class=\"cppd\">   * @return The set of cache keys for this group.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 243,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 244,
-    "code": "  <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"rawtypes\"</span>)",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 245,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-10 sym\">Set</span> <span class=\"sym-90 sym\">keySet</span>(Object <span class=\"sym-91 sym\">key</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 246,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 247,
-    "code": "      <span class=\"sym-10 sym\">Set</span>&lt;Object&gt; <span class=\"sym-92 sym\">keys</span> = <span class=\"sym-1 sym\">Sets</span>.newLinkedHashSet();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 248,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 249,
-    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-93 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 250,
-    "code": "      <span class=\"sym-93 sym\">iteratorExchange</span>.append(<span class=\"sym-91 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 251,
-    "code": "      <span class=\"sym-93 sym\">iteratorExchange</span>.append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 252,
-    "code": "      <span class=\"k\">while </span>(<span class=\"sym-93 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1,
-    "utConditions": 2,
-    "utCoveredConditions": 2
-  },
-  {
-    "line": 253,
-    "code": "        <span class=\"sym-92 sym\">keys</span>.add(<span class=\"sym-93 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 254,
-    "code": "      }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 255,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-92 sym\">keys</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 256,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-94 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 257,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-94 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 258,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 259,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 260,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 261,
-    "code": "  <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"rawtypes\"</span>)",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 262,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-10 sym\">Set</span> <span class=\"sym-95 sym\">keySet</span>(Object <span class=\"sym-96 sym\">firstKey</span>, Object <span class=\"sym-97 sym\">secondKey</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 263,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 264,
-    "code": "      <span class=\"sym-10 sym\">Set</span>&lt;Object&gt; <span class=\"sym-98 sym\">keys</span> = <span class=\"sym-1 sym\">Sets</span>.newLinkedHashSet();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 265,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 266,
-    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-99 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 267,
-    "code": "      <span class=\"sym-99 sym\">iteratorExchange</span>.append(<span class=\"sym-96 sym\">firstKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 268,
-    "code": "      <span class=\"sym-99 sym\">iteratorExchange</span>.append(<span class=\"sym-97 sym\">secondKey</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 269,
-    "code": "      <span class=\"sym-99 sym\">iteratorExchange</span>.append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 270,
-    "code": "      <span class=\"k\">while </span>(<span class=\"sym-99 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1,
-    "utConditions": 2,
-    "utCoveredConditions": 2
-  },
-  {
-    "line": 271,
-    "code": "        <span class=\"sym-98 sym\">keys</span>.add(<span class=\"sym-99 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 272,
-    "code": "      }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 273,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-98 sym\">keys</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 274,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-100 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 275,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-100 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 276,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 277,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 278,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 279,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 280,
-    "code": "<span class=\"cppd\">   * Returns the set of keys associated with this cache.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 281,
-    "code": "<span class=\"cppd\">   *</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 282,
-    "code": "<span class=\"cppd\">   * @return The set containing the keys for this cache.</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 283,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 284,
-    "code": "  <span class=\"k\">public </span><span class=\"sym-10 sym\">Set</span>&lt;Object&gt; <span class=\"sym-101 sym\">keySet</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 285,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 286,
-    "code": "      <span class=\"sym-10 sym\">Set</span>&lt;Object&gt; <span class=\"sym-102 sym\">keys</span> = <span class=\"sym-1 sym\">Sets</span>.newLinkedHashSet();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 287,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 288,
-    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-103 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 289,
-    "code": "      <span class=\"sym-103 sym\">iteratorExchange</span>.append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 290,
-    "code": "      <span class=\"k\">while </span>(<span class=\"sym-103 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1,
-    "utConditions": 2,
-    "utCoveredConditions": 2
-  },
-  {
-    "line": 291,
-    "code": "        <span class=\"sym-102 sym\">keys</span>.add(<span class=\"sym-103 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 292,
-    "code": "      }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 293,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-102 sym\">keys</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 294,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-104 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 295,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-104 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 296,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 297,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 298,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 299,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 300,
-    "code": "<span class=\"cppd\">   * Lazy-loading values for given keys</span>",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 301,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 302,
-    "code": "  <span class=\"k\">public </span>Iterable&lt;V&gt; <span class=\"sym-105 sym\">values</span>(Object <span class=\"sym-106 sym\">firstKey</span>, Object <span class=\"sym-107 sym\">secondKey</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 303,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 304,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 305,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-106 sym\">firstKey</span>).append(<span class=\"sym-107 sym\">secondKey</span>).append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 306,
-    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-108 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 307,
-    "code": "      <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-109 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-106 sym\">firstKey</span>)).append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-107 sym\">secondKey</span>));",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 308,
-    "code": "      <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-139 sym\">ValueIterable</span>&lt;V&gt;(<span class=\"sym-108 sym\">iteratorExchange</span>, <span class=\"sym-109 sym\">filter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 309,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-110 sym\">e</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 310,
-    "code": "      <span class=\"k\">throw</span> <span class=\"sym-111 sym\">failToGetValues</span>(<span class=\"sym-110 sym\">e</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
-    "scmDate": "2014-06-20T14:13:01+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 311,
-    "code": "    }",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 312,
-    "code": "  }",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
-    "scmDate": "2014-06-20T14:13:01+0200"
-  },
-  {
-    "line": 313,
-    "code": "",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
-    "scmDate": "2014-06-20T14:13:01+0200"
-  },
-  {
-    "line": 314,
-    "code": "  <span class=\"k\">private </span>IllegalStateException <span class=\"sym-111 sym\">failToGetValues</span>(Exception <span class=\"sym-112 sym\">e</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
-    "scmDate": "2014-06-20T14:13:01+0200"
-  },
-  {
-    "line": 315,
-    "code": "    <span class=\"k\">return</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get values from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-112 sym\">e</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
-    "scmDate": "2014-06-20T14:13:01+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 316,
-    "code": "  }",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 317,
-    "code": "",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 318,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 319,
-    "code": "<span class=\"cppd\">   * Lazy-loading values for a given key</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 320,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 321,
-    "code": "  <span class=\"k\">public </span>Iterable&lt;V&gt; <span class=\"sym-113 sym\">values</span>(Object <span class=\"sym-114 sym\">firstKey</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 322,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 323,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 324,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-114 sym\">firstKey</span>).append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 325,
-    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-115 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 326,
-    "code": "      <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-116 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-114 sym\">firstKey</span>));",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 327,
-    "code": "      <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-139 sym\">ValueIterable</span>&lt;V&gt;(<span class=\"sym-115 sym\">iteratorExchange</span>, <span class=\"sym-116 sym\">filter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 328,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-117 sym\">e</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
-    "scmDate": "2014-04-23T14:41:32+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 329,
-    "code": "      <span class=\"k\">throw</span> <span class=\"sym-111 sym\">failToGetValues</span>(<span class=\"sym-117 sym\">e</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
-    "scmDate": "2014-06-20T14:13:01+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 330,
-    "code": "    }",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 331,
-    "code": "  }",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 332,
-    "code": "",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 333,
-    "code": "  <span class=\"cppd\">/**</span>",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
-    "scmDate": "2014-04-23T14:41:32+0200"
-  },
-  {
-    "line": 334,
-    "code": "<span class=\"cppd\">   * Lazy-loading values</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 335,
-    "code": "<span class=\"cppd\">   */</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 336,
-    "code": "  <span class=\"k\">public </span>Iterable&lt;V&gt; <span class=\"sym-118 sym\">values</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 337,
-    "code": "    <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 338,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear().append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 339,
-    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-119 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 340,
-    "code": "      <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-120 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.ALL);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 341,
-    "code": "      <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-139 sym\">ValueIterable</span>&lt;V&gt;(<span class=\"sym-119 sym\">iteratorExchange</span>, <span class=\"sym-120 sym\">filter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 342,
-    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-121 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 343,
-    "code": "      <span class=\"k\">throw</span> <span class=\"sym-111 sym\">failToGetValues</span>(<span class=\"sym-121 sym\">e</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
-    "scmDate": "2014-06-20T14:13:01+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 344,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 345,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 346,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 347,
-    "code": "  <span class=\"k\">public </span>Iterable&lt;<span class=\"sym-177 sym\">Entry</span>&lt;V&gt;&gt; <span class=\"sym-122 sym\">entries</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 348,
-    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear().to(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 349,
-    "code": "    <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-123 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.ALL);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 350,
-    "code": "    <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-156 sym\">EntryIterable</span>&lt;V&gt;(<span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>), <span class=\"sym-123 sym\">filter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 351,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 352,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 353,
-    "code": "  <span class=\"k\">public </span>Iterable&lt;<span class=\"sym-177 sym\">Entry</span>&lt;V&gt;&gt; <span class=\"sym-124 sym\">entries</span>(Object <span class=\"sym-125 sym\">firstKey</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 354,
-    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear().append(<span class=\"sym-125 sym\">firstKey</span>).append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 355,
-    "code": "    <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-126 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-125 sym\">firstKey</span>));",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 356,
-    "code": "    <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-156 sym\">EntryIterable</span>&lt;V&gt;(<span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>), <span class=\"sym-126 sym\">filter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 357,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 358,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 359,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-127 sym\">resetKey</span>(Object <span class=\"sym-128 sym\">key</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 360,
-    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 361,
-    "code": "    <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-128 sym\">key</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 362,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 363,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 364,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-129 sym\">resetKey</span>(Object <span class=\"sym-130 sym\">first</span>, Object <span class=\"sym-131 sym\">second</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 365,
-    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 366,
-    "code": "    <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-130 sym\">first</span>).append(<span class=\"sym-131 sym\">second</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 367,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 368,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 369,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-132 sym\">resetKey</span>(Object <span class=\"sym-133 sym\">first</span>, Object <span class=\"sym-134 sym\">second</span>, Object <span class=\"sym-135 sym\">third</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 370,
-    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 371,
-    "code": "    <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-133 sym\">first</span>).append(<span class=\"sym-134 sym\">second</span>).append(<span class=\"sym-135 sym\">third</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 372,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 373,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 374,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-136 sym\">resetKey</span>(Object[] <span class=\"sym-137 sym\">keys</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 375,
-    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 376,
-    "code": "    <span class=\"k\">for</span> (Object <span class=\"sym-138 sym\">o</span> : <span class=\"sym-137 sym\">keys</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0,
-    "utConditions": 2,
-    "utCoveredConditions": 0
-  },
-  {
-    "line": 377,
-    "code": "      <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-138 sym\">o</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 378,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 379,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 380,
-    "code": "",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "7b301db8c7e3000ff2a04fce5534e45e7d973a1f",
-    "scmDate": "2014-04-25T11:17:09+0200"
-  },
-  {
-    "line": 381,
-    "code": "  <span class=\"cppd\">//</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 382,
-    "code": "  <span class=\"cppd\">// LAZY ITERATORS AND ITERABLES</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 383,
-    "code": "  <span class=\"cppd\">//</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 384,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 385,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-139 sym\">ValueIterable</span>&lt;T&gt; <span class=\"k\">implements</span> Iterable&lt;T&gt; {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
-    "scmDate": "2014-07-25T16:31:45+0200"
-  },
-  {
-    "line": 386,
-    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-8 sym\">Iterator</span>&lt;T&gt; <span class=\"sym-140 sym\">iterator</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 387,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 388,
-    "code": "    <span class=\"k\">private </span><span class=\"sym-141 sym\">ValueIterable</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-142 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-143 sym\">keyFilter</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 389,
-    "code": "      <span class=\"k\">this</span>.<span class=\"sym-140 sym\">iterator</span> = <span class=\"k\">new</span> <span class=\"sym-145 sym\">ValueIterator</span>&lt;T&gt;(<span class=\"sym-142 sym\">exchange</span>, <span class=\"sym-143 sym\">keyFilter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 390,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 391,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 392,
-    "code": "    <span class=\"a\">@Override</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 393,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"sym-8 sym\">Iterator</span>&lt;T&gt; <span class=\"sym-144 sym\">iterator</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 394,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-140 sym\">iterator</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 395,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 396,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 397,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 398,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-145 sym\">ValueIterator</span>&lt;T&gt; <span class=\"k\">implements</span> <span class=\"sym-8 sym\">Iterator</span>&lt;T&gt; {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
-    "scmDate": "2014-07-25T16:31:45+0200"
-  },
-  {
-    "line": 399,
-    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-146 sym\">exchange</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 400,
-    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-147 sym\">keyFilter</span>;",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 401,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 402,
-    "code": "    <span class=\"k\">private </span><span class=\"sym-148 sym\">ValueIterator</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-149 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-150 sym\">keyFilter</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 403,
-    "code": "      <span class=\"k\">this</span>.<span class=\"sym-146 sym\">exchange</span> = <span class=\"sym-149 sym\">exchange</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "utLineHits": 1,
-    "duplicated": true
-  },
-  {
-    "line": 404,
-    "code": "      <span class=\"k\">this</span>.<span class=\"sym-147 sym\">keyFilter</span> = <span class=\"sym-150 sym\">keyFilter</span>;",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1,
-    "duplicated": true
-  },
-  {
-    "line": 405,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "utLineHits": 1,
-    "duplicated": true
-  },
-  {
-    "line": 406,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "duplicated": true
-  },
-  {
-    "line": 407,
-    "code": "    <span class=\"a\">@Override</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "duplicated": true
-  },
-  {
-    "line": 408,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-151 sym\">hasNext</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "duplicated": true
-  },
-  {
-    "line": 409,
-    "code": "      <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "duplicated": true
-  },
-  {
-    "line": 410,
-    "code": "        <span class=\"k\">return</span> <span class=\"sym-146 sym\">exchange</span>.hasNext(<span class=\"sym-147 sym\">keyFilter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1,
-    "duplicated": true
-  },
-  {
-    "line": 411,
-    "code": "      } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-152 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "utLineHits": 0,
-    "duplicated": true
-  },
-  {
-    "line": 412,
-    "code": "        <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-152 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "utLineHits": 0,
-    "duplicated": true
-  },
-  {
-    "line": 413,
-    "code": "      }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "duplicated": true
-  },
-  {
-    "line": 414,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "duplicated": true
-  },
-  {
-    "line": 415,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "duplicated": true
-  },
-  {
-    "line": 416,
-    "code": "    <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "duplicated": true
-  },
-  {
-    "line": 417,
-    "code": "    <span class=\"a\">@Override</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "duplicated": true
-  },
-  {
-    "line": 418,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span>T <span class=\"sym-153 sym\">next</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 419,
-    "code": "      <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 420,
-    "code": "        <span class=\"sym-146 sym\">exchange</span>.next(<span class=\"sym-147 sym\">keyFilter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 421,
-    "code": "      } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-154 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 422,
-    "code": "        <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-154 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 423,
-    "code": "      }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 424,
-    "code": "      <span class=\"k\">if </span>(<span class=\"sym-146 sym\">exchange</span>.getValue().isDefined()) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200",
-    "utLineHits": 1,
-    "utConditions": 2,
-    "utCoveredConditions": 1
-  },
-  {
-    "line": 425,
-    "code": "        <span class=\"k\">return</span> (T) <span class=\"sym-146 sym\">exchange</span>.getValue().get();",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 426,
-    "code": "      }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 427,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> <span class=\"sym-9 sym\">NoSuchElementException</span>();",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 428,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 429,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 430,
-    "code": "    <span class=\"a\">@Override</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 431,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-155 sym\">remove</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
-    "scmDate": "2013-05-29T14:27:38+0200"
-  },
-  {
-    "line": 432,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> UnsupportedOperationException(<span class=\"s\">\"Removing an item is not supported\"</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "34cce8e330192c56a159a856ebd8072d38299087",
-    "scmDate": "2014-02-24T14:21:50+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 433,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 434,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 435,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 436,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-156 sym\">EntryIterable</span>&lt;T&gt; <span class=\"k\">implements</span> Iterable&lt;<span class=\"sym-177 sym\">Entry</span>&lt;T&gt;&gt; {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
-    "scmDate": "2014-07-25T16:31:45+0200"
-  },
-  {
-    "line": 437,
-    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-162 sym\">EntryIterator</span>&lt;T&gt; <span class=\"sym-157 sym\">it</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 438,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 439,
-    "code": "    <span class=\"k\">private </span><span class=\"sym-158 sym\">EntryIterable</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-159 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-160 sym\">keyFilter</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 440,
-    "code": "      <span class=\"sym-157 sym\">it</span> = <span class=\"k\">new</span> <span class=\"sym-162 sym\">EntryIterator</span>&lt;T&gt;(<span class=\"sym-159 sym\">exchange</span>, <span class=\"sym-160 sym\">keyFilter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 441,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 442,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 443,
-    "code": "    <span class=\"a\">@Override</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 444,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"sym-8 sym\">Iterator</span>&lt;<span class=\"sym-177 sym\">Entry</span>&lt;T&gt;&gt; <span class=\"sym-161 sym\">iterator</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 445,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-157 sym\">it</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 446,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 447,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 448,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 449,
-    "code": "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-162 sym\">EntryIterator</span>&lt;T&gt; <span class=\"k\">implements</span> <span class=\"sym-8 sym\">Iterator</span>&lt;<span class=\"sym-177 sym\">Entry</span>&lt;T&gt;&gt; {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
-    "scmDate": "2014-07-25T16:31:45+0200"
-  },
-  {
-    "line": 450,
-    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-163 sym\">exchange</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 451,
-    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-164 sym\">keyFilter</span>;",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 452,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 453,
-    "code": "    <span class=\"k\">private </span><span class=\"sym-165 sym\">EntryIterator</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-166 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-167 sym\">keyFilter</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 454,
-    "code": "      <span class=\"k\">this</span>.<span class=\"sym-163 sym\">exchange</span> = <span class=\"sym-166 sym\">exchange</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "utLineHits": 1,
-    "duplicated": true
-  },
-  {
-    "line": 455,
-    "code": "      <span class=\"k\">this</span>.<span class=\"sym-164 sym\">keyFilter</span> = <span class=\"sym-167 sym\">keyFilter</span>;",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1,
-    "duplicated": true
-  },
-  {
-    "line": 456,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "utLineHits": 1,
-    "duplicated": true
-  },
-  {
-    "line": 457,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "duplicated": true
-  },
-  {
-    "line": 458,
-    "code": "    <span class=\"a\">@Override</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "duplicated": true
-  },
-  {
-    "line": 459,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-168 sym\">hasNext</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "duplicated": true
-  },
-  {
-    "line": 460,
-    "code": "      <span class=\"k\">try </span>{",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "duplicated": true
-  },
-  {
-    "line": 461,
-    "code": "        <span class=\"k\">return</span> <span class=\"sym-163 sym\">exchange</span>.hasNext(<span class=\"sym-164 sym\">keyFilter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1,
-    "duplicated": true
-  },
-  {
-    "line": 462,
-    "code": "      } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-169 sym\">e</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "utLineHits": 0,
-    "duplicated": true
-  },
-  {
-    "line": 463,
-    "code": "        <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-169 sym\">e</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "utLineHits": 0,
-    "duplicated": true
-  },
-  {
-    "line": 464,
-    "code": "      }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "duplicated": true
-  },
-  {
-    "line": 465,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "duplicated": true
-  },
-  {
-    "line": 466,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "duplicated": true
-  },
-  {
-    "line": 467,
-    "code": "    <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "duplicated": true
-  },
-  {
-    "line": 468,
-    "code": "    <span class=\"a\">@Override</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "duplicated": true
-  },
-  {
-    "line": 469,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"sym-177 sym\">Entry</span>&lt;T&gt; <span class=\"sym-170 sym\">next</span>() {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 470,
-    "code": "      <span class=\"k\">try </span>{",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 471,
-    "code": "        <span class=\"sym-163 sym\">exchange</span>.next(<span class=\"sym-164 sym\">keyFilter</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 472,
-    "code": "      } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-171 sym\">e</span>) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 473,
-    "code": "        <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-171 sym\">e</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 474,
-    "code": "      }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 475,
-    "code": "      <span class=\"k\">if </span>(<span class=\"sym-163 sym\">exchange</span>.getValue().isDefined()) {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1,
-    "utConditions": 2,
-    "utCoveredConditions": 1
-  },
-  {
-    "line": 476,
-    "code": "        T <span class=\"sym-172 sym\">value</span> = (T) <span class=\"sym-163 sym\">exchange</span>.getValue().get();",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 477,
-    "code": "        <span class=\"sym-3 sym\">Key</span> <span class=\"sym-173 sym\">key</span> = <span class=\"sym-163 sym\">exchange</span>.getKey();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 478,
-    "code": "        Object[] <span class=\"sym-174 sym\">array</span> = <span class=\"k\">new</span> Object[<span class=\"sym-173 sym\">key</span>.getDepth()];",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 479,
-    "code": "        <span class=\"k\">for</span> (<span class=\"k\">int </span><span class=\"sym-175 sym\">i</span> = <span class=\"c\">0</span>; <span class=\"sym-175 sym\">i</span> &lt; <span class=\"sym-173 sym\">key</span>.getDepth(); <span class=\"sym-175 sym\">i</span>++) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1,
-    "utConditions": 2,
-    "utCoveredConditions": 2
-  },
-  {
-    "line": 480,
-    "code": "          <span class=\"sym-174 sym\">array</span>[<span class=\"sym-175 sym\">i</span>] = <span class=\"sym-173 sym\">key</span>.indexTo(<span class=\"sym-175 sym\">i</span> - <span class=\"sym-173 sym\">key</span>.getDepth()).decode();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 481,
-    "code": "        }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 482,
-    "code": "        <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-177 sym\">Entry</span>&lt;T&gt;(<span class=\"sym-174 sym\">array</span>, <span class=\"sym-172 sym\">value</span>);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 483,
-    "code": "      }",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 484,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> <span class=\"sym-9 sym\">NoSuchElementException</span>();",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 485,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 486,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 487,
-    "code": "    <span class=\"a\">@Override</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 488,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-176 sym\">remove</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 489,
-    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> UnsupportedOperationException(<span class=\"s\">\"Removing an item is not supported\"</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "34cce8e330192c56a159a856ebd8072d38299087",
-    "scmDate": "2014-02-24T14:21:50+0100",
-    "utLineHits": 0
-  },
-  {
-    "line": 490,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 491,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 492,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 493,
-    "code": "  <span class=\"k\">public </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-177 sym\">Entry</span>&lt;V&gt; {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
-    "scmDate": "2014-07-25T16:31:45+0200"
-  },
-  {
-    "line": 494,
-    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span>Object[] <span class=\"sym-178 sym\">key</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 495,
-    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span>V <span class=\"sym-179 sym\">value</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 496,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 497,
-    "code": "    <span class=\"sym-180 sym\">Entry</span>(Object[] <span class=\"sym-181 sym\">key</span>, V <span class=\"sym-182 sym\">value</span>) {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100",
-    "utLineHits": 1
-  },
-  {
-    "line": 498,
-    "code": "      <span class=\"k\">this</span>.<span class=\"sym-178 sym\">key</span> = <span class=\"sym-181 sym\">key</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 499,
-    "code": "      <span class=\"k\">this</span>.<span class=\"sym-179 sym\">value</span> = <span class=\"sym-182 sym\">value</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 500,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 501,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 502,
-    "code": "    <span class=\"k\">public </span>Object[] <span class=\"sym-183 sym\">key</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 503,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-178 sym\">key</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 504,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 505,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 506,
-    "code": "    <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 507,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span>V <span class=\"sym-184 sym\">value</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 508,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-179 sym\">value</span>;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "utLineHits": 1
-  },
-  {
-    "line": 509,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 510,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 511,
-    "code": "    <span class=\"a\">@Override</span>",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 512,
-    "code": "<span class=\"a\">    </span><span class=\"k\">public </span>String <span class=\"sym-185 sym\">toString</span>() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 513,
-    "code": "      <span class=\"k\">return</span> <span class=\"sym-6 sym\">ToStringBuilder</span>.reflectionToString(<span class=\"k\">this</span>);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200",
-    "utLineHits": 0
-  },
-  {
-    "line": 514,
-    "code": "    }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 515,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 516,
-    "code": "",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "43fc31f75a2de06b23faefb0d2bbf1dd97290232",
-    "scmDate": "2014-05-05T16:43:19+0200"
-  },
-  {
-    "line": 517,
-    "code": "}",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 518,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  }
-]}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/resources-without-ncloc-data.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/resources-without-ncloc-data.json
deleted file mode 100644 (file)
index dfbacdf..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-[
-  {
-    "id": 19983,
-    "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "name": "Cache.java",
-    "scope": "FIL",
-    "qualifier": "FIL",
-    "date": "2014-07-21T23:18:51+0200",
-    "creationDate": "2013-04-17T04:06:45+0200",
-    "lname": "src/main/java/org/sonar/batch/index/Cache.java",
-    "lang": "java",
-    "msr": [
-      {
-        "key": "lines",
-        "val": 519.0,
-        "frmt_val": "519"
-      },
-      {
-        "key": "ncloc",
-        "val": 379.0,
-        "frmt_val": "379"
-      },
-      {
-        "key": "classes",
-        "val": 6.0,
-        "frmt_val": "6"
-      },
-      {
-        "key": "functions",
-        "val": 56.0,
-        "frmt_val": "56"
-      },
-      {
-        "key": "accessors",
-        "val": 0.0,
-        "frmt_val": "0"
-      },
-      {
-        "key": "statements",
-        "val": 174.0,
-        "frmt_val": "174"
-      },
-      {
-        "key": "public_api",
-        "val": 33.0,
-        "frmt_val": "33"
-      },
-      {
-        "key": "comment_lines",
-        "val": 23.0,
-        "frmt_val": "23"
-      },
-      {
-        "key": "comment_lines_density",
-        "val": 5.7,
-        "frmt_val": "5.7%"
-      },
-      {
-        "key": "public_documented_api_density",
-        "val": 36.4,
-        "frmt_val": "36.4%"
-      },
-      {
-        "key": "public_undocumented_api",
-        "val": 21.0,
-        "frmt_val": "21"
-      },
-      {
-        "key": "complexity",
-        "val": 116.0,
-        "frmt_val": "116"
-      },
-      {
-        "key": "function_complexity",
-        "val": 2.1,
-        "frmt_val": "2.1"
-      },
-      {
-        "key": "coverage",
-        "val": 74.3,
-        "frmt_val": "74.3%"
-      },
-      {
-        "key": "lines_to_cover",
-        "val": 194.0,
-        "frmt_val": "194"
-      },
-      {
-        "key": "uncovered_lines",
-        "val": 50.0,
-        "frmt_val": "50"
-      },
-      {
-        "key": "line_coverage",
-        "val": 74.2,
-        "frmt_val": "74.2%"
-      },
-      {
-        "key": "conditions_to_cover",
-        "val": 16.0,
-        "frmt_val": "16"
-      },
-      {
-        "key": "uncovered_conditions",
-        "val": 4.0,
-        "frmt_val": "4"
-      },
-      {
-        "key": "branch_coverage",
-        "val": 75.0,
-        "frmt_val": "75.0%"
-      },
-      {
-        "key": "duplicated_lines",
-        "val": 30.0,
-        "frmt_val": "30"
-      },
-      {
-        "key": "duplicated_blocks",
-        "val": 2.0,
-        "frmt_val": "2"
-      },
-      {
-        "key": "duplicated_files",
-        "val": 1.0,
-        "frmt_val": "1"
-      },
-      {
-        "key": "duplicated_lines_density",
-        "val": 5.8,
-        "frmt_val": "5.8%"
-      },
-      {
-        "key": "major_violations",
-        "val": 1.0,
-        "frmt_val": "1"
-      },
-      {
-        "key": "minor_violations",
-        "val": 1.0,
-        "frmt_val": "1"
-      },
-      {
-        "key": "info_violations",
-        "val": 4.0,
-        "frmt_val": "4"
-      }
-    ]
-  }
-]
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/resources.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/resources.json
deleted file mode 100644 (file)
index 415718c..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-[
-  {
-    "id": 19983,
-    "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
-    "name": "Cache.java",
-    "scope": "FIL",
-    "qualifier": "FIL",
-    "date": "2014-07-21T23:18:51+0200",
-    "creationDate": "2013-04-17T04:06:45+0200",
-    "lname": "src/main/java/org/sonar/batch/index/Cache.java",
-    "lang": "java",
-    "msr": [
-      {
-        "key": "lines",
-        "val": 519.0,
-        "frmt_val": "519"
-      },
-      {
-        "key": "ncloc",
-        "val": 379.0,
-        "frmt_val": "379"
-      },
-      {
-        "key": "classes",
-        "val": 6.0,
-        "frmt_val": "6"
-      },
-      {
-        "key": "functions",
-        "val": 56.0,
-        "frmt_val": "56"
-      },
-      {
-        "key": "accessors",
-        "val": 0.0,
-        "frmt_val": "0"
-      },
-      {
-        "key": "statements",
-        "val": 174.0,
-        "frmt_val": "174"
-      },
-      {
-        "key": "public_api",
-        "val": 33.0,
-        "frmt_val": "33"
-      },
-      {
-        "key": "comment_lines",
-        "val": 23.0,
-        "frmt_val": "23"
-      },
-      {
-        "key": "comment_lines_density",
-        "val": 5.7,
-        "frmt_val": "5.7%"
-      },
-      {
-        "key": "public_documented_api_density",
-        "val": 36.4,
-        "frmt_val": "36.4%"
-      },
-      {
-        "key": "public_undocumented_api",
-        "val": 21.0,
-        "frmt_val": "21"
-      },
-      {
-        "key": "complexity",
-        "val": 116.0,
-        "frmt_val": "116"
-      },
-      {
-        "key": "function_complexity",
-        "val": 2.1,
-        "frmt_val": "2.1"
-      },
-      {
-        "key": "coverage",
-        "val": 74.3,
-        "frmt_val": "74.3%"
-      },
-      {
-        "key": "lines_to_cover",
-        "val": 194.0,
-        "frmt_val": "194"
-      },
-      {
-        "key": "uncovered_lines",
-        "val": 50.0,
-        "frmt_val": "50"
-      },
-      {
-        "key": "line_coverage",
-        "val": 74.2,
-        "frmt_val": "74.2%"
-      },
-      {
-        "key": "conditions_to_cover",
-        "val": 16.0,
-        "frmt_val": "16"
-      },
-      {
-        "key": "uncovered_conditions",
-        "val": 4.0,
-        "frmt_val": "4"
-      },
-      {
-        "key": "branch_coverage",
-        "val": 75.0,
-        "frmt_val": "75.0%"
-      },
-      {
-        "key": "duplicated_lines",
-        "val": 30.0,
-        "frmt_val": "30"
-      },
-      {
-        "key": "duplicated_blocks",
-        "val": 2.0,
-        "frmt_val": "2"
-      },
-      {
-        "key": "duplicated_files",
-        "val": 1.0,
-        "frmt_val": "1"
-      },
-      {
-        "key": "duplicated_lines_density",
-        "val": 5.8,
-        "frmt_val": "5.8%"
-      },
-      {
-        "key": "major_violations",
-        "val": 1.0,
-        "frmt_val": "1"
-      },
-      {
-        "key": "minor_violations",
-        "val": 1.0,
-        "frmt_val": "1"
-      },
-      {
-        "key": "info_violations",
-        "val": 4.0,
-        "frmt_val": "4"
-      },
-      {
-        "key": "ncloc_data",
-        "data": "1=0;2=0;3=0;4=0;5=0;6=0;7=0;8=0;9=0;10=0;11=0;12=0;13=0;14=0;15=0;17=0;16=0;19=0;18=0;21=0;20=1;23=1;22=1;25=1;24=1;27=1;26=1;29=1;28=0;31=1;30=0;34=1;35=0;32=1;33=1;38=0;39=0;36=0;37=0;42=0;43=1;40=0;41=1;46=1;47=1;44=1;45=0;51=1;50=0;49=1;48=1;55=0;54=1;53=1;52=1;59=1;58=1;57=1;56=1;63=1;62=1;61=1;60=0;68=1;69=1;70=0;71=1;64=1;65=0;66=1;67=1;76=1;77=1;78=1;79=1;72=1;73=1;74=1;75=1;85=1;84=1;87=1;86=1;81=0;80=0;83=0;82=0;93=1;92=1;95=1;94=1;89=0;88=0;91=0;90=0;102=1;103=1;100=0;101=1;98=0;99=0;96=1;97=0;110=1;111=1;108=0;109=0;106=0;107=0;104=1;105=1;119=1;118=1;117=1;116=1;115=0;114=1;113=1;112=1;127=1;126=0;125=1;124=1;123=1;122=1;121=1;120=1;137=1;136=1;139=1;138=1;141=1;140=0;143=1;142=1;129=1;128=1;131=1;130=0;133=1;132=1;135=0;134=1;152=1;153=1;154=1;155=1;156=0;157=1;158=1;159=1;144=1;145=0;146=1;147=1;148=1;149=1;150=0;151=1;171=1;170=0;169=1;168=1;175=0;174=1;173=1;172=1;163=1;162=1;161=1;160=0;167=1;166=1;165=0;164=1;186=1;187=1;184=1;185=0;190=0;191=0;188=1;189=0;178=1;179=1;176=1;177=1;182=1;183=1;180=0;181=1;205=1;204=0;207=1;206=1;201=1;200=1;203=1;202=1;197=1;196=1;199=0;198=1;193=0;192=0;195=1;194=0;220=1;221=1;222=1;223=1;216=1;217=1;218=1;219=1;212=1;213=1;214=0;215=1;208=1;209=0;210=1;211=1;239=0;238=0;237=0;236=1;235=1;234=1;233=1;232=1;231=1;230=1;229=1;228=0;227=0;226=0;225=0;224=1;254=1;255=1;252=1;253=1;250=1;251=1;248=1;249=1;246=1;247=1;244=0;245=1;242=0;243=0;240=0;241=0;275=1;274=1;273=1;272=1;279=0;278=1;277=1;276=1;283=0;282=0;281=0;280=0;287=1;286=1;285=1;284=0;258=1;259=1;256=1;257=1;262=1;263=1;260=1;261=0;266=1;267=1;264=1;265=1;270=1;271=1;268=1;269=1;305=1;304=1;307=1;306=1;309=1;308=1;311=1;310=1;313=1;312=1;315=1;314=0;317=1;316=1;319=0;318=0;288=1;289=1;290=1;291=1;292=1;293=1;294=1;295=1;296=1;297=1;298=1;299=0;300=0;301=0;302=0;303=1;343=1;342=1;341=1;340=1;339=1;338=1;337=1;336=0;351=1;350=1;349=1;348=1;347=0;346=1;345=1;344=1;326=1;327=1;324=1;325=1;322=1;323=1;320=0;321=0;334=0;335=0;332=1;333=0;330=1;331=1;328=1;329=1;373=1;372=1;375=1;374=0;369=0;368=1;371=1;370=1;381=0;380=1;383=0;382=0;377=1;376=1;379=1;378=1;356=1;357=1;358=1;359=0;352=1;353=0;354=1;355=1;364=0;365=1;366=1;367=1;360=1;361=1;362=1;363=1;410=1;411=1;408=1;409=1;414=1;415=1;412=1;413=1;402=0;403=1;400=1;401=1;406=1;407=0;404=1;405=1;395=1;394=1;393=1;392=0;399=1;398=0;397=1;396=1;387=1;386=1;385=0;384=0;391=1;390=1;389=1;388=0;440=1;441=1;442=1;443=0;444=1;445=1;446=1;447=1;432=1;433=1;434=1;435=1;436=0;437=1;438=1;439=0;425=1;424=1;427=1;426=1;429=1;428=1;431=1;430=0;417=1;416=0;419=1;418=1;421=1;420=1;423=1;422=1;478=1;479=1;476=1;477=1;474=1;475=1;472=1;473=1;470=1;471=1;468=1;469=1;466=1;467=0;464=1;465=1;463=1;462=1;461=1;460=1;459=1;458=0;457=1;456=1;455=1;454=1;453=0;452=1;451=1;450=1;449=0;448=1;508=1;509=1;510=1;511=0;504=1;505=1;506=0;507=1;500=1;501=1;502=0;503=1;496=1;497=0;498=1;499=1;493=0;492=1;495=1;494=1;489=1;488=1;491=1;490=1;485=1;484=1;487=0;486=1;481=1;480=1;483=1;482=1;516=1;517=0;518=1;512=1;513=1;514=1;515=1"
-      }
-    ]
-  }
-]
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/scm.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/scm.json
deleted file mode 100644 (file)
index ff89c98..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-{"scm": [
-  [1, "simon.brandhof@gmail.com", "2013-04-16"],
-  [2, "simon.brandhof@gmail.com", "2013-04-21"],
-  [3, "simon.brandhof@gmail.com", "2014-03-11"],
-  [4, "simon.brandhof@gmail.com", "2013-04-16"],
-  [6, "simon.brandhof@gmail.com", "2013-04-21"],
-  [7, "simon.brandhof@gmail.com", "2013-04-16"],
-  [11, "simon.brandhof@gmail.com", "2013-04-21"],
-  [12, "simon.brandhof@gmail.com", "2013-04-16"],
-  [16, "simon.brandhof@gmail.com", "2013-04-22"],
-  [19, "simon.brandhof@gmail.com", "2013-04-16"],
-  [25, "julien.henry@sonarsource.com", "2014-05-01"],
-  [26, "simon.brandhof@gmail.com", "2013-04-17"],
-  [30, "julien.henry@sonarsource.com", "2014-04-30"],
-  [31, "simon.brandhof@gmail.com", "2013-04-16"],
-  [32, "simon.brandhof@gmail.com", "2013-04-17"],
-  [33, "julien.henry@sonarsource.com", "2014-05-01"],
-  [34, "simon.brandhof@gmail.com", "2013-04-16"],
-  [37, "simon.brandhof@gmail.com", "2013-04-17"],
-  [38, "simon.brandhof@gmail.com", "2013-04-16"],
-  [39, "simon.brandhof@gmail.com", "2013-04-17"],
-  [40, "simon.brandhof@gmail.com", "2013-04-16"],
-  [41, "simon.brandhof@gmail.com", "2014-02-20"],
-  [42, "simon.brandhof@gmail.com", "2013-04-16"],
-  [51, "julien.henry@sonarsource.com", "2014-05-01"],
-  [52, "simon.brandhof@gmail.com", "2014-02-20"],
-  [54, "simon.brandhof@gmail.com", "2013-04-16"],
-  [56, "julien.henry@sonarsource.com", "2014-05-01"],
-  [57, "simon.brandhof@gmail.com", "2014-02-20"],
-  [61, "julien.henry@sonarsource.com", "2014-05-01"],
-  [62, "simon.brandhof@gmail.com", "2014-02-20"],
-  [66, "julien.henry@sonarsource.com", "2014-05-01"],
-  [67, "simon.brandhof@gmail.com", "2014-02-20"],
-  [71, "julien.henry@sonarsource.com", "2014-05-01"],
-  [72, "simon.brandhof@gmail.com", "2013-04-16"],
-  [77, "simon.brandhof@gmail.com", "2013-05-29"],
-  [78, "simon.brandhof@gmail.com", "2013-04-16"],
-  [82, "simon.brandhof@gmail.com", "2014-02-20"],
-  [83, "simon.brandhof@gmail.com", "2013-04-16"],
-  [84, "simon.brandhof@gmail.com", "2014-02-20"],
-  [116, "julien.henry@sonarsource.com", "2014-05-01"],
-  [117, "simon.brandhof@gmail.com", "2014-02-20"],
-  [119, "simon.brandhof@gmail.com", "2013-04-16"],
-  [126, "simon.brandhof@gmail.com", "2013-10-10"],
-  [127, "simon.brandhof@gmail.com", "2013-05-29"],
-  [128, "simon.brandhof@gmail.com", "2013-04-16"],
-  [131, "simon.brandhof@gmail.com", "2014-02-20"],
-  [144, "simon.brandhof@gmail.com", "2013-04-16"],
-  [146, "simon.brandhof@gmail.com", "2014-02-20"],
-  [152, "simon.brandhof@gmail.com", "2013-10-10"],
-  [161, "simon.brandhof@gmail.com", "2014-02-20"],
-  [182, "simon.brandhof@gmail.com", "2013-04-16"],
-  [183, "simon.brandhof@gmail.com", "2013-04-26"],
-  [184, "simon.brandhof@gmail.com", "2013-04-16"],
-  [185, "simon.brandhof@gmail.com", "2013-10-10"],
-  [186, "simon.brandhof@gmail.com", "2013-05-29"],
-  [187, "simon.brandhof@gmail.com", "2013-04-16"],
-  [195, "julien.henry@sonarsource.com", "2014-05-01"],
-  [196, "simon.brandhof@gmail.com", "2014-02-20"],
-  [200, "julien.henry@sonarsource.com", "2014-05-01"],
-  [201, "simon.brandhof@gmail.com", "2014-02-20"],
-  [205, "julien.henry@sonarsource.com", "2014-05-01"],
-  [206, "simon.brandhof@gmail.com", "2014-02-20"],
-  [210, "julien.henry@sonarsource.com", "2014-05-01"],
-  [211, "simon.brandhof@gmail.com", "2014-02-20"],
-  [215, "julien.henry@sonarsource.com", "2014-05-01"],
-  [216, "simon.brandhof@gmail.com", "2013-04-16"],
-  [217, "simon.brandhof@gmail.com", "2014-02-20"],
-  [220, "simon.brandhof@gmail.com", "2013-04-16"],
-  [222, "simon.brandhof@gmail.com", "2014-02-20"],
-  [223, "simon.brandhof@gmail.com", "2013-04-16"],
-  [229, "simon.brandhof@gmail.com", "2014-02-20"],
-  [230, "simon.brandhof@gmail.com", "2013-04-16"],
-  [245, "julien.henry@sonarsource.com", "2014-05-01"],
-  [246, "simon.brandhof@gmail.com", "2014-02-20"],
-  [247, "simon.brandhof@gmail.com", "2013-04-16"],
-  [248, "simon.brandhof@gmail.com", "2014-02-20"],
-  [249, "simon.brandhof@gmail.com", "2013-04-16"],
-  [251, "simon.brandhof@gmail.com", "2014-02-20"],
-  [252, "simon.brandhof@gmail.com", "2013-04-16"],
-  [254, "simon.brandhof@gmail.com", "2014-02-20"],
-  [255, "simon.brandhof@gmail.com", "2013-04-16"],
-  [258, "simon.brandhof@gmail.com", "2013-05-29"],
-  [259, "simon.brandhof@gmail.com", "2013-04-16"],
-  [262, "julien.henry@sonarsource.com", "2014-05-01"],
-  [263, "simon.brandhof@gmail.com", "2014-02-20"],
-  [279, "simon.brandhof@gmail.com", "2013-04-16"],
-  [285, "simon.brandhof@gmail.com", "2014-02-20"],
-  [298, "simon.brandhof@gmail.com", "2013-04-16"],
-  [300, "simon.brandhof@gmail.com", "2013-05-29"],
-  [301, "julien.henry@sonarsource.com", "2014-04-30"],
-  [308, "julien.henry@sonarsource.com", "2014-05-01"],
-  [310, "julien.henry@sonarsource.com", "2014-04-30"],
-  [311, "julien.henry@sonarsource.com", "2014-06-20"],
-  [312, "julien.henry@sonarsource.com", "2014-04-30"],
-  [315, "julien.henry@sonarsource.com", "2014-06-20"],
-  [319, "julien.henry@sonarsource.com", "2014-04-30"],
-  [320, "simon.brandhof@gmail.com", "2014-02-20"],
-  [321, "simon.brandhof@gmail.com", "2013-05-29"],
-  [322, "julien.henry@sonarsource.com", "2014-05-01"],
-  [323, "simon.brandhof@gmail.com", "2013-04-16"],
-  [325, "julien.henry@sonarsource.com", "2014-05-01"],
-  [326, "simon.brandhof@gmail.com", "2013-04-16"],
-  [327, "julien.henry@sonarsource.com", "2014-05-01"],
-  [329, "simon.brandhof@gmail.com", "2013-04-16"],
-  [330, "julien.henry@sonarsource.com", "2014-06-20"],
-  [331, "simon.brandhof@gmail.com", "2013-04-16"],
-  [334, "simon.brandhof@gmail.com", "2013-05-29"],
-  [337, "simon.brandhof@gmail.com", "2013-04-16"],
-  [339, "simon.brandhof@gmail.com", "2014-02-20"],
-  [340, "simon.brandhof@gmail.com", "2013-04-16"],
-  [341, "julien.henry@sonarsource.com", "2014-05-01"],
-  [343, "simon.brandhof@gmail.com", "2013-04-16"],
-  [344, "julien.henry@sonarsource.com", "2014-06-20"],
-  [345, "simon.brandhof@gmail.com", "2013-04-16"],
-  [347, "simon.brandhof@gmail.com", "2013-04-17"],
-  [348, "simon.brandhof@gmail.com", "2014-02-20"],
-  [350, "julien.henry@sonarsource.com", "2014-05-01"],
-  [352, "simon.brandhof@gmail.com", "2013-04-17"],
-  [353, "simon.brandhof@gmail.com", "2014-02-20"],
-  [354, "julien.henry@sonarsource.com", "2014-05-01"],
-  [358, "simon.brandhof@gmail.com", "2013-04-17"],
-  [359, "simon.brandhof@gmail.com", "2014-02-20"],
-  [363, "simon.brandhof@gmail.com", "2013-04-17"],
-  [365, "simon.brandhof@gmail.com", "2014-02-20"],
-  [368, "simon.brandhof@gmail.com", "2013-04-17"],
-  [370, "simon.brandhof@gmail.com", "2014-02-20"],
-  [380, "simon.brandhof@gmail.com", "2013-04-17"],
-  [382, "simon.brandhof@gmail.com", "2013-05-29"],
-  [389, "julien.henry@sonarsource.com", "2014-05-01"],
-  [391, "simon.brandhof@gmail.com", "2013-05-29"],
-  [401, "julien.henry@sonarsource.com", "2014-05-01"],
-  [402, "simon.brandhof@gmail.com", "2013-05-29"],
-  [403, "julien.henry@sonarsource.com", "2014-05-01"],
-  [404, "simon.brandhof@gmail.com", "2013-05-29"],
-  [405, "julien.henry@sonarsource.com", "2014-05-01"],
-  [406, "simon.brandhof@gmail.com", "2013-05-29"],
-  [411, "julien.henry@sonarsource.com", "2014-05-01"],
-  [412, "simon.brandhof@gmail.com", "2013-05-29"],
-  [417, "julien.henry@sonarsource.com", "2014-05-01"],
-  [418, "simon.brandhof@gmail.com", "2013-05-29"],
-  [420, "simon.brandhof@gmail.com", "2014-02-20"],
-  [421, "julien.henry@sonarsource.com", "2014-05-01"],
-  [422, "simon.brandhof@gmail.com", "2014-02-20"],
-  [425, "simon.brandhof@gmail.com", "2013-05-29"],
-  [426, "julien.henry@sonarsource.com", "2014-05-01"],
-  [427, "simon.brandhof@gmail.com", "2013-05-29"],
-  [428, "julien.henry@sonarsource.com", "2014-05-01"],
-  [429, "simon.brandhof@gmail.com", "2013-05-29"],
-  [433, "simon.brandhof@gmail.com", "2014-02-24"],
-  [434, "simon.brandhof@gmail.com", "2013-05-29"],
-  [437, "simon.brandhof@gmail.com", "2013-04-17"],
-  [440, "julien.henry@sonarsource.com", "2014-05-01"],
-  [442, "simon.brandhof@gmail.com", "2013-04-17"],
-  [452, "julien.henry@sonarsource.com", "2014-05-01"],
-  [453, "simon.brandhof@gmail.com", "2013-04-17"],
-  [454, "julien.henry@sonarsource.com", "2014-05-01"],
-  [455, "simon.brandhof@gmail.com", "2013-04-17"],
-  [456, "julien.henry@sonarsource.com", "2014-05-01"],
-  [457, "simon.brandhof@gmail.com", "2013-04-17"],
-  [462, "julien.henry@sonarsource.com", "2014-05-01"],
-  [463, "simon.brandhof@gmail.com", "2013-04-17"],
-  [468, "julien.henry@sonarsource.com", "2014-05-01"],
-  [469, "simon.brandhof@gmail.com", "2013-04-17"],
-  [470, "julien.henry@sonarsource.com", "2014-05-01"],
-  [475, "simon.brandhof@gmail.com", "2013-04-17"],
-  [476, "julien.henry@sonarsource.com", "2014-05-01"],
-  [478, "simon.brandhof@gmail.com", "2013-04-17"],
-  [479, "simon.brandhof@gmail.com", "2014-02-20"],
-  [483, "julien.henry@sonarsource.com", "2014-05-01"],
-  [486, "simon.brandhof@gmail.com", "2013-04-17"],
-  [490, "simon.brandhof@gmail.com", "2014-02-24"],
-  [491, "simon.brandhof@gmail.com", "2013-04-17"],
-  [494, "simon.brandhof@gmail.com", "2014-02-20"],
-  [497, "simon.brandhof@gmail.com", "2013-04-17"],
-  [498, "simon.brandhof@gmail.com", "2014-02-20"],
-  [499, "simon.brandhof@gmail.com", "2013-04-17"],
-  [503, "simon.brandhof@gmail.com", "2014-02-20"],
-  [504, "simon.brandhof@gmail.com", "2013-04-17"],
-  [508, "simon.brandhof@gmail.com", "2014-02-20"],
-  [509, "simon.brandhof@gmail.com", "2013-04-17"],
-  [517, "julien.henry@sonarsource.com", "2014-05-06"],
-  [518, "simon.brandhof@gmail.com", "2013-04-16"]
-]}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/source.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/source.json
deleted file mode 100644 (file)
index 1b32224..0000000
+++ /dev/null
@@ -1,521 +0,0 @@
-{"sources": [
-  [1, "<span class=\"cppd\">/*</span>"],
-  [2, "<span class=\"cppd\"> * SonarQube, open source software quality management tool.</span>"],
-  [3, "<span class=\"cppd\"> * Copyright (C) 2008-2014 SonarSource</span>"],
-  [4, "<span class=\"cppd\"> * mailto:contact AT sonarsource DOT com</span>"],
-  [5, "<span class=\"cppd\"> *</span>"],
-  [6, "<span class=\"cppd\"> * SonarQube is free software; you can redistribute it and/or</span>"],
-  [7, "<span class=\"cppd\"> * modify it under the terms of the GNU Lesser General Public</span>"],
-  [8, "<span class=\"cppd\"> * License as published by the Free Software Foundation; either</span>"],
-  [9, "<span class=\"cppd\"> * version 3 of the License, or (at your option) any later version.</span>"],
-  [10, "<span class=\"cppd\"> *</span>"],
-  [11, "<span class=\"cppd\"> * SonarQube is distributed in the hope that it will be useful,</span>"],
-  [12, "<span class=\"cppd\"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>"],
-  [13, "<span class=\"cppd\"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>"],
-  [14, "<span class=\"cppd\"> * Lesser General Public License for more details.</span>"],
-  [15, "<span class=\"cppd\"> *</span>"],
-  [16, "<span class=\"cppd\"> * You should have received a copy of the GNU Lesser General Public License</span>"],
-  [17, "<span class=\"cppd\"> * along with this program; if not, write to the Free Software Foundation,</span>"],
-  [18, "<span class=\"cppd\"> * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.</span>"],
-  [19, "<span class=\"cppd\"> */</span>"],
-  [20, "<span class=\"k\">package </span>org.sonar.batch.index;"],
-  [21, ""],
-  [22, "<span class=\"k\">import </span>com.google.common.collect.<span class=\"sym-949 sym\">Sets</span>;"],
-  [23, "<span class=\"k\">import </span>com.persistit.<span class=\"sym-976 sym\">Exchange</span>;"],
-  [24, "<span class=\"k\">import </span>com.persistit.<span class=\"sym-1007 sym\">Key</span>;"],
-  [25, "<span class=\"k\">import </span>com.persistit.<span class=\"sym-1033 sym\">KeyFilter</span>;"],
-  [26, "<span class=\"k\">import </span>com.persistit.exception.<span class=\"sym-1075 sym\">PersistitException</span>;"],
-  [27, "<span class=\"k\">import </span>org.apache.commons.lang.builder.<span class=\"sym-1134 sym\">ToStringBuilder</span>;"],
-  [28, ""],
-  [29, "<span class=\"k\">import </span>javax.annotation.<span class=\"sym-1176 sym\">CheckForNull</span>;"],
-  [30, ""],
-  [31, "<span class=\"k\">import </span>java.io.<span class=\"sym-1206 sym\">Serializable</span>;"],
-  [32, "<span class=\"k\">import </span>java.util.<span class=\"sym-1237 sym\">Iterator</span>;"],
-  [33, "<span class=\"k\">import </span>java.util.<span class=\"sym-1264 sym\">NoSuchElementException</span>;"],
-  [34, "<span class=\"k\">import </span>java.util.<span class=\"sym-1305 sym\">Set</span>;"],
-  [35, ""],
-  [36, "<span class=\"cppd\">/**</span>"],
-  [37, "<span class=\"cppd\"> * &lt;p&gt;</span>"],
-  [38, "<span class=\"cppd\"> * This cache is not thread-safe, due to direct usage of {@link com.persistit.Exchange}</span>"],
-  [39, "<span class=\"cppd\"> * &lt;/p&gt;</span>"],
-  [40, "<span class=\"cppd\"> */</span>"],
-  [41, "<span class=\"k\">public </span><span class=\"k\">class </span><span class=\"sym-1435 sym\">Cache</span>&lt;V <span class=\"k\">extends </span>Serializable&gt; {"],
-  [42, ""],
-  [43, "  <span class=\"k\">private </span><span class=\"k\">final </span>String <span class=\"sym-1491 sym\">name</span>;"],
-  [44, "  <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-1522 sym\">exchange</span>;"],
-  [45, ""],
-  [46, "  <span class=\"sym-1535 sym\">Cache</span>(String <span class=\"sym-1548 sym\">name</span>, <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-1563 sym\">exchange</span>) {"],
-  [47, "    <span class=\"k\">this</span>.<span class=\"sym-1491 sym\">name</span> = <span class=\"sym-1548 sym\">name</span>;"],
-  [48, "    <span class=\"k\">this</span>.<span class=\"sym-1522 sym\">exchange</span> = <span class=\"sym-1563 sym\">exchange</span>;"],
-  [49, "  }"],
-  [50, ""],
-  [51, "  <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-1650 sym\">put</span>(Object <span class=\"sym-1661 sym\">key</span>, V <span class=\"sym-1668 sym\">value</span>) {"],
-  [52, "    resetKey(<span class=\"sym-1661 sym\">key</span>);"],
-  [53, "    <span class=\"k\">return </span><span class=\"sym-2134 sym\">doPut</span>(<span class=\"sym-1668 sym\">value</span>);"],
-  [54, "  }"],
-  [55, ""],
-  [56, "  <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-1744 sym\">put</span>(Object <span class=\"sym-1755 sym\">firstKey</span>, Object <span class=\"sym-1772 sym\">secondKey</span>, V <span class=\"sym-1785 sym\">value</span>) {"],
-  [57, "    resetKey(<span class=\"sym-1755 sym\">firstKey</span>, <span class=\"sym-1772 sym\">secondKey</span>);"],
-  [58, "    <span class=\"k\">return </span><span class=\"sym-2134 sym\">doPut</span>(<span class=\"sym-1785 sym\">value</span>);"],
-  [59, "  }"],
-  [60, ""],
-  [61, "  <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-1877 sym\">put</span>(Object <span class=\"sym-1888 sym\">firstKey</span>, Object <span class=\"sym-1905 sym\">secondKey</span>, Object <span class=\"sym-1923 sym\">thirdKey</span>, V <span class=\"sym-1935 sym\">value</span>) {"],
-  [62, "    resetKey(<span class=\"sym-1888 sym\">firstKey</span>, <span class=\"sym-1905 sym\">secondKey</span>, <span class=\"sym-1923 sym\">thirdKey</span>);"],
-  [63, "    <span class=\"k\">return </span><span class=\"sym-2134 sym\">doPut</span>(<span class=\"sym-1935 sym\">value</span>);"],
-  [64, "  }"],
-  [65, ""],
-  [66, "  <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-2037 sym\">put</span>(Object[] <span class=\"sym-2050 sym\">key</span>, V <span class=\"sym-2057 sym\">value</span>) {"],
-  [67, "    resetKey(<span class=\"sym-2050 sym\">key</span>);"],
-  [68, "    <span class=\"k\">return </span><span class=\"sym-2134 sym\">doPut</span>(<span class=\"sym-2057 sym\">value</span>);"],
-  [69, "  }"],
-  [70, ""],
-  [71, "  <span class=\"k\">private </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-2134 sym\">doPut</span>(V <span class=\"sym-2142 sym\">value</span>) {"],
-  [72, "    <span class=\"k\">try </span>{"],
-  [73, "      <span class=\"sym-1522 sym\">exchange</span>.getValue().put(<span class=\"sym-2142 sym\">value</span>);"],
-  [74, "      <span class=\"sym-1522 sym\">exchange</span>.store();"],
-  [75, "      <span class=\"k\">return </span><span class=\"k\">this</span>;"],
-  [76, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-2265 sym\">e</span>) {"],
-  [77, "      <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to put element in the cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-2265 sym\">e</span>);"],
-  [78, "    }"],
-  [79, "  }"],
-  [80, ""],
-  [81, "  <span class=\"cppd\">/**</span>"],
-  [82, "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>"],
-  [83, "<span class=\"cppd\">   */</span>"],
-  [84, "  <span class=\"k\">public </span>V <span class=\"sym-2464 sym\">get</span>(Object <span class=\"sym-2475 sym\">key</span>) {"],
-  [85, "    resetKey(<span class=\"sym-2475 sym\">key</span>);"],
-  [86, "    <span class=\"k\">return </span><span class=\"sym-3219 sym\">doGet</span>();"],
-  [87, "  }"],
-  [88, ""],
-  [89, "  <span class=\"cppd\">/**</span>"],
-  [90, "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>"],
-  [91, "<span class=\"cppd\">   */</span>"],
-  [92, "  <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
-  [93, "<span class=\"a\">  </span><span class=\"k\">public </span>V <span class=\"sym-2639 sym\">get</span>(Object <span class=\"sym-2650 sym\">firstKey</span>, Object <span class=\"sym-2667 sym\">secondKey</span>) {"],
-  [94, "    resetKey(<span class=\"sym-2650 sym\">firstKey</span>, <span class=\"sym-2667 sym\">secondKey</span>);"],
-  [95, "    <span class=\"k\">return </span><span class=\"sym-3219 sym\">doGet</span>();"],
-  [96, "  }"],
-  [97, ""],
-  [98, "  <span class=\"cppd\">/**</span>"],
-  [99, "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>"],
-  [100, "<span class=\"cppd\">   */</span>"],
-  [101, "  <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
-  [102, "<span class=\"a\">  </span><span class=\"k\">public </span>V <span class=\"sym-2853 sym\">get</span>(Object <span class=\"sym-2864 sym\">firstKey</span>, Object <span class=\"sym-2881 sym\">secondKey</span>, Object <span class=\"sym-2899 sym\">thirdKey</span>) {"],
-  [103, "    resetKey(<span class=\"sym-2864 sym\">firstKey</span>, <span class=\"sym-2881 sym\">secondKey</span>, <span class=\"sym-2899 sym\">thirdKey</span>);"],
-  [104, "    <span class=\"k\">return </span><span class=\"sym-3219 sym\">doGet</span>();"],
-  [105, "  }"],
-  [106, ""],
-  [107, "  <span class=\"cppd\">/**</span>"],
-  [108, "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>"],
-  [109, "<span class=\"cppd\">   */</span>"],
-  [110, "  <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
-  [111, "<span class=\"a\">  </span><span class=\"k\">public </span>V <span class=\"sym-3094 sym\">get</span>(Object[] <span class=\"sym-3107 sym\">key</span>) {"],
-  [112, "    resetKey(<span class=\"sym-3107 sym\">key</span>);"],
-  [113, "    <span class=\"k\">return </span><span class=\"sym-3219 sym\">doGet</span>();"],
-  [114, "  }"],
-  [115, ""],
-  [116, "  <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)"],
-  [117, "  <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
-  [118, "<span class=\"a\">  </span><span class=\"k\">private </span>V <span class=\"sym-3219 sym\">doGet</span>() {"],
-  [119, "    <span class=\"k\">try </span>{"],
-  [120, "      <span class=\"sym-1522 sym\">exchange</span>.fetch();"],
-  [121, "      <span class=\"k\">if </span>(!<span class=\"sym-1522 sym\">exchange</span>.getValue().isDefined()) {"],
-  [122, "        <span class=\"k\">return </span><span class=\"k\">null</span>;"],
-  [123, "      }"],
-  [124, "      <span class=\"k\">return </span>(V) <span class=\"sym-1522 sym\">exchange</span>.getValue().get();"],
-  [125, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-3405 sym\">e</span>) {"],
-  [126, "      <span class=\"cppd\">// TODO add parameters to message</span>"],
-  [127, "      <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get element from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-3405 sym\">e</span>);"],
-  [128, "    }"],
-  [129, "  }"],
-  [130, ""],
-  [131, "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-3562 sym\">containsKey</span>(Object <span class=\"sym-3581 sym\">key</span>) {"],
-  [132, "    resetKey(<span class=\"sym-3581 sym\">key</span>);"],
-  [133, "    <span class=\"k\">return </span><span class=\"sym-4050 sym\">doContainsKey</span>();"],
-  [134, "  }"],
-  [135, ""],
-  [136, "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-3657 sym\">containsKey</span>(Object <span class=\"sym-3676 sym\">firstKey</span>, Object <span class=\"sym-3693 sym\">secondKey</span>) {"],
-  [137, "    resetKey(<span class=\"sym-3676 sym\">firstKey</span>, <span class=\"sym-3693 sym\">secondKey</span>);"],
-  [138, "    <span class=\"k\">return </span><span class=\"sym-4050 sym\">doContainsKey</span>();"],
-  [139, "  }"],
-  [140, ""],
-  [141, "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-3791 sym\">containsKey</span>(Object <span class=\"sym-3810 sym\">firstKey</span>, Object <span class=\"sym-3827 sym\">secondKey</span>, Object <span class=\"sym-3845 sym\">thirdKey</span>) {"],
-  [142, "    resetKey(<span class=\"sym-3810 sym\">firstKey</span>, <span class=\"sym-3827 sym\">secondKey</span>, <span class=\"sym-3845 sym\">thirdKey</span>);"],
-  [143, "    <span class=\"k\">return </span><span class=\"sym-4050 sym\">doContainsKey</span>();"],
-  [144, "  }"],
-  [145, ""],
-  [146, "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-3952 sym\">containsKey</span>(Object[] <span class=\"sym-3973 sym\">key</span>) {"],
-  [147, "    resetKey(<span class=\"sym-3973 sym\">key</span>);"],
-  [148, "    <span class=\"k\">return </span><span class=\"sym-4050 sym\">doContainsKey</span>();"],
-  [149, "  }"],
-  [150, ""],
-  [151, "  <span class=\"k\">private </span><span class=\"k\">boolean </span><span class=\"sym-4050 sym\">doContainsKey</span>() {"],
-  [152, "    <span class=\"k\">try </span>{"],
-  [153, "      <span class=\"sym-1522 sym\">exchange</span>.fetch();"],
-  [154, "      <span class=\"k\">return </span><span class=\"sym-1522 sym\">exchange</span>.isValueDefined();"],
-  [155, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-4165 sym\">e</span>) {"],
-  [156, "      <span class=\"cppd\">// TODO add parameters to message</span>"],
-  [157, "      <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to check if element is in cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-4165 sym\">e</span>);"],
-  [158, "    }"],
-  [159, "  }"],
-  [160, ""],
-  [161, "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-4328 sym\">remove</span>(Object <span class=\"sym-4342 sym\">key</span>) {"],
-  [162, "    resetKey(<span class=\"sym-4342 sym\">key</span>);"],
-  [163, "    <span class=\"k\">return </span><span class=\"sym-4776 sym\">doRemove</span>();"],
-  [164, "  }"],
-  [165, ""],
-  [166, "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-4413 sym\">remove</span>(Object <span class=\"sym-4427 sym\">firstKey</span>, Object <span class=\"sym-4444 sym\">secondKey</span>) {"],
-  [167, "    resetKey(<span class=\"sym-4427 sym\">firstKey</span>, <span class=\"sym-4444 sym\">secondKey</span>);"],
-  [168, "    <span class=\"k\">return </span><span class=\"sym-4776 sym\">doRemove</span>();"],
-  [169, "  }"],
-  [170, ""],
-  [171, "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-4537 sym\">remove</span>(Object <span class=\"sym-4551 sym\">firstKey</span>, Object <span class=\"sym-4568 sym\">secondKey</span>, Object <span class=\"sym-4586 sym\">thirdKey</span>) {"],
-  [172, "    resetKey(<span class=\"sym-4551 sym\">firstKey</span>, <span class=\"sym-4568 sym\">secondKey</span>, <span class=\"sym-4586 sym\">thirdKey</span>);"],
-  [173, "    <span class=\"k\">return </span><span class=\"sym-4776 sym\">doRemove</span>();"],
-  [174, "  }"],
-  [175, ""],
-  [176, "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-4688 sym\">remove</span>(Object[] <span class=\"sym-4704 sym\">key</span>) {"],
-  [177, "    resetKey(<span class=\"sym-4704 sym\">key</span>);"],
-  [178, "    <span class=\"k\">return </span><span class=\"sym-4776 sym\">doRemove</span>();"],
-  [179, "  }"],
-  [180, ""],
-  [181, "  <span class=\"k\">private </span><span class=\"k\">boolean </span><span class=\"sym-4776 sym\">doRemove</span>() {"],
-  [182, "    <span class=\"k\">try </span>{"],
-  [183, "      <span class=\"k\">return </span><span class=\"sym-1522 sym\">exchange</span>.remove();"],
-  [184, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-4854 sym\">e</span>) {"],
-  [185, "      <span class=\"cppd\">// TODO add parameters to message</span>"],
-  [186, "      <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get element from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-4854 sym\">e</span>);"],
-  [187, "    }"],
-  [188, "  }"],
-  [189, ""],
-  [190, "  <span class=\"cppd\">/**</span>"],
-  [191, "<span class=\"cppd\">   * Removes everything in the specified group.</span>"],
-  [192, "<span class=\"cppd\">   *</span>"],
-  [193, "<span class=\"cppd\">   * @param group The group name.</span>"],
-  [194, "<span class=\"cppd\">   */</span>"],
-  [195, "  <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-5111 sym\">clear</span>(Object <span class=\"sym-5124 sym\">key</span>) {"],
-  [196, "    resetKey(<span class=\"sym-5124 sym\">key</span>);"],
-  [197, "    <span class=\"k\">return </span><span class=\"sym-5555 sym\">doClear</span>();"],
-  [198, "  }"],
-  [199, ""],
-  [200, "  <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-5195 sym\">clear</span>(Object <span class=\"sym-5208 sym\">firstKey</span>, Object <span class=\"sym-5225 sym\">secondKey</span>) {"],
-  [201, "    resetKey(<span class=\"sym-5208 sym\">firstKey</span>, <span class=\"sym-5225 sym\">secondKey</span>);"],
-  [202, "    <span class=\"k\">return </span><span class=\"sym-5555 sym\">doClear</span>();"],
-  [203, "  }"],
-  [204, ""],
-  [205, "  <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-5318 sym\">clear</span>(Object <span class=\"sym-5331 sym\">firstKey</span>, Object <span class=\"sym-5348 sym\">secondKey</span>, Object <span class=\"sym-5366 sym\">thirdKey</span>) {"],
-  [206, "    resetKey(<span class=\"sym-5331 sym\">firstKey</span>, <span class=\"sym-5348 sym\">secondKey</span>, <span class=\"sym-5366 sym\">thirdKey</span>);"],
-  [207, "    <span class=\"k\">return </span><span class=\"sym-5555 sym\">doClear</span>();"],
-  [208, "  }"],
-  [209, ""],
-  [210, "  <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-5468 sym\">clear</span>(Object[] <span class=\"sym-5483 sym\">key</span>) {"],
-  [211, "    resetKey(<span class=\"sym-5483 sym\">key</span>);"],
-  [212, "    <span class=\"k\">return </span><span class=\"sym-5555 sym\">doClear</span>();"],
-  [213, "  }"],
-  [214, ""],
-  [215, "  <span class=\"k\">private </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-5555 sym\">doClear</span>() {"],
-  [216, "    <span class=\"k\">try </span>{"],
-  [217, "      <span class=\"sym-1007 sym\">Key</span> <span class=\"sym-5587 sym\">to</span> = <span class=\"k\">new </span><span class=\"sym-1007 sym\">Key</span>(<span class=\"sym-1522 sym\">exchange</span>.getKey());"],
-  [218, "      <span class=\"sym-5587 sym\">to</span>.append(<span class=\"sym-1007 sym\">Key</span>.AFTER);"],
-  [219, "      <span class=\"sym-1522 sym\">exchange</span>.removeKeyRange(<span class=\"sym-1522 sym\">exchange</span>.getKey(), <span class=\"sym-5587 sym\">to</span>);"],
-  [220, "      <span class=\"k\">return </span><span class=\"k\">this</span>;"],
-  [221, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-5744 sym\">e</span>) {"],
-  [222, "      <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to clear values from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-5744 sym\">e</span>);"],
-  [223, "    }"],
-  [224, "  }"],
-  [225, ""],
-  [226, "  <span class=\"cppd\">/**</span>"],
-  [227, "<span class=\"cppd\">   * Clears the default as well as all group caches.</span>"],
-  [228, "<span class=\"cppd\">   */</span>"],
-  [229, "  <span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-5924 sym\">clear</span>() {"],
-  [230, "    <span class=\"k\">try </span>{"],
-  [231, "      <span class=\"sym-1522 sym\">exchange</span>.clear();"],
-  [232, "      <span class=\"sym-1522 sym\">exchange</span>.removeAll();"],
-  [233, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-6019 sym\">e</span>) {"],
-  [234, "      <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to clear cache\"</span>, <span class=\"sym-6019 sym\">e</span>);"],
-  [235, "    }"],
-  [236, "  }"],
-  [237, ""],
-  [238, "  <span class=\"cppd\">/**</span>"],
-  [239, "<span class=\"cppd\">   * Returns the set of cache keys associated with this group.</span>"],
-  [240, "<span class=\"cppd\">   * TODO implement a lazy-loading equivalent with Iterator/Iterable</span>"],
-  [241, "<span class=\"cppd\">   *</span>"],
-  [242, "<span class=\"cppd\">   * @param group The group.</span>"],
-  [243, "<span class=\"cppd\">   * @return The set of cache keys for this group.</span>"],
-  [244, "<span class=\"cppd\">   */</span>"],
-  [245, "  <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"rawtypes\"</span>)"],
-  [246, "  <span class=\"k\">public </span><span class=\"sym-1305 sym\">Set</span> <span class=\"sym-6374 sym\">keySet</span>(Object <span class=\"sym-6388 sym\">key</span>) {"],
-  [247, "    <span class=\"k\">try </span>{"],
-  [248, "      <span class=\"sym-1305 sym\">Set</span>&lt;Object&gt; <span class=\"sym-6423 sym\">keys</span> = <span class=\"sym-949 sym\">Sets</span>.newLinkedHashSet();"],
-  [249, "      <span class=\"sym-1522 sym\">exchange</span>.clear();"],
-  [250, "      <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-6494 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
-  [251, "      <span class=\"sym-6494 sym\">iteratorExchange</span>.append(<span class=\"sym-6388 sym\">key</span>);"],
-  [252, "      <span class=\"sym-6494 sym\">iteratorExchange</span>.append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
-  [253, "      <span class=\"k\">while </span>(<span class=\"sym-6494 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {"],
-  [254, "        <span class=\"sym-6423 sym\">keys</span>.add(<span class=\"sym-6494 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());"],
-  [255, "      }"],
-  [256, "      <span class=\"k\">return </span><span class=\"sym-6423 sym\">keys</span>;"],
-  [257, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-6777 sym\">e</span>) {"],
-  [258, "      <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-6777 sym\">e</span>);"],
-  [259, "    }"],
-  [260, "  }"],
-  [261, ""],
-  [262, "  <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"rawtypes\"</span>)"],
-  [263, "  <span class=\"k\">public </span><span class=\"sym-1305 sym\">Set</span> <span class=\"sym-6919 sym\">keySet</span>(Object <span class=\"sym-6933 sym\">firstKey</span>, Object <span class=\"sym-6950 sym\">secondKey</span>) {"],
-  [264, "    <span class=\"k\">try </span>{"],
-  [265, "      <span class=\"sym-1305 sym\">Set</span>&lt;Object&gt; <span class=\"sym-6991 sym\">keys</span> = <span class=\"sym-949 sym\">Sets</span>.newLinkedHashSet();"],
-  [266, "      <span class=\"sym-1522 sym\">exchange</span>.clear();"],
-  [267, "      <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-7062 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
-  [268, "      <span class=\"sym-7062 sym\">iteratorExchange</span>.append(<span class=\"sym-6933 sym\">firstKey</span>);"],
-  [269, "      <span class=\"sym-7062 sym\">iteratorExchange</span>.append(<span class=\"sym-6950 sym\">secondKey</span>);"],
-  [270, "      <span class=\"sym-7062 sym\">iteratorExchange</span>.append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
-  [271, "      <span class=\"k\">while </span>(<span class=\"sym-7062 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {"],
-  [272, "        <span class=\"sym-6991 sym\">keys</span>.add(<span class=\"sym-7062 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());"],
-  [273, "      }"],
-  [274, "      <span class=\"k\">return </span><span class=\"sym-6991 sym\">keys</span>;"],
-  [275, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-7392 sym\">e</span>) {"],
-  [276, "      <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-7392 sym\">e</span>);"],
-  [277, "    }"],
-  [278, "  }"],
-  [279, ""],
-  [280, "  <span class=\"cppd\">/**</span>"],
-  [281, "<span class=\"cppd\">   * Returns the set of keys associated with this cache.</span>"],
-  [282, "<span class=\"cppd\">   *</span>"],
-  [283, "<span class=\"cppd\">   * @return The set containing the keys for this cache.</span>"],
-  [284, "<span class=\"cppd\">   */</span>"],
-  [285, "  <span class=\"k\">public </span><span class=\"sym-1305 sym\">Set</span>&lt;Object&gt; <span class=\"sym-7641 sym\">keySet</span>() {"],
-  [286, "    <span class=\"k\">try </span>{"],
-  [287, "      <span class=\"sym-1305 sym\">Set</span>&lt;Object&gt; <span class=\"sym-7680 sym\">keys</span> = <span class=\"sym-949 sym\">Sets</span>.newLinkedHashSet();"],
-  [288, "      <span class=\"sym-1522 sym\">exchange</span>.clear();"],
-  [289, "      <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-7751 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
-  [290, "      <span class=\"sym-7751 sym\">iteratorExchange</span>.append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
-  [291, "      <span class=\"k\">while </span>(<span class=\"sym-7751 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {"],
-  [292, "        <span class=\"sym-7680 sym\">keys</span>.add(<span class=\"sym-7751 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());"],
-  [293, "      }"],
-  [294, "      <span class=\"k\">return </span><span class=\"sym-7680 sym\">keys</span>;"],
-  [295, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-7998 sym\">e</span>) {"],
-  [296, "      <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-7998 sym\">e</span>);"],
-  [297, "    }"],
-  [298, "  }"],
-  [299, ""],
-  [300, "  <span class=\"cppd\">/**</span>"],
-  [301, "<span class=\"cppd\">   * Lazy-loading values for given keys</span>"],
-  [302, "<span class=\"cppd\">   */</span>"],
-  [303, "  <span class=\"k\">public </span>Iterable&lt;V&gt; <span class=\"sym-8168 sym\">values</span>(Object <span class=\"sym-8182 sym\">firstKey</span>, Object <span class=\"sym-8199 sym\">secondKey</span>) {"],
-  [304, "    <span class=\"k\">try </span>{"],
-  [305, "      <span class=\"sym-1522 sym\">exchange</span>.clear();"],
-  [306, "      <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-8182 sym\">firstKey</span>).append(<span class=\"sym-8199 sym\">secondKey</span>).append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
-  [307, "      <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-8331 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
-  [308, "      <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-8390 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-8182 sym\">firstKey</span>)).append(<span class=\"sym-1033 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-8199 sym\">secondKey</span>));"],
-  [309, "      <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-10646 sym\">ValueIterable</span>&lt;V&gt;(<span class=\"sym-8331 sym\">iteratorExchange</span>, <span class=\"sym-8390 sym\">filter</span>);"],
-  [310, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-8579 sym\">e</span>) {"],
-  [311, "      <span class=\"k\">throw </span><span class=\"sym-8659 sym\">failToGetValues</span>(<span class=\"sym-8579 sym\">e</span>);"],
-  [312, "    }"],
-  [313, "  }"],
-  [314, ""],
-  [315, "  <span class=\"k\">private </span>IllegalStateException <span class=\"sym-8659 sym\">failToGetValues</span>(Exception <span class=\"sym-8685 sym\">e</span>) {"],
-  [316, "    <span class=\"k\">return </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get values from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-8685 sym\">e</span>);"],
-  [317, "  }"],
-  [318, ""],
-  [319, "  <span class=\"cppd\">/**</span>"],
-  [320, "<span class=\"cppd\">   * Lazy-loading values for a given key</span>"],
-  [321, "<span class=\"cppd\">   */</span>"],
-  [322, "  <span class=\"k\">public </span>Iterable&lt;V&gt; <span class=\"sym-8851 sym\">values</span>(Object <span class=\"sym-8865 sym\">firstKey</span>) {"],
-  [323, "    <span class=\"k\">try </span>{"],
-  [324, "      <span class=\"sym-1522 sym\">exchange</span>.clear();"],
-  [325, "      <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-8865 sym\">firstKey</span>).append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
-  [326, "      <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-8978 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
-  [327, "      <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-9037 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-8865 sym\">firstKey</span>));"],
-  [328, "      <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-10646 sym\">ValueIterable</span>&lt;V&gt;(<span class=\"sym-8978 sym\">iteratorExchange</span>, <span class=\"sym-9037 sym\">filter</span>);"],
-  [329, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-9186 sym\">e</span>) {"],
-  [330, "      <span class=\"k\">throw </span><span class=\"sym-8659 sym\">failToGetValues</span>(<span class=\"sym-9186 sym\">e</span>);"],
-  [331, "    }"],
-  [332, "  }"],
-  [333, ""],
-  [334, "  <span class=\"cppd\">/**</span>"],
-  [335, "<span class=\"cppd\">   * Lazy-loading values</span>"],
-  [336, "<span class=\"cppd\">   */</span>"],
-  [337, "  <span class=\"k\">public </span>Iterable&lt;V&gt; <span class=\"sym-9292 sym\">values</span>() {"],
-  [338, "    <span class=\"k\">try </span>{"],
-  [339, "      <span class=\"sym-1522 sym\">exchange</span>.clear().append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
-  [340, "      <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-9371 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
-  [341, "      <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-9430 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.ALL);"],
-  [342, "      <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-10646 sym\">ValueIterable</span>&lt;V&gt;(<span class=\"sym-9371 sym\">iteratorExchange</span>, <span class=\"sym-9430 sym\">filter</span>);"],
-  [343, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-9562 sym\">e</span>) {"],
-  [344, "      <span class=\"k\">throw </span><span class=\"sym-8659 sym\">failToGetValues</span>(<span class=\"sym-9562 sym\">e</span>);"],
-  [345, "    }"],
-  [346, "  }"],
-  [347, ""],
-  [348, "  <span class=\"k\">public </span>Iterable&lt;<span class=\"sym-13607 sym\">Entry</span>&lt;V&gt;&gt; <span class=\"sym-9638 sym\">entries</span>() {"],
-  [349, "    <span class=\"sym-1522 sym\">exchange</span>.clear().to(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
-  [350, "    <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-9701 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.ALL);"],
-  [351, "    <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-11992 sym\">EntryIterable</span>&lt;V&gt;(<span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>), <span class=\"sym-9701 sym\">filter</span>);"],
-  [352, "  }"],
-  [353, ""],
-  [354, "  <span class=\"k\">public </span>Iterable&lt;<span class=\"sym-13607 sym\">Entry</span>&lt;V&gt;&gt; <span class=\"sym-9847 sym\">entries</span>(Object <span class=\"sym-9862 sym\">firstKey</span>) {"],
-  [355, "    <span class=\"sym-1522 sym\">exchange</span>.clear().append(<span class=\"sym-9862 sym\">firstKey</span>).append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
-  [356, "    <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-9946 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-9862 sym\">firstKey</span>));"],
-  [357, "    <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-11992 sym\">EntryIterable</span>&lt;V&gt;(<span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>), <span class=\"sym-9946 sym\">filter</span>);"],
-  [358, "  }"],
-  [359, ""],
-  [360, "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-10096 sym\">resetKey</span>(Object <span class=\"sym-10112 sym\">key</span>) {"],
-  [361, "    <span class=\"sym-1522 sym\">exchange</span>.clear();"],
-  [362, "    <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-10112 sym\">key</span>);"],
-  [363, "  }"],
-  [364, ""],
-  [365, "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-10187 sym\">resetKey</span>(Object <span class=\"sym-10203 sym\">first</span>, Object <span class=\"sym-10217 sym\">second</span>) {"],
-  [366, "    <span class=\"sym-1522 sym\">exchange</span>.clear();"],
-  [367, "    <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-10203 sym\">first</span>).append(<span class=\"sym-10217 sym\">second</span>);"],
-  [368, "  }"],
-  [369, ""],
-  [370, "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-10312 sym\">resetKey</span>(Object <span class=\"sym-10328 sym\">first</span>, Object <span class=\"sym-10342 sym\">second</span>, Object <span class=\"sym-10357 sym\">third</span>) {"],
-  [371, "    <span class=\"sym-1522 sym\">exchange</span>.clear();"],
-  [372, "    <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-10328 sym\">first</span>).append(<span class=\"sym-10342 sym\">second</span>).append(<span class=\"sym-10357 sym\">third</span>);"],
-  [373, "  }"],
-  [374, ""],
-  [375, "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-10465 sym\">resetKey</span>(Object[] <span class=\"sym-10483 sym\">keys</span>) {"],
-  [376, "    <span class=\"sym-1522 sym\">exchange</span>.clear();"],
-  [377, "    <span class=\"k\">for </span>(Object <span class=\"sym-10529 sym\">o</span> : <span class=\"sym-10483 sym\">keys</span>) {"],
-  [378, "      <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-10529 sym\">o</span>);"],
-  [379, "    }"],
-  [380, "  }"],
-  [381, ""],
-  [382, "  <span class=\"cppd\">//</span>"],
-  [383, "  <span class=\"cppd\">// LAZY ITERATORS AND ITERABLES</span>"],
-  [384, "  <span class=\"cppd\">//</span>"],
-  [385, ""],
-  [386, "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-10646 sym\">ValueIterable</span>&lt;T <span class=\"k\">extends </span>Serializable&gt; <span class=\"k\">implements </span>Iterable&lt;T&gt; {"],
-  [387, "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-1237 sym\">Iterator</span>&lt;T&gt; <span class=\"sym-10739 sym\">iterator</span>;"],
-  [388, ""],
-  [389, "    <span class=\"k\">private </span><span class=\"sym-10762 sym\">ValueIterable</span>(<span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-10785 sym\">exchange</span>, <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-10805 sym\">keyFilter</span>) {"],
-  [390, "      <span class=\"k\">this</span>.<span class=\"sym-10739 sym\">iterator</span> = <span class=\"k\">new </span><span class=\"sym-10997 sym\">ValueIterator</span>&lt;T&gt;(<span class=\"sym-10785 sym\">exchange</span>, <span class=\"sym-10805 sym\">keyFilter</span>);"],
-  [391, "    }"],
-  [392, ""],
-  [393, "    <span class=\"a\">@Override</span>"],
-  [394, "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"sym-1237 sym\">Iterator</span>&lt;T&gt; <span class=\"sym-10927 sym\">iterator</span>() {"],
-  [395, "      <span class=\"k\">return </span><span class=\"sym-10739 sym\">iterator</span>;"],
-  [396, "    }"],
-  [397, "  }"],
-  [398, ""],
-  [399, "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-10997 sym\">ValueIterator</span>&lt;T <span class=\"k\">extends </span>Serializable&gt; <span class=\"k\">implements </span><span class=\"sym-1237 sym\">Iterator</span>&lt;T&gt; {"],
-  [400, "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-11087 sym\">exchange</span>;"],
-  [401, "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-11125 sym\">keyFilter</span>;"],
-  [402, ""],
-  [403, "    <span class=\"k\">private </span><span class=\"sym-11149 sym\">ValueIterator</span>(<span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-11172 sym\">exchange</span>, <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-11192 sym\">keyFilter</span>) {"],
-  [404, "      <span class=\"k\">this</span>.<span class=\"sym-11087 sym\">exchange</span> = <span class=\"sym-11172 sym\">exchange</span>;"],
-  [405, "      <span class=\"k\">this</span>.<span class=\"sym-11125 sym\">keyFilter</span> = <span class=\"sym-11192 sym\">keyFilter</span>;"],
-  [406, "    }"],
-  [407, ""],
-  [408, "    <span class=\"a\">@Override</span>"],
-  [409, "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-11311 sym\">hasNext</span>() {"],
-  [410, "      <span class=\"k\">try </span>{"],
-  [411, "        <span class=\"k\">return </span><span class=\"sym-11087 sym\">exchange</span>.hasNext(<span class=\"sym-11125 sym\">keyFilter</span>);"],
-  [412, "      } <span class=\"k\">catch </span>(<span class=\"sym-1075 sym\">PersistitException</span> <span class=\"sym-11413 sym\">e</span>) {"],
-  [413, "        <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"sym-11413 sym\">e</span>);"],
-  [414, "      }"],
-  [415, "    }"],
-  [416, ""],
-  [417, "    <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)"],
-  [418, "    <span class=\"a\">@Override</span>"],
-  [419, "<span class=\"a\">    </span><span class=\"k\">public </span>T <span class=\"sym-11539 sym\">next</span>() {"],
-  [420, "      <span class=\"k\">try </span>{"],
-  [421, "        <span class=\"sym-11087 sym\">exchange</span>.next(<span class=\"sym-11125 sym\">keyFilter</span>);"],
-  [422, "      } <span class=\"k\">catch </span>(<span class=\"sym-1075 sym\">PersistitException</span> <span class=\"sym-11628 sym\">e</span>) {"],
-  [423, "        <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"sym-11628 sym\">e</span>);"],
-  [424, "      }"],
-  [425, "      <span class=\"k\">if </span>(<span class=\"sym-11087 sym\">exchange</span>.getValue().isDefined()) {"],
-  [426, "        <span class=\"k\">return </span>(T) <span class=\"sym-11087 sym\">exchange</span>.getValue().get();"],
-  [427, "      }"],
-  [428, "      <span class=\"k\">throw </span><span class=\"k\">new </span><span class=\"sym-1264 sym\">NoSuchElementException</span>();"],
-  [429, "    }"],
-  [430, ""],
-  [431, "    <span class=\"a\">@Override</span>"],
-  [432, "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-11863 sym\">remove</span>() {"],
-  [433, "      <span class=\"k\">throw </span><span class=\"k\">new </span>UnsupportedOperationException(<span class=\"s\">\"Removing an item is not supported\"</span>);"],
-  [434, "    }"],
-  [435, "  }"],
-  [436, ""],
-  [437, "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-11992 sym\">EntryIterable</span>&lt;T <span class=\"k\">extends </span>Serializable&gt; <span class=\"k\">implements </span>Iterable&lt;<span class=\"sym-13607 sym\">Entry</span>&lt;T&gt;&gt; {"],
-  [438, "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-12339 sym\">EntryIterator</span>&lt;T&gt; <span class=\"sym-12097 sym\">it</span>;"],
-  [439, ""],
-  [440, "    <span class=\"k\">private </span><span class=\"sym-12114 sym\">EntryIterable</span>(<span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-12137 sym\">exchange</span>, <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-12157 sym\">keyFilter</span>) {"],
-  [441, "      <span class=\"sym-12097 sym\">it</span> = <span class=\"k\">new </span><span class=\"sym-12339 sym\">EntryIterator</span>&lt;T&gt;(<span class=\"sym-12137 sym\">exchange</span>, <span class=\"sym-12157 sym\">keyFilter</span>);"],
-  [442, "    }"],
-  [443, ""],
-  [444, "    <span class=\"a\">@Override</span>"],
-  [445, "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"sym-1237 sym\">Iterator</span>&lt;<span class=\"sym-13607 sym\">Entry</span>&lt;T&gt;&gt; <span class=\"sym-12275 sym\">iterator</span>() {"],
-  [446, "      <span class=\"k\">return </span><span class=\"sym-12097 sym\">it</span>;"],
-  [447, "    }"],
-  [448, "  }"],
-  [449, ""],
-  [450, "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-12339 sym\">EntryIterator</span>&lt;T <span class=\"k\">extends </span>Serializable&gt; <span class=\"k\">implements </span><span class=\"sym-1237 sym\">Iterator</span>&lt;<span class=\"sym-13607 sym\">Entry</span>&lt;T&gt;&gt; {"],
-  [451, "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-12436 sym\">exchange</span>;"],
-  [452, "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-12474 sym\">keyFilter</span>;"],
-  [453, ""],
-  [454, "    <span class=\"k\">private </span><span class=\"sym-12498 sym\">EntryIterator</span>(<span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-12521 sym\">exchange</span>, <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-12541 sym\">keyFilter</span>) {"],
-  [455, "      <span class=\"k\">this</span>.<span class=\"sym-12436 sym\">exchange</span> = <span class=\"sym-12521 sym\">exchange</span>;"],
-  [456, "      <span class=\"k\">this</span>.<span class=\"sym-12474 sym\">keyFilter</span> = <span class=\"sym-12541 sym\">keyFilter</span>;"],
-  [457, "    }"],
-  [458, ""],
-  [459, "    <span class=\"a\">@Override</span>"],
-  [460, "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-12660 sym\">hasNext</span>() {"],
-  [461, "      <span class=\"k\">try </span>{"],
-  [462, "        <span class=\"k\">return </span><span class=\"sym-12436 sym\">exchange</span>.hasNext(<span class=\"sym-12474 sym\">keyFilter</span>);"],
-  [463, "      } <span class=\"k\">catch </span>(<span class=\"sym-1075 sym\">PersistitException</span> <span class=\"sym-12762 sym\">e</span>) {"],
-  [464, "        <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"sym-12762 sym\">e</span>);"],
-  [465, "      }"],
-  [466, "    }"],
-  [467, ""],
-  [468, "    <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)"],
-  [469, "    <span class=\"a\">@Override</span>"],
-  [470, "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"sym-13607 sym\">Entry</span>&lt;T&gt; <span class=\"sym-12895 sym\">next</span>() {"],
-  [471, "      <span class=\"k\">try </span>{"],
-  [472, "        <span class=\"sym-12436 sym\">exchange</span>.next(<span class=\"sym-12474 sym\">keyFilter</span>);"],
-  [473, "      } <span class=\"k\">catch </span>(<span class=\"sym-1075 sym\">PersistitException</span> <span class=\"sym-12984 sym\">e</span>) {"],
-  [474, "        <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"sym-12984 sym\">e</span>);"],
-  [475, "      }"],
-  [476, "      <span class=\"k\">if </span>(<span class=\"sym-12436 sym\">exchange</span>.getValue().isDefined()) {"],
-  [477, "        T <span class=\"sym-13096 sym\">value</span> = (T) <span class=\"sym-12436 sym\">exchange</span>.getValue().get();"],
-  [478, "        <span class=\"sym-1007 sym\">Key</span> <span class=\"sym-13147 sym\">key</span> = <span class=\"sym-12436 sym\">exchange</span>.getKey();"],
-  [479, "        Object[] <span class=\"sym-13189 sym\">array</span> = <span class=\"k\">new </span>Object[<span class=\"sym-13147 sym\">key</span>.getDepth()];"],
-  [480, "        <span class=\"k\">for </span>(<span class=\"k\">int </span><span class=\"sym-13242 sym\">i</span> = <span class=\"c\">0</span>; <span class=\"sym-13242 sym\">i</span> &lt; <span class=\"sym-13147 sym\">key</span>.getDepth(); <span class=\"sym-13242 sym\">i</span>++) {"],
-  [481, "          <span class=\"sym-13189 sym\">array</span>[<span class=\"sym-13242 sym\">i</span>] = <span class=\"sym-13147 sym\">key</span>.indexTo(<span class=\"sym-13242 sym\">i</span> - <span class=\"sym-13147 sym\">key</span>.getDepth()).decode();"],
-  [482, "        }"],
-  [483, "        <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-13607 sym\">Entry</span>&lt;T&gt;(<span class=\"sym-13189 sym\">array</span>, <span class=\"sym-13096 sym\">value</span>);"],
-  [484, "      }"],
-  [485, "      <span class=\"k\">throw </span><span class=\"k\">new </span><span class=\"sym-1264 sym\">NoSuchElementException</span>();"],
-  [486, "    }"],
-  [487, ""],
-  [488, "    <span class=\"a\">@Override</span>"],
-  [489, "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-13479 sym\">remove</span>() {"],
-  [490, "      <span class=\"k\">throw </span><span class=\"k\">new </span>UnsupportedOperationException(<span class=\"s\">\"Removing an item is not supported\"</span>);"],
-  [491, "    }"],
-  [492, "  }"],
-  [493, ""],
-  [494, "  <span class=\"k\">public </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-13607 sym\">Entry</span>&lt;V <span class=\"k\">extends </span>Serializable&gt; {"],
-  [495, "    <span class=\"k\">private </span><span class=\"k\">final </span>Object[] <span class=\"sym-13666 sym\">key</span>;"],
-  [496, "    <span class=\"k\">private </span><span class=\"k\">final </span>V <span class=\"sym-13691 sym\">value</span>;"],
-  [497, ""],
-  [498, "    <span class=\"sym-13703 sym\">Entry</span>(Object[] <span class=\"sym-13718 sym\">key</span>, V <span class=\"sym-13725 sym\">value</span>) {"],
-  [499, "      <span class=\"k\">this</span>.<span class=\"sym-13666 sym\">key</span> = <span class=\"sym-13718 sym\">key</span>;"],
-  [500, "      <span class=\"k\">this</span>.<span class=\"sym-13691 sym\">value</span> = <span class=\"sym-13725 sym\">value</span>;"],
-  [501, "    }"],
-  [502, ""],
-  [503, "    <span class=\"k\">public </span>Object[] <span class=\"sym-13809 sym\">key</span>() {"],
-  [504, "      <span class=\"k\">return </span><span class=\"sym-13666 sym\">key</span>;"],
-  [505, "    }"],
-  [506, ""],
-  [507, "    <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
-  [508, "<span class=\"a\">    </span><span class=\"k\">public </span>V <span class=\"sym-13873 sym\">value</span>() {"],
-  [509, "      <span class=\"k\">return </span><span class=\"sym-13691 sym\">value</span>;"],
-  [510, "    }"],
-  [511, ""],
-  [512, "    <span class=\"a\">@Override</span>"],
-  [513, "<span class=\"a\">    </span><span class=\"k\">public </span>String <span class=\"sym-13942 sym\">toString</span>() {"],
-  [514, "      <span class=\"k\">return </span><span class=\"sym-1134 sym\">ToStringBuilder</span>.reflectionToString(<span class=\"k\">this</span>);"],
-  [515, "    }"],
-  [516, "  }"],
-  [517, ""],
-  [518, "}"],
-  [519, ""]
-]}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/test-cases.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/test-cases.json
deleted file mode 100644 (file)
index 233229a..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-{"tests": [
-  {
-    "name": "should_update_existing_issue",
-    "status": "OK",
-    "durationInMs": 293,
-    "_ref": "1"
-  },
-  {
-    "name": "testDistributionMeasure",
-    "status": "OK",
-    "durationInMs": 148,
-    "_ref": "2"
-  },
-  {
-    "name": "one_part_key",
-    "status": "OK",
-    "durationInMs": 96,
-    "_ref": "3"
-  },
-  {
-    "name": "testIssueExclusion",
-    "status": "OK",
-    "durationInMs": 305,
-    "_ref": "4"
-  },
-  {
-    "name": "should_add_measure_with_same_metric",
-    "status": "OK",
-    "durationInMs": 141,
-    "_ref": "5"
-  },
-  {
-    "name": "should_create_cache",
-    "status": "OK",
-    "durationInMs": 81,
-    "_ref": "6"
-  },
-  {
-    "name": "scanProjectWithMixedSourcesAndTests",
-    "status": "OK",
-    "durationInMs": 239,
-    "_ref": "7"
-  },
-  {
-    "name": "remove_versus_clear",
-    "status": "OK",
-    "durationInMs": 111,
-    "_ref": "3"
-  },
-  {
-    "name": "should_persist_component_data",
-    "status": "OK",
-    "durationInMs": 132,
-    "_ref": "8"
-  },
-  {
-    "name": "scanProjectWithSourceDir",
-    "status": "OK",
-    "durationInMs": 212,
-    "_ref": "7"
-  },
-  {
-    "name": "should_add_measure_with_too_big_data_for_persistit",
-    "status": "OK",
-    "durationInMs": 336,
-    "_ref": "5"
-  },
-  {
-    "name": "failForDuplicateInputFile",
-    "status": "OK",
-    "durationInMs": 127,
-    "_ref": "7"
-  },
-  {
-    "name": "should_not_create_cache_twice",
-    "status": "OK",
-    "durationInMs": 101,
-    "_ref": "6"
-  },
-  {
-    "name": "should_get_and_set_data",
-    "status": "OK",
-    "durationInMs": 190,
-    "_ref": "9"
-  },
-  {
-    "name": "should_add_input_file",
-    "status": "OK",
-    "durationInMs": 122,
-    "_ref": "10"
-  },
-  {
-    "name": "scanTempProject",
-    "status": "OK",
-    "durationInMs": 345,
-    "_ref": "4"
-  },
-  {
-    "name": "should_get_measures",
-    "status": "OK",
-    "durationInMs": 114,
-    "_ref": "5"
-  },
-  {
-    "name": "test_key_being_prefix_of_another_key",
-    "status": "OK",
-    "durationInMs": 94,
-    "_ref": "3"
-  },
-  {
-    "name": "should_add_measure_with_big_data",
-    "status": "OK",
-    "durationInMs": 242,
-    "_ref": "5"
-  },
-  {
-    "name": "should_get_all_issues",
-    "status": "OK",
-    "durationInMs": 104,
-    "_ref": "1"
-  },
-  {
-    "name": "should_add_measure",
-    "status": "OK",
-    "durationInMs": 117,
-    "_ref": "5"
-  },
-  {
-    "name": "computeMeasuresOnSampleProject",
-    "status": "OK",
-    "durationInMs": 315,
-    "_ref": "2"
-  },
-  {
-    "name": "test_measure_coder",
-    "status": "OK",
-    "durationInMs": 110,
-    "_ref": "5"
-  },
-  {
-    "name": "should_add_measure_with_too_big_data_for_persistit_pre_patch",
-    "status": "OK",
-    "durationInMs": 821,
-    "_ref": "5"
-  },
-  {
-    "name": "three_parts_key",
-    "status": "OK",
-    "durationInMs": 122,
-    "_ref": "3"
-  },
-  {
-    "name": "two_parts_key",
-    "status": "OK",
-    "durationInMs": 118,
-    "_ref": "3"
-  },
-  {
-    "name": "should_add_new_issue",
-    "status": "OK",
-    "durationInMs": 95,
-    "_ref": "1"
-  },
-  {
-    "name": "empty_cache",
-    "status": "OK",
-    "durationInMs": 104,
-    "_ref": "3"
-  },
-  {
-    "name": "scanProjectWithTestDir",
-    "status": "OK",
-    "durationInMs": 322,
-    "_ref": "7"
-  },
-  {
-    "name": "scanSampleProject",
-    "status": "OK",
-    "durationInMs": 184,
-    "_ref": "4"
-  },
-  {
-    "name": "computeMeasuresOnTempProject",
-    "status": "OK",
-    "durationInMs": 274,
-    "_ref": "2"
-  },
-  {
-    "name": "should_get_and_set_string_data",
-    "status": "OK",
-    "durationInMs": 95,
-    "_ref": "9"
-  }
-], "files": {
-  "3": {
-    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/index/CacheTest.java",
-    "longName": "src/test/java/org/sonar/batch/index/CacheTest.java"
-  },
-  "1": {
-    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/issue/IssueCacheTest.java",
-    "longName": "src/test/java/org/sonar/batch/issue/IssueCacheTest.java"
-  },
-  "4": {
-    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java",
-    "longName": "src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java"
-  },
-  "2": {
-    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java",
-    "longName": "src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java"
-  },
-  "8": {
-    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/index/ComponentDataPersisterTest.java",
-    "longName": "src/test/java/org/sonar/batch/index/ComponentDataPersisterTest.java"
-  },
-  "9": {
-    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/index/ComponentDataCacheTest.java",
-    "longName": "src/test/java/org/sonar/batch/index/ComponentDataCacheTest.java"
-  },
-  "10": {
-    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/scan/filesystem/InputFileCacheTest.java",
-    "longName": "src/test/java/org/sonar/batch/scan/filesystem/InputFileCacheTest.java"
-  },
-  "7": {
-    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/mediumtest/fs/FileSystemMediumTest.java",
-    "longName": "src/test/java/org/sonar/batch/mediumtest/fs/FileSystemMediumTest.java"
-  },
-  "5": {
-    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/scan/measure/MeasureCacheTest.java",
-    "longName": "src/test/java/org/sonar/batch/scan/measure/MeasureCacheTest.java"
-  },
-  "6": {
-    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/index/CachesTest.java",
-    "longName": "src/test/java/org/sonar/batch/index/CachesTest.java"
-  }
-}}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/tests/app.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/tests/app.json
deleted file mode 100644 (file)
index 873632f..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-  "uuid": "12345",
-  "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/CacheTest.java",
-  "path": "src/test/java/org/sonar/batch/index/CacheTest.java",
-  "name": "CacheTest.java",
-  "longName": "src/test/java/org/sonar/batch/index/CacheTest.java",
-  "q": "UTS",
-  "subProject": "org.codehaus.sonar:sonar-batch",
-  "subProjectName": "SonarQube :: Batch",
-  "project": "org.codehaus.sonar:sonar",
-  "projectName": "SonarQube",
-  "fav": false,
-  "canMarkAsFavourite": true,
-  "canCreateManualIssue": true,
-  "measures": {
-    "tests": "6"
-  }
-}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/tests/lines.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/tests/lines.json
deleted file mode 100644 (file)
index becc8c9..0000000
+++ /dev/null
@@ -1,1808 +0,0 @@
-{"sources": [
-  {
-    "line": 1,
-    "code": "/*",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 2,
-    "code": " * SonarQube, open source software quality management tool.",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
-    "scmDate": "2013-04-21T11:58:14+0200"
-  },
-  {
-    "line": 3,
-    "code": " * Copyright (C) 2008-2014 SonarSource",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "57ae3026c36ae3b0b71756d6161124b1ae594c53",
-    "scmDate": "2014-03-11T17:52:41+0100"
-  },
-  {
-    "line": 4,
-    "code": " * mailto:contact AT sonarsource DOT com",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 5,
-    "code": " *",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 6,
-    "code": " * SonarQube is free software; you can redistribute it and/or",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
-    "scmDate": "2013-04-21T11:58:14+0200"
-  },
-  {
-    "line": 7,
-    "code": " * modify it under the terms of the GNU Lesser General Public",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 8,
-    "code": " * License as published by the Free Software Foundation; either",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 9,
-    "code": " * version 3 of the License, or (at your option) any later version.",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 10,
-    "code": " *",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 11,
-    "code": " * SonarQube is distributed in the hope that it will be useful,",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
-    "scmDate": "2013-04-21T11:58:14+0200"
-  },
-  {
-    "line": 12,
-    "code": " * but WITHOUT ANY WARRANTY; without even the implied warranty of",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 13,
-    "code": " * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 14,
-    "code": " * Lesser General Public License for more details.",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 15,
-    "code": " *",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 16,
-    "code": " * You should have received a copy of the GNU Lesser General Public License",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
-    "scmDate": "2013-04-22T09:37:03+0200"
-  },
-  {
-    "line": 17,
-    "code": " * along with this program; if not, write to the Free Software Foundation,",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
-    "scmDate": "2013-04-22T09:37:03+0200"
-  },
-  {
-    "line": 18,
-    "code": " * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
-    "scmDate": "2013-04-22T09:37:03+0200"
-  },
-  {
-    "line": 19,
-    "code": " */",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 20,
-    "code": "package org.sonar.batch.index;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 21,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 22,
-    "code": "import com.google.common.collect.Iterables;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 23,
-    "code": "import org.junit.After;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 24,
-    "code": "import org.junit.Before;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 25,
-    "code": "import org.junit.Rule;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 26,
-    "code": "import org.junit.Test;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 27,
-    "code": "import org.junit.rules.TemporaryFolder;",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "18a4c15b060d1b56f08826bf6006d08eaf2625ec",
-    "scmDate": "2013-10-15T17:14:44+0200"
-  },
-  {
-    "line": 28,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 29,
-    "code": "import static org.fest.assertions.Assertions.assertThat;",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 30,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 31,
-    "code": "public class CacheTest {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 32,
-    "code": "",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "18a4c15b060d1b56f08826bf6006d08eaf2625ec",
-    "scmDate": "2013-10-15T17:14:44+0200"
-  },
-  {
-    "line": 33,
-    "code": "  @Rule",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 34,
-    "code": "  public TemporaryFolder temp = new TemporaryFolder();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 35,
-    "code": "",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "18a4c15b060d1b56f08826bf6006d08eaf2625ec",
-    "scmDate": "2013-10-15T17:14:44+0200"
-  },
-  {
-    "line": 36,
-    "code": "  Caches caches;",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "18a4c15b060d1b56f08826bf6006d08eaf2625ec",
-    "scmDate": "2013-10-15T17:14:44+0200"
-  },
-  {
-    "line": 37,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 38,
-    "code": "  @Before",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 39,
-    "code": "  public void start() throws Exception {",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "18a4c15b060d1b56f08826bf6006d08eaf2625ec",
-    "scmDate": "2013-10-15T17:14:44+0200"
-  },
-  {
-    "line": 40,
-    "code": "    caches = CachesTest.createCacheOnTemp(temp);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "18a4c15b060d1b56f08826bf6006d08eaf2625ec",
-    "scmDate": "2013-10-15T17:14:44+0200"
-  },
-  {
-    "line": 41,
-    "code": "    caches.start();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 42,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 43,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 44,
-    "code": "  @After",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 45,
-    "code": "  public void stop() {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 46,
-    "code": "    caches.stop();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 47,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 48,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 49,
-    "code": "  @Test",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 50,
-    "code": "  public void one_part_key() throws Exception {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 51,
-    "code": "    Cache&lt;String&gt; cache = caches.createCache(\"capitals\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 52,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 53,
-    "code": "    assertThat(cache.get(\"france\")).isNull();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 54,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 55,
-    "code": "    cache.put(\"france\", \"paris\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 56,
-    "code": "    cache.put(\"italy\", \"rome\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 57,
-    "code": "    assertThat(cache.get(\"france\")).isEqualTo(\"paris\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 58,
-    "code": "    assertThat(cache.keySet()).containsOnly(\"france\", \"italy\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 59,
-    "code": "    assertThat(cache.keySet(\"france\")).isEmpty();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 60,
-    "code": "    assertThat(cache.values()).containsOnly(\"paris\", \"rome\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 61,
-    "code": "    assertThat(cache.containsKey(\"france\")).isTrue();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 62,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 63,
-    "code": "    Cache.Entry[] entries = Iterables.toArray(cache.entries(), Cache.Entry.class);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "db81d934752174207268c49658963ba98665794b",
-    "scmDate": "2014-02-20T07:35:27+0100"
-  },
-  {
-    "line": 64,
-    "code": "    assertThat(entries).hasSize(2);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 65,
-    "code": "    assertThat(entries[0].key()[0]).isEqualTo(\"france\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 66,
-    "code": "    assertThat(entries[0].value()).isEqualTo(\"paris\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 67,
-    "code": "    assertThat(entries[1].key()[0]).isEqualTo(\"italy\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 68,
-    "code": "    assertThat(entries[1].value()).isEqualTo(\"rome\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 69,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 70,
-    "code": "    cache.remove(\"france\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 71,
-    "code": "    assertThat(cache.get(\"france\")).isNull();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 72,
-    "code": "    assertThat(cache.get(\"italy\")).isEqualTo(\"rome\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 73,
-    "code": "    assertThat(cache.keySet()).containsOnly(\"italy\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 74,
-    "code": "    assertThat(cache.keySet(\"france\")).isEmpty();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 75,
-    "code": "    assertThat(cache.containsKey(\"france\")).isFalse();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 76,
-    "code": "    assertThat(cache.containsKey(\"italy\")).isTrue();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 77,
-    "code": "    assertThat(cache.values()).containsOnly(\"rome\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 78,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 79,
-    "code": "    cache.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 80,
-    "code": "    assertThat(cache.values()).isEmpty();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 81,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 82,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 83,
-    "code": "  @Test",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 84,
-    "code": "  public void test_key_being_prefix_of_another_key() throws Exception {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
-    "scmDate": "2013-05-31T12:42:59+0200"
-  },
-  {
-    "line": 85,
-    "code": "    Cache&lt;String&gt; cache = caches.createCache(\"components\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 86,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
-    "scmDate": "2013-05-31T12:42:59+0200"
-  },
-  {
-    "line": 87,
-    "code": "    cache.put(\"struts-el:org.apache.strutsel.taglib.html.ELButtonTag\", \"the Tag\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
-    "scmDate": "2013-05-31T12:42:59+0200"
-  },
-  {
-    "line": 88,
-    "code": "    cache.put(\"struts-el:org.apache.strutsel.taglib.html.ELButtonTagBeanInfo\", \"the BeanInfo\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
-    "scmDate": "2013-05-31T12:42:59+0200"
-  },
-  {
-    "line": 89,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
-    "scmDate": "2013-05-31T12:42:59+0200"
-  },
-  {
-    "line": 90,
-    "code": "    assertThat(cache.get(\"struts-el:org.apache.strutsel.taglib.html.ELButtonTag\")).isEqualTo(\"the Tag\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
-    "scmDate": "2013-05-31T12:42:59+0200"
-  },
-  {
-    "line": 91,
-    "code": "    assertThat(cache.get(\"struts-el:org.apache.strutsel.taglib.html.ELButtonTagBeanInfo\")).isEqualTo(\"the BeanInfo\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
-    "scmDate": "2013-05-31T12:42:59+0200"
-  },
-  {
-    "line": 92,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
-    "scmDate": "2013-05-31T12:42:59+0200"
-  },
-  {
-    "line": 93,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
-    "scmDate": "2013-05-31T12:42:59+0200"
-  },
-  {
-    "line": 94,
-    "code": "  @Test",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
-    "scmDate": "2013-05-31T12:42:59+0200"
-  },
-  {
-    "line": 95,
-    "code": "  public void two_parts_key() throws Exception {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 96,
-    "code": "    Cache&lt;String&gt; cache = caches.createCache(\"capitals\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 97,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 98,
-    "code": "    assertThat(cache.get(\"europe\", \"france\")).isNull();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 99,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 100,
-    "code": "    cache.put(\"europe\", \"france\", \"paris\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 101,
-    "code": "    cache.put(\"europe\", \"italy\", \"rome\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 102,
-    "code": "    cache.put(\"asia\", \"china\", \"pekin\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 103,
-    "code": "    assertThat(cache.get(\"europe\")).isNull();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 104,
-    "code": "    assertThat(cache.get(\"europe\", \"france\")).isEqualTo(\"paris\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 105,
-    "code": "    assertThat(cache.get(\"europe\", \"italy\")).isEqualTo(\"rome\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 106,
-    "code": "    assertThat(cache.get(\"europe\")).isNull();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 107,
-    "code": "    assertThat(cache.keySet(\"europe\")).containsOnly(\"france\", \"italy\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 108,
-    "code": "    assertThat(cache.keySet()).containsOnly(\"europe\", \"asia\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 109,
-    "code": "    assertThat(cache.containsKey(\"europe\")).isFalse();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 110,
-    "code": "    assertThat(cache.containsKey(\"europe\", \"france\")).isTrue();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 111,
-    "code": "    assertThat(cache.containsKey(\"europe\", \"spain\")).isFalse();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 112,
-    "code": "    assertThat(cache.values()).containsOnly(\"paris\", \"rome\", \"pekin\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 113,
-    "code": "    assertThat(cache.values(\"america\")).isEmpty();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 114,
-    "code": "    assertThat(cache.values(\"europe\")).containsOnly(\"paris\", \"rome\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 115,
-    "code": "    assertThat(cache.values(\"oceania\")).isEmpty();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 116,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 117,
-    "code": "    Cache.Entry[] allEntries = Iterables.toArray(cache.entries(), Cache.Entry.class);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "db81d934752174207268c49658963ba98665794b",
-    "scmDate": "2014-02-20T07:35:27+0100"
-  },
-  {
-    "line": 118,
-    "code": "    assertThat(allEntries).hasSize(3);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 119,
-    "code": "    assertThat(allEntries[0].key()).isEqualTo(new String[] {\"asia\", \"china\"});",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 120,
-    "code": "    assertThat(allEntries[0].value()).isEqualTo(\"pekin\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 121,
-    "code": "    assertThat(allEntries[1].key()).isEqualTo(new String[] {\"europe\", \"france\"});",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 122,
-    "code": "    assertThat(allEntries[1].value()).isEqualTo(\"paris\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 123,
-    "code": "    assertThat(allEntries[2].key()).isEqualTo(new String[] {\"europe\", \"italy\"});",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 124,
-    "code": "    assertThat(allEntries[2].value()).isEqualTo(\"rome\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 125,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 126,
-    "code": "    Cache.Entry[] subEntries = Iterables.toArray(cache.entries(\"europe\"), Cache.Entry.class);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 127,
-    "code": "    assertThat(subEntries).hasSize(2);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 128,
-    "code": "    assertThat(subEntries[0].key()).isEqualTo(new String[] {\"europe\", \"france\"});",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 129,
-    "code": "    assertThat(subEntries[0].value()).isEqualTo(\"paris\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 130,
-    "code": "    assertThat(subEntries[1].key()).isEqualTo(new String[] {\"europe\", \"italy\"});",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 131,
-    "code": "    assertThat(subEntries[1].value()).isEqualTo(\"rome\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 132,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 133,
-    "code": "    cache.remove(\"europe\", \"france\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 134,
-    "code": "    assertThat(cache.values()).containsOnly(\"rome\", \"pekin\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 135,
-    "code": "    assertThat(cache.get(\"europe\", \"france\")).isNull();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 136,
-    "code": "    assertThat(cache.get(\"europe\", \"italy\")).isEqualTo(\"rome\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 137,
-    "code": "    assertThat(cache.containsKey(\"europe\", \"france\")).isFalse();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 138,
-    "code": "    assertThat(cache.keySet(\"europe\")).containsOnly(\"italy\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 139,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 140,
-    "code": "    cache.clear(\"america\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 141,
-    "code": "    assertThat(cache.keySet()).containsOnly(\"europe\", \"asia\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 142,
-    "code": "    cache.clear();",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 143,
-    "code": "    assertThat(cache.keySet()).isEmpty();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 144,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 145,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 146,
-    "code": "  @Test",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 147,
-    "code": "  public void three_parts_key() throws Exception {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 148,
-    "code": "    Cache&lt;String&gt; cache = caches.createCache(\"places\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 149,
-    "code": "    assertThat(cache.get(\"europe\", \"france\", \"paris\")).isNull();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 150,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 151,
-    "code": "    cache.put(\"europe\", \"france\", \"paris\", \"eiffel tower\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 152,
-    "code": "    cache.put(\"europe\", \"france\", \"annecy\", \"lake\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 153,
-    "code": "    cache.put(\"europe\", \"france\", \"poitiers\", \"notre dame\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 154,
-    "code": "    cache.put(\"europe\", \"italy\", \"rome\", \"colosseum\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 155,
-    "code": "    cache.put(\"europe2\", \"ukrania\", \"kiev\", \"dunno\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 156,
-    "code": "    cache.put(\"asia\", \"china\", \"pekin\", \"great wall\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 157,
-    "code": "    cache.put(\"america\", \"us\", \"new york\", \"empire state building\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 158,
-    "code": "    assertThat(cache.get(\"europe\")).isNull();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 159,
-    "code": "    assertThat(cache.get(\"europe\", \"france\")).isNull();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 160,
-    "code": "    assertThat(cache.get(\"europe\", \"france\", \"paris\")).isEqualTo(\"eiffel tower\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 161,
-    "code": "    assertThat(cache.get(\"europe\", \"france\", \"annecy\")).isEqualTo(\"lake\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 162,
-    "code": "    assertThat(cache.get(\"europe\", \"italy\", \"rome\")).isEqualTo(\"colosseum\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 163,
-    "code": "    assertThat(cache.keySet()).containsOnly(\"europe\", \"asia\", \"america\", \"europe2\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 164,
-    "code": "    assertThat(cache.keySet(\"europe\")).containsOnly(\"france\", \"italy\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 165,
-    "code": "    assertThat(cache.keySet(\"europe\", \"france\")).containsOnly(\"annecy\", \"paris\", \"poitiers\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 166,
-    "code": "    assertThat(cache.containsKey(\"europe\")).isFalse();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 167,
-    "code": "    assertThat(cache.containsKey(\"europe\", \"france\")).isFalse();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 168,
-    "code": "    assertThat(cache.containsKey(\"europe\", \"france\", \"annecy\")).isTrue();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 169,
-    "code": "    assertThat(cache.containsKey(\"europe\", \"france\", \"biarritz\")).isFalse();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 170,
-    "code": "    assertThat(cache.values()).containsOnly(\"eiffel tower\", \"lake\", \"colosseum\", \"notre dame\", \"great wall\", \"empire state building\", \"dunno\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 171,
-    "code": "    assertThat(cache.values(\"europe\")).containsOnly(\"eiffel tower\", \"lake\", \"colosseum\", \"notre dame\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 172,
-    "code": "    assertThat(cache.values(\"europe\", \"france\")).containsOnly(\"eiffel tower\", \"lake\", \"notre dame\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 173,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 174,
-    "code": "    Cache.Entry[] allEntries = Iterables.toArray(cache.entries(), Cache.Entry.class);",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "db81d934752174207268c49658963ba98665794b",
-    "scmDate": "2014-02-20T07:35:27+0100"
-  },
-  {
-    "line": 175,
-    "code": "    assertThat(allEntries).hasSize(7);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 176,
-    "code": "    assertThat(allEntries[0].key()).isEqualTo(new String[] {\"america\", \"us\", \"new york\"});",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 177,
-    "code": "    assertThat(allEntries[0].value()).isEqualTo(\"empire state building\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 178,
-    "code": "    assertThat(allEntries[1].key()).isEqualTo(new String[] {\"asia\", \"china\", \"pekin\"});",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 179,
-    "code": "    assertThat(allEntries[1].value()).isEqualTo(\"great wall\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 180,
-    "code": "    assertThat(allEntries[2].key()).isEqualTo(new String[] {\"europe\", \"france\", \"annecy\"});",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 181,
-    "code": "    assertThat(allEntries[2].value()).isEqualTo(\"lake\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 182,
-    "code": "    assertThat(allEntries[3].key()).isEqualTo(new String[] {\"europe\", \"france\", \"paris\"});",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 183,
-    "code": "    assertThat(allEntries[3].value()).isEqualTo(\"eiffel tower\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 184,
-    "code": "    assertThat(allEntries[4].key()).isEqualTo(new String[] {\"europe\", \"france\", \"poitiers\"});",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 185,
-    "code": "    assertThat(allEntries[4].value()).isEqualTo(\"notre dame\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 186,
-    "code": "    assertThat(allEntries[5].key()).isEqualTo(new String[] {\"europe\", \"italy\", \"rome\"});",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 187,
-    "code": "    assertThat(allEntries[5].value()).isEqualTo(\"colosseum\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 188,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 189,
-    "code": "    Cache.Entry[] subEntries = Iterables.toArray(cache.entries(\"europe\"), Cache.Entry.class);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 190,
-    "code": "    assertThat(subEntries).hasSize(4);",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 191,
-    "code": "    assertThat(subEntries[0].key()).isEqualTo(new String[] {\"europe\", \"france\", \"annecy\"});",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 192,
-    "code": "    assertThat(subEntries[0].value()).isEqualTo(\"lake\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 193,
-    "code": "    assertThat(subEntries[1].key()).isEqualTo(new String[] {\"europe\", \"france\", \"paris\"});",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 194,
-    "code": "    assertThat(subEntries[1].value()).isEqualTo(\"eiffel tower\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 195,
-    "code": "    assertThat(subEntries[2].key()).isEqualTo(new String[] {\"europe\", \"france\", \"poitiers\"});",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 196,
-    "code": "    assertThat(subEntries[2].value()).isEqualTo(\"notre dame\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 197,
-    "code": "    assertThat(subEntries[3].key()).isEqualTo(new String[] {\"europe\", \"italy\", \"rome\"});",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 198,
-    "code": "    assertThat(subEntries[3].value()).isEqualTo(\"colosseum\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 199,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 200,
-    "code": "    cache.remove(\"europe\", \"france\", \"annecy\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 201,
-    "code": "    assertThat(cache.values()).containsOnly(\"eiffel tower\", \"colosseum\", \"notre dame\", \"great wall\", \"empire state building\", \"dunno\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 202,
-    "code": "    assertThat(cache.values(\"europe\")).containsOnly(\"eiffel tower\", \"colosseum\", \"notre dame\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 203,
-    "code": "    assertThat(cache.values(\"europe\", \"france\")).containsOnly(\"eiffel tower\", \"notre dame\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 204,
-    "code": "    assertThat(cache.get(\"europe\", \"france\", \"annecy\")).isNull();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 205,
-    "code": "    assertThat(cache.get(\"europe\", \"italy\", \"rome\")).isEqualTo(\"colosseum\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 206,
-    "code": "    assertThat(cache.containsKey(\"europe\", \"france\")).isFalse();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 207,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 208,
-    "code": "    cache.clear(\"europe\", \"italy\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 209,
-    "code": "    assertThat(cache.values()).containsOnly(\"eiffel tower\", \"notre dame\", \"great wall\", \"empire state building\", \"dunno\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 210,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 211,
-    "code": "    cache.clear(\"europe\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 212,
-    "code": "    assertThat(cache.values()).containsOnly(\"great wall\", \"empire state building\", \"dunno\");",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 213,
-    "code": "",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 214,
-    "code": "    cache.clear();",
-    "scmAuthor": "julien.henry@sonarsource.com",
-    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
-    "scmDate": "2014-05-01T00:00:12+0200"
-  },
-  {
-    "line": 215,
-    "code": "    assertThat(cache.values()).isEmpty();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 216,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 217,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 218,
-    "code": "  @Test",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 219,
-    "code": "  public void remove_versus_clear() throws Exception {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 220,
-    "code": "    Cache&lt;String&gt; cache = caches.createCache(\"capitals\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 221,
-    "code": "    cache.put(\"europe\", \"france\", \"paris\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 222,
-    "code": "    cache.put(\"europe\", \"italy\", \"rome\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 223,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 224,
-    "code": "    // remove(\"europe\") does not remove sub-keys",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 225,
-    "code": "    cache.remove(\"europe\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 226,
-    "code": "    assertThat(cache.values()).containsOnly(\"paris\", \"rome\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 227,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 228,
-    "code": "    // clear(\"europe\") removes sub-keys",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 229,
-    "code": "    cache.clear(\"europe\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 230,
-    "code": "    assertThat(cache.values()).isEmpty();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 231,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 232,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 233,
-    "code": "  @Test",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 234,
-    "code": "  public void empty_cache() throws Exception {",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 235,
-    "code": "    Cache&lt;String&gt; cache = caches.createCache(\"empty\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 236,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 237,
-    "code": "    assertThat(cache.get(\"foo\")).isNull();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 238,
-    "code": "    assertThat(cache.get(\"foo\", \"bar\")).isNull();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 239,
-    "code": "    assertThat(cache.get(\"foo\", \"bar\", \"baz\")).isNull();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 240,
-    "code": "    assertThat(cache.keySet()).isEmpty();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 241,
-    "code": "    assertThat(cache.keySet(\"foo\")).isEmpty();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 242,
-    "code": "    assertThat(cache.containsKey(\"foo\")).isFalse();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 243,
-    "code": "    assertThat(cache.containsKey(\"foo\", \"bar\")).isFalse();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 244,
-    "code": "    assertThat(cache.containsKey(\"foo\", \"bar\", \"baz\")).isFalse();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 245,
-    "code": "    assertThat(cache.values()).isEmpty();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 246,
-    "code": "    assertThat(cache.values(\"foo\")).isEmpty();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 247,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 248,
-    "code": "    // do not fail",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 249,
-    "code": "    cache.remove(\"foo\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 250,
-    "code": "    cache.remove(\"foo\", \"bar\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 251,
-    "code": "    cache.remove(\"foo\", \"bar\", \"baz\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 252,
-    "code": "    cache.clear(\"foo\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 253,
-    "code": "    cache.clear(\"foo\", \"bar\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 254,
-    "code": "    cache.clear(\"foo\", \"bar\", \"baz\");",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
-    "scmDate": "2014-02-20T07:23:08+0100"
-  },
-  {
-    "line": 255,
-    "code": "    cache.clear();",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
-    "scmDate": "2013-04-16T17:26:34+0200"
-  },
-  {
-    "line": 256,
-    "code": "  }",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
-    "scmDate": "2013-04-17T10:35:23+0200"
-  },
-  {
-    "line": 257,
-    "code": "}",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  },
-  {
-    "line": 258,
-    "code": "",
-    "scmAuthor": "simon.brandhof@gmail.com",
-    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
-    "scmDate": "2013-04-16T13:24:54+0200"
-  }
-]}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/tests/tests.json b/server/sonar-web/src/main/js/tests/e2e/tests/source-viewer-spec/tests/tests.json
deleted file mode 100644 (file)
index 421cbb3..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-{"tests": [
-  {
-    "name": "two_parts_key",
-    "status": "OK",
-    "durationInMs": 324,
-    "coveredLines": 0
-  },
-  {
-    "name": "remove_versus_clear",
-    "status": "OK",
-    "durationInMs": 81,
-    "coveredLines": 0
-  },
-  {
-    "name": "three_parts_key",
-    "status": "OK",
-    "durationInMs": 93,
-    "coveredLines": 0
-  },
-  {
-    "name": "test_key_being_prefix_of_another_key",
-    "status": "OK",
-    "durationInMs": 89,
-    "coveredLines": 0
-  },
-  {
-    "name": "one_part_key",
-    "status": "OK",
-    "durationInMs": 91,
-    "coveredLines": 0
-  },
-  {
-    "name": "empty_cache",
-    "status": "OK",
-    "durationInMs": 88,
-    "coveredLines": 0
-  }
-]}
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/treemap-spec.js b/server/sonar-web/src/main/js/tests/e2e/tests/treemap-spec.js
deleted file mode 100644 (file)
index 2cf0496..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-var lib = require('../lib');
-
-lib.initMessages();
-lib.changeWorkingDirectory('treemap-spec');
-lib.configureCasper();
-
-
-casper.test.begin('Treemap', function (test) {
-  var treemapData = JSON.parse(fs.read('treemap.json'));
-
-  casper.start(lib.buildUrl('treemap'), function () {
-    lib.mockRequestFromFile('/api/resources/index', 'treemap-resources.json');
-
-    casper.evaluate(function (treemapData) {
-      var widget = new SonarWidgets.Treemap();
-      widget
-          .metrics(treemapData.metrics)
-          .metricsPriority(['coverage', 'ncloc'])
-          .components(treemapData.components)
-          .options({
-            heightInPercents: 55,
-            maxItems: 30,
-            maxItemsReachedMessage: '',
-            baseUrl: '/dashboard/index/',
-            noData: '',
-            resource: ''
-          })
-          .render('#container');
-    }, treemapData)
-  });
-
-  casper
-      .then(function () {
-        casper.waitWhileSelector('.spinner', function() {
-          test.assertElementCount('.treemap-cell', 30);
-          test.assertSelectorHasText('.treemap-cell', 'SonarQube');
-          test.assertMatch(casper.getElementAttribute('.treemap-link', 'href'), /dashboard\/index/,
-              'Treemap cells have links to dashboards');
-        });
-      })
-      .then(function () {
-        casper.evaluate(function () {
-          var evt = document.createEvent('MouseEvents');
-          evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
-          d3.select('.treemap-cell').node().dispatchEvent(evt);
-        });
-      })
-      .then(function () {
-        casper.wait(500, function () {
-          test.assertSelectorHasText('.treemap-cell', 'Server');
-          test.assertElementCount('.treemap-cell', 25);
-        });
-      });
-
-  casper.run(function() {
-    test.done();
-  });
-});
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/treemap-spec/treemap-resources.json b/server/sonar-web/src/main/js/tests/e2e/tests/treemap-spec/treemap-resources.json
deleted file mode 100644 (file)
index bc1c208..0000000
+++ /dev/null
@@ -1,616 +0,0 @@
-[
-  {
-    "id": 258,
-    "key": "org.codehaus.sonar:sonar-core",
-    "name": "SonarQube :: Core",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Core",
-    "version": "4.5-SNAPSHOT",
-    "description": "Core components shared to batch and server",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 83.3,
-        "frmt_val": "83.3%"
-      },
-      {
-        "key": "ncloc",
-        "val": 17854.0,
-        "frmt_val": "17,854"
-      }
-    ]
-  },
-  {
-    "id": 17221,
-    "key": "org.codehaus.sonar:sonar-home",
-    "name": "SonarQube :: Home",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": "2013-02-08T22:22:38+0600",
-    "lname": "SonarQube :: Home",
-    "version": "4.5-SNAPSHOT",
-    "description": "Access the user home directory that contains cache of files",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 75.1,
-        "frmt_val": "75.1%"
-      },
-      {
-        "key": "ncloc",
-        "val": 280.0,
-        "frmt_val": "280"
-      }
-    ]
-  },
-  {
-    "id": 2867,
-    "key": "org.codehaus.sonar:sonar-batch-maven-compat",
-    "name": "SonarQube :: Batch Maven Compat",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Batch Maven Compat",
-    "version": "4.5-SNAPSHOT",
-    "description": "Compatibility layer, which provides MavenProject for non-Maven environments."
-  },
-  {
-    "id": 2871,
-    "key": "org.codehaus.sonar:sonar-maven3-plugin",
-    "name": "SonarQube :: Maven3 Plugin",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Maven3 Plugin",
-    "version": "4.5-SNAPSHOT",
-    "description": "Open source platform for continuous inspection of code quality"
-  },
-  {
-    "id": 2872,
-    "key": "org.codehaus.sonar:sonar-server",
-    "name": "SonarQube :: Server",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Server",
-    "version": "4.5-SNAPSHOT",
-    "description": "Open source platform for continuous inspection of code quality",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 87.8,
-        "frmt_val": "87.8%"
-      },
-      {
-        "key": "ncloc",
-        "val": 35987.0,
-        "frmt_val": "35,987"
-      }
-    ]
-  },
-  {
-    "id": 1227,
-    "key": "org.codehaus.sonar:sonar-ws-client",
-    "name": "SonarQube :: Web Service Client",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Web Service Client",
-    "version": "4.5-SNAPSHOT",
-    "description": "Java Client Library for SonarQube Web Services",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 77.2,
-        "frmt_val": "77.2%"
-      },
-      {
-        "key": "ncloc",
-        "val": 6393.0,
-        "frmt_val": "6,393"
-      }
-    ]
-  },
-  {
-    "id": 1627,
-    "key": "org.codehaus.sonar.plugins:sonar-dbcleaner-plugin",
-    "name": "SonarQube :: Plugins :: Database Cleaner",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Plugins :: Database Cleaner",
-    "version": "4.5-SNAPSHOT",
-    "description": "Optimizes database performances by removing old and useless data.",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 80.8,
-        "frmt_val": "80.8%"
-      },
-      {
-        "key": "ncloc",
-        "val": 397.0,
-        "frmt_val": "397"
-      }
-    ]
-  },
-  {
-    "id": 2881,
-    "key": "org.codehaus.sonar.plugins:sonar-design-plugin",
-    "name": "SonarQube :: Plugins :: Design",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Plugins :: Design",
-    "version": "4.5-SNAPSHOT",
-    "description": "Open source platform for continuous inspection of code quality",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 28.4,
-        "frmt_val": "28.4%"
-      },
-      {
-        "key": "ncloc",
-        "val": 359.0,
-        "frmt_val": "359"
-      }
-    ]
-  },
-  {
-    "id": 2882,
-    "key": "org.codehaus.sonar.plugins:sonar-l10n-en-plugin",
-    "name": "SonarQube :: Plugins :: English Pack",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Plugins :: English Pack",
-    "version": "4.5-SNAPSHOT",
-    "description": "Open source platform for continuous inspection of code quality",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 100.0,
-        "frmt_val": "100.0%"
-      },
-      {
-        "key": "ncloc",
-        "val": 9.0,
-        "frmt_val": "9"
-      }
-    ]
-  },
-  {
-    "id": 25120,
-    "key": "org.codehaus.sonar.plugins:sonar-xoo-plugin",
-    "name": "SonarQube :: Plugins :: Xoo",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": "2014-01-17T16:38:52+0600",
-    "lname": "SonarQube :: Plugins :: Xoo",
-    "version": "4.5-SNAPSHOT",
-    "description": "Sample of plugin to document and test available APIs",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 50.0,
-        "frmt_val": "50.0%"
-      },
-      {
-        "key": "ncloc",
-        "val": 86.0,
-        "frmt_val": "86"
-      }
-    ]
-  },
-  {
-    "id": 2866,
-    "key": "org.codehaus.sonar:sonar-application",
-    "name": "SonarQube :: Application",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Application",
-    "version": "4.5-SNAPSHOT",
-    "description": "Package the standalone distribution",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 90.2,
-        "frmt_val": "90.2%"
-      },
-      {
-        "key": "ncloc",
-        "val": 610.0,
-        "frmt_val": "610"
-      }
-    ]
-  },
-  {
-    "id": 33484,
-    "key": "org.codehaus.sonar:sonar-process",
-    "name": "SonarQube :: Process",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": "2014-07-08T17:17:01+0600",
-    "lname": "SonarQube :: Process",
-    "version": "4.5-SNAPSHOT",
-    "description": "Open source platform for continuous inspection of code quality",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 68.9,
-        "frmt_val": "68.9%"
-      },
-      {
-        "key": "ncloc",
-        "val": 409.0,
-        "frmt_val": "409"
-      }
-    ]
-  },
-  {
-    "id": 33505,
-    "key": "org.codehaus.sonar:sonar-search",
-    "name": "SonarQube :: Search",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": "2014-07-09T23:19:46+0600",
-    "lname": "SonarQube :: Search",
-    "version": "4.5-SNAPSHOT",
-    "description": "Open source platform for continuous inspection of code quality",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 24.2,
-        "frmt_val": "24.2%"
-      },
-      {
-        "key": "ncloc",
-        "val": 226.0,
-        "frmt_val": "226"
-      }
-    ]
-  },
-  {
-    "id": 1624,
-    "key": "org.codehaus.sonar:sonar-batch",
-    "name": "SonarQube :: Batch",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Batch",
-    "version": "4.5-SNAPSHOT",
-    "description": "Open source platform for continuous inspection of code quality",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 76.7,
-        "frmt_val": "76.7%"
-      },
-      {
-        "key": "ncloc",
-        "val": 15301.0,
-        "frmt_val": "15,301"
-      }
-    ]
-  },
-  {
-    "id": 17,
-    "key": "org.codehaus.sonar:sonar-check-api",
-    "name": "SonarQube :: Check API",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Check API",
-    "version": "4.5-SNAPSHOT",
-    "description": "Check API",
-    "msr": [
-      {
-        "key": "ncloc",
-        "val": 57.0,
-        "frmt_val": "57"
-      }
-    ]
-  },
-  {
-    "id": 18,
-    "key": "org.codehaus.sonar:sonar-colorizer",
-    "name": "SonarQube :: Code Colorizer",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Code Colorizer",
-    "version": "4.5-SNAPSHOT",
-    "description": "Code syntax highlighter",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 89.2,
-        "frmt_val": "89.2%"
-      },
-      {
-        "key": "ncloc",
-        "val": 784.0,
-        "frmt_val": "784"
-      }
-    ]
-  },
-  {
-    "id": 1625,
-    "key": "org.codehaus.sonar:sonar-deprecated",
-    "name": "SonarQube :: Deprecated",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Deprecated",
-    "version": "4.5-SNAPSHOT",
-    "description": "Open source platform for continuous inspection of code quality",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 52.0,
-        "frmt_val": "52.0%"
-      },
-      {
-        "key": "ncloc",
-        "val": 1375.0,
-        "frmt_val": "1,375"
-      }
-    ]
-  },
-  {
-    "id": 20,
-    "key": "org.codehaus.sonar:sonar-duplications",
-    "name": "SonarQube :: Duplications",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Duplications",
-    "version": "4.5-SNAPSHOT",
-    "description": "Detect duplicated code",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 85.1,
-        "frmt_val": "85.1%"
-      },
-      {
-        "key": "ncloc",
-        "val": 2693.0,
-        "frmt_val": "2,693"
-      }
-    ]
-  },
-  {
-    "id": 21,
-    "key": "org.codehaus.sonar:sonar-graph",
-    "name": "SonarQube :: Graph",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Graph",
-    "version": "4.5-SNAPSHOT",
-    "description": "Open source platform for continuous inspection of code quality",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 93.0,
-        "frmt_val": "93.0%"
-      },
-      {
-        "key": "ncloc",
-        "val": 997.0,
-        "frmt_val": "997"
-      }
-    ]
-  },
-  {
-    "id": 1626,
-    "key": "org.codehaus.sonar:sonar-java-api",
-    "name": "SonarQube :: Java API",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Java API",
-    "version": "4.5-SNAPSHOT",
-    "description": "Open source platform for continuous inspection of code quality",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 60.9,
-        "frmt_val": "60.9%"
-      },
-      {
-        "key": "ncloc",
-        "val": 265.0,
-        "frmt_val": "265"
-      }
-    ]
-  },
-  {
-    "id": 2869,
-    "key": "org.codehaus.sonar:sonar-markdown",
-    "name": "SonarQube :: Markdown",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Markdown",
-    "version": "4.5-SNAPSHOT",
-    "description": "Open source platform for continuous inspection of code quality",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 95.5,
-        "frmt_val": "95.5%"
-      },
-      {
-        "key": "ncloc",
-        "val": 340.0,
-        "frmt_val": "340"
-      }
-    ]
-  },
-  {
-    "id": 2870,
-    "key": "org.codehaus.sonar:sonar-maven-plugin",
-    "name": "SonarQube :: Maven2 Plugin",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Maven2 Plugin",
-    "version": "4.5-SNAPSHOT",
-    "description": "Open source platform for continuous inspection of code quality",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 16.9,
-        "frmt_val": "16.9%"
-      },
-      {
-        "key": "ncloc",
-        "val": 122.0,
-        "frmt_val": "122"
-      }
-    ]
-  },
-  {
-    "id": 16,
-    "key": "org.codehaus.sonar:sonar-plugin-api",
-    "name": "SonarQube :: Plugin API",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Plugin API",
-    "version": "4.5-SNAPSHOT",
-    "description": "Open source platform for continuous inspection of code quality",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 71.8,
-        "frmt_val": "71.8%"
-      },
-      {
-        "key": "ncloc",
-        "val": 22421.0,
-        "frmt_val": "22,421"
-      }
-    ]
-  },
-  {
-    "id": 251,
-    "key": "org.codehaus.sonar:sonar-testing-harness",
-    "name": "SonarQube :: Testing Harness",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Testing Harness",
-    "version": "4.5-SNAPSHOT",
-    "description": "Open source platform for continuous inspection of code quality",
-    "msr": [
-      {
-        "key": "ncloc",
-        "val": 265.0,
-        "frmt_val": "265"
-      }
-    ]
-  },
-  {
-    "id": 2873,
-    "key": "org.codehaus.sonar.plugins:sonar-core-plugin",
-    "name": "SonarQube :: Plugins :: Core",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Plugins :: Core",
-    "version": "4.5-SNAPSHOT",
-    "description": "Open source platform for continuous inspection of code quality",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 86.4,
-        "frmt_val": "86.4%"
-      },
-      {
-        "key": "ncloc",
-        "val": 4904.0,
-        "frmt_val": "4,904"
-      }
-    ]
-  },
-  {
-    "id": 2879,
-    "key": "org.codehaus.sonar.plugins:sonar-cpd-plugin",
-    "name": "SonarQube :: Plugins :: CPD",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Plugins :: CPD",
-    "version": "4.5-SNAPSHOT",
-    "description": "Find duplicated source code within project.",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 42.6,
-        "frmt_val": "42.6%"
-      },
-      {
-        "key": "ncloc",
-        "val": 722.0,
-        "frmt_val": "722"
-      }
-    ]
-  },
-  {
-    "id": 2883,
-    "key": "org.codehaus.sonar.plugins:sonar-email-notifications-plugin",
-    "name": "SonarQube :: Plugins :: Email Notifications",
-    "scope": "PRJ",
-    "qualifier": "BRC",
-    "date": "2014-07-09T23:19:45+0600",
-    "creationDate": null,
-    "lname": "SonarQube :: Plugins :: Email Notifications",
-    "version": "4.5-SNAPSHOT",
-    "description": "Email Notifications",
-    "msr": [
-      {
-        "key": "coverage",
-        "val": 80.6,
-        "frmt_val": "80.6%"
-      },
-      {
-        "key": "ncloc",
-        "val": 267.0,
-        "frmt_val": "267"
-      }
-    ]
-  }
-]
diff --git a/server/sonar-web/src/main/js/tests/e2e/tests/treemap-spec/treemap.json b/server/sonar-web/src/main/js/tests/e2e/tests/treemap-spec/treemap.json
deleted file mode 100644 (file)
index 1125b3a..0000000
+++ /dev/null
@@ -1,496 +0,0 @@
-{"metrics": {
-  "coverage": {
-    "name": "Coverage",
-    "type": "PERCENT",
-    "direction": 1,
-    "worstValue": 0.0,
-    "bestValue": 100.0
-  },
-  "ncloc": {
-    "name": "Lines of code",
-    "type": "INT",
-    "direction": -1
-  }
-}, "components": [
-  {
-    "key": "org.codehaus.sonar:sonar",
-    "name": "SonarQube",
-    "longName": "SonarQube",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 80.4,
-        "fval": "80.4%"
-      },
-      "ncloc": {
-        "val": 113123.0,
-        "fval": "113,123"
-      }
-    }
-  },
-  {
-    "key": "org.codehaus.sonar:sonar-persistit",
-    "name": "sonar-persistit",
-    "longName": "sonar-persistit",
-    "qualifier": "TRK",
-    "measures": {
-      "ncloc": {
-        "val": 45330.0,
-        "fval": "45,330"
-      }
-    }
-  },
-  {
-    "key": "com.sonarsource.cpp:cpp",
-    "name": "SonarSource :: CPP",
-    "longName": "SonarSource :: CPP",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 90.4,
-        "fval": "90.4%"
-      },
-      "ncloc": {
-        "val": 31250.0,
-        "fval": "31,250"
-      }
-    }
-  },
-  {
-    "key": "org.codehaus.sonar-plugins.java:java",
-    "name": "SonarQube Java",
-    "longName": "SonarQube Java",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 90.1,
-        "fval": "90.1%"
-      },
-      "ncloc": {
-        "val": 22588.0,
-        "fval": "22,588"
-      }
-    }
-  },
-  {
-    "key": "com.sonarsource.cobol:cobol",
-    "name": "SonarSource :: Cobol",
-    "longName": "SonarSource :: Cobol",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 83.5,
-        "fval": "83.5%"
-      },
-      "ncloc": {
-        "val": 20879.0,
-        "fval": "20,879"
-      }
-    }
-  },
-  {
-    "key": "com.sonarsource.plsql:plsql",
-    "name": "SonarSource :: PL/SQL",
-    "longName": "SonarSource :: PL/SQL",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 96.6,
-        "fval": "96.6%"
-      },
-      "ncloc": {
-        "val": 12110.0,
-        "fval": "12,110"
-      }
-    }
-  },
-  {
-    "key": "org.codehaus.sonar.sslr:sslr",
-    "name": "SonarSource :: Language Recognizer",
-    "longName": "SonarSource :: Language Recognizer",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 80.3,
-        "fval": "80.3%"
-      },
-      "ncloc": {
-        "val": 8698.0,
-        "fval": "8,698"
-      }
-    }
-  },
-  {
-    "key": "org.codehaus.sonar-ide.eclipse:eclipse-parent",
-    "name": "SonarQube Integration for Eclipse (parent)",
-    "longName": "SonarQube Integration for Eclipse (parent)",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 17.2,
-        "fval": "17.2%"
-      },
-      "ncloc": {
-        "val": 7924.0,
-        "fval": "7,924"
-      }
-    }
-  },
-  {
-    "key": "org.codehaus.sonar-plugins.php:parent",
-    "name": "PHP",
-    "longName": "PHP",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 94.9,
-        "fval": "94.9%"
-      },
-      "ncloc": {
-        "val": 7134.0,
-        "fval": "7,134"
-      }
-    }
-  },
-  {
-    "key": "org.codehaus.sonar-plugins.javascript:javascript",
-    "name": "JavaScript",
-    "longName": "JavaScript",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 94.0,
-        "fval": "94.0%"
-      },
-      "ncloc": {
-        "val": 6820.0,
-        "fval": "6,820"
-      }
-    }
-  },
-  {
-    "key": "com.maif.sonar:maif-cobol-plugin",
-    "name": "MAIF :: Cobol plugin",
-    "longName": "MAIF :: Cobol plugin",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 91.6,
-        "fval": "91.6%"
-      },
-      "ncloc": {
-        "val": 6684.0,
-        "fval": "6,684"
-      }
-    }
-  },
-  {
-    "key": "com.sonarsource.vbnet:vbnet",
-    "name": "SonarSource :: Visual Basic .NET",
-    "longName": "SonarSource :: Visual Basic .NET",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 94.3,
-        "fval": "94.3%"
-      },
-      "ncloc": {
-        "val": 6416.0,
-        "fval": "6,416"
-      }
-    }
-  },
-  {
-    "key": "com.sonarsource.orchestrator:orchestrator-parent",
-    "name": "SonarSource :: Orchestrator :: Parent",
-    "longName": "SonarSource :: Orchestrator :: Parent",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 76.1,
-        "fval": "76.1%"
-      },
-      "ncloc": {
-        "val": 5815.0,
-        "fval": "5,815"
-      }
-    }
-  },
-  {
-    "key": "org.codehaus.sonar-plugins.flex:flex",
-    "name": "Flex",
-    "longName": "Flex",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 93.1,
-        "fval": "93.1%"
-      },
-      "ncloc": {
-        "val": 5401.0,
-        "fval": "5,401"
-      }
-    }
-  },
-  {
-    "key": "org.codehaus.sonar-plugins.dotnet.csharp:sonar-csharp-squid",
-    "name": "SonarQube C# Plugin",
-    "longName": "SonarQube C# Plugin",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 90.3,
-        "fval": "90.3%"
-      },
-      "ncloc": {
-        "val": 4930.0,
-        "fval": "4,930"
-      }
-    }
-  },
-  {
-    "key": "com.sonarsource.rpg:rpg",
-    "name": "SonarSource :: RPG",
-    "longName": "SonarSource :: RPG",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 92.7,
-        "fval": "92.7%"
-      },
-      "ncloc": {
-        "val": 4235.0,
-        "fval": "4,235"
-      }
-    }
-  },
-  {
-    "key": "com.sonarsource.plugins.vb:vb",
-    "name": "SonarSource :: Visual Basic",
-    "longName": "SonarSource :: Visual Basic",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 96.1,
-        "fval": "96.1%"
-      },
-      "ncloc": {
-        "val": 4190.0,
-        "fval": "4,190"
-      }
-    }
-  },
-  {
-    "key": "org.codehaus.sonar-plugins.erlang:erlang",
-    "name": "Erlang",
-    "longName": "Erlang",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 88.6,
-        "fval": "88.6%"
-      },
-      "ncloc": {
-        "val": 3843.0,
-        "fval": "3,843"
-      }
-    }
-  },
-  {
-    "key": "org.codehaus.sonar-plugins:sonar-web-plugin",
-    "name": "SonarQube Web Plugin",
-    "longName": "SonarQube Web Plugin",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 94.4,
-        "fval": "94.4%"
-      },
-      "ncloc": {
-        "val": 3816.0,
-        "fval": "3,816"
-      }
-    }
-  },
-  {
-    "key": "org.codehaus.sonar-plugins.python:python",
-    "name": "Python",
-    "longName": "Python",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 91.5,
-        "fval": "91.5%"
-      },
-      "ncloc": {
-        "val": 3631.0,
-        "fval": "3,631"
-      }
-    }
-  },
-  {
-    "key": "com.sonarsource.abap:abap",
-    "name": "SonarSource :: ABAP",
-    "longName": "SonarSource :: ABAP",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 95.1,
-        "fval": "95.1%"
-      },
-      "ncloc": {
-        "val": 3603.0,
-        "fval": "3,603"
-      }
-    }
-  },
-  {
-    "key": "com.sonarsource.pli:pli",
-    "name": "SonarSource :: PL/I",
-    "longName": "SonarSource :: PL/I",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 95.7,
-        "fval": "95.7%"
-      },
-      "ncloc": {
-        "val": 3387.0,
-        "fval": "3,387"
-      }
-    }
-  },
-  {
-    "key": "org.codehaus.sonar.sslr-squid-bridge:sslr-squid-bridge",
-    "name": "SonarSource :: Language Recognizer :: Squid Bridge",
-    "longName": "SonarSource :: Language Recognizer :: Squid Bridge",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 85.2,
-        "fval": "85.2%"
-      },
-      "ncloc": {
-        "val": 3250.0,
-        "fval": "3,250"
-      }
-    }
-  },
-  {
-    "key": "org.codehaus.sonar:sonar-update-center",
-    "name": "Sonar :: Update Center",
-    "longName": "Sonar :: Update Center",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 89.0,
-        "fval": "89.0%"
-      },
-      "ncloc": {
-        "val": 3192.0,
-        "fval": "3,192"
-      }
-    }
-  },
-  {
-    "key": "com.sonarsource.infra:jobs-creator",
-    "name": "Infra Jenkins Job Creator",
-    "longName": "Infra Jenkins Job Creator",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 50.6,
-        "fval": "50.6%"
-      },
-      "ncloc": {
-        "val": 2757.0,
-        "fval": "2,757"
-      }
-    }
-  },
-  {
-    "key": "com.sonarsource:sonar-dev-cockpit-plugin",
-    "name": "SonarSource :: Developer Cockpit",
-    "longName": "SonarSource :: Developer Cockpit",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 92.7,
-        "fval": "92.7%"
-      },
-      "ncloc": {
-        "val": 2692.0,
-        "fval": "2,692"
-      }
-    }
-  },
-  {
-    "key": "org.codehaus.sonar-ide.intellij:sonar-intellij-plugin",
-    "name": "SonarQube Integration for IntelliJ",
-    "longName": "SonarQube Integration for IntelliJ",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 0.2,
-        "fval": "0.2%"
-      },
-      "ncloc": {
-        "val": 2679.0,
-        "fval": "2,679"
-      }
-    }
-  },
-  {
-    "key": "com.sonarsource.views:sonar-views-plugin",
-    "name": "SonarSource :: Views",
-    "longName": "SonarSource :: Views",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 94.6,
-        "fval": "94.6%"
-      },
-      "ncloc": {
-        "val": 2630.0,
-        "fval": "2,630"
-      }
-    }
-  },
-  {
-    "key": "org.codehaus.sonar-plugins.css:css",
-    "name": "CSS",
-    "longName": "CSS",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 81.9,
-        "fval": "81.9%"
-      },
-      "ncloc": {
-        "val": 2485.0,
-        "fval": "2,485"
-      }
-    }
-  },
-  {
-    "key": "org.codehaus.sonar-plugins.xml:xml",
-    "name": "XML",
-    "longName": "XML",
-    "qualifier": "TRK",
-    "measures": {
-      "coverage": {
-        "val": 83.8,
-        "fval": "83.8%"
-      },
-      "ncloc": {
-        "val": 2122.0,
-        "fval": "2,122"
-      }
-    }
-  }
-], "maxResultsReached": false, "paging": {
-  "page": 1,
-  "pages": 3,
-  "pageSize": 30,
-  "total": 73
-}}
diff --git a/server/sonar-web/src/main/js/tests/e2e/views/coding-rules.jade b/server/sonar-web/src/main/js/tests/e2e/views/coding-rules.jade
deleted file mode 100644 (file)
index a56d076..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-extends ./layouts/main
-
-block header
-  script(src='../js/require.js')
-  script.
-    window.waitForMocks('/js/coding-rules/app.js');
-
-block body
-  #content
-    .coding-rules.search-navigator
diff --git a/server/sonar-web/src/main/js/tests/e2e/views/design.jade b/server/sonar-web/src/main/js/tests/e2e/views/design.jade
deleted file mode 100644 (file)
index 9132d07..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-extends ./layouts/main
-
-block header
-  script(src='../js/require.js')
-  script.
-    window.waitForMocks('/js/design/app.js');
-
-block body
-  #container
-    #project-design: i.spinner
-
-  script.
-    window.resourceKey = 'com.maif.sonar:maif-cobol-plugin';
diff --git a/server/sonar-web/src/main/js/tests/e2e/views/issues.jade b/server/sonar-web/src/main/js/tests/e2e/views/issues.jade
deleted file mode 100644 (file)
index c23c98a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-extends ./layouts/main
-
-block header
-  script(src='../js/require.js')
-  script.
-    window.waitForMocks('/js/issues/app-new.js');
-
-block body
-  #content
-    .issues.search-navigator
diff --git a/server/sonar-web/src/main/js/tests/e2e/views/layouts/main.jade b/server/sonar-web/src/main/js/tests/e2e/views/layouts/main.jade
deleted file mode 100644 (file)
index 37b9058..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-html
-  head
-    meta(http-equiv='Content-Type', content='text/html; charset=UTF-8')
-    link(href='/css/sonar.css', rel='stylesheet', media='all')
-    script(src='/js/sonar.js')
-    script(src='/js/third-party/jquery.mockjax.js')
-    script.
-      var baseUrl = '';
-      var $j = jQuery.noConflict();
-      window.suppressTranslationWarnings = true;
-      jQuery.mockjaxSettings.contentType = 'text/json';
-      jQuery.mockjaxSettings.responseTime = 50;
-      jQuery.mockjaxSettings.throwUnmocked = true;
-      $j(document).ready(function () { $j('.open-modal').modal(); });
-      window.waitForMocks = function (app) {
-        var x = setInterval(function () {
-          jQuery.get('/api/l10n/index').done(function () {
-            clearInterval(x);
-            require([app]);
-          });
-        }, 500);
-      }
-    block header
-  body
-    #body
-      block body
diff --git a/server/sonar-web/src/main/js/tests/e2e/views/quality-gates.jade b/server/sonar-web/src/main/js/tests/e2e/views/quality-gates.jade
deleted file mode 100644 (file)
index ac1a487..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-extends ./layouts/main
-
-block header
-  script(src='../js/require.js')
-  script.
-    window.waitForMocks('/js/quality-gate/app.js');
-
-block body
-  #content
-    .search-navigator#quality-gates
diff --git a/server/sonar-web/src/main/js/tests/e2e/views/source-viewer.jade b/server/sonar-web/src/main/js/tests/e2e/views/source-viewer.jade
deleted file mode 100644 (file)
index 03903d8..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-extends ./layouts/main
-
-block header
-  script(src='../js/require.js')
-  script.
-    window.waitForMocks('/js/source-viewer/app.js');
-
-block body
-  #source-viewer
-
-  script.
-    window.file = {
-      uuid: '',
-      key: ''
-    };
diff --git a/server/sonar-web/src/main/js/tests/e2e/views/treemap.jade b/server/sonar-web/src/main/js/tests/e2e/views/treemap.jade
deleted file mode 100644 (file)
index 3f6fbac..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-extends ./layouts/main
-
-block body
-  #container
diff --git a/server/sonar-web/src/test/js/coding-rules-page-active-severity-facet.js b/server/sonar-web/src/test/js/coding-rules-page-active-severity-facet.js
new file mode 100644 (file)
index 0000000..a0a1e37
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules-page-active-severity-facet');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-active-severity-facet', 7, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        lib.mockRequestFromFile('/api/rules/search', 'search-BLOCKER.json', { data: { active_severities: 'BLOCKER' } });
+        lib.mockRequestFromFile('/api/rules/search', 'search-qprofile.json',
+            { data: { qprofile: 'java-default-with-mojo-conventions-49307' } });
+        lib.mockRequestFromFile('/api/rules/search', 'search.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rule');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '609');
+        test.assertExists('.search-navigator-facet-box-forbidden[data-property="active_severities"]');
+        casper.click('[data-property="qprofile"] .js-facet-toggle');
+        casper.waitForSelector('.js-facet[data-value="java-default-with-mojo-conventions-49307"]');
+      })
+
+      .then(function () {
+        casper.click('.js-facet[data-value="java-default-with-mojo-conventions-49307"]');
+        casper.waitForSelectorTextChange('#coding-rules-total');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '407');
+        test.assertDoesntExist('.search-navigator-facet-box-forbidden[data-property="active_severities"]');
+        casper.click('[data-property="active_severities"] .js-facet-toggle');
+        casper.waitForSelector('[data-property="active_severities"] [data-value="BLOCKER"]');
+      })
+
+      .then(function () {
+        casper.click('[data-property="active_severities"] [data-value="BLOCKER"]');
+        casper.waitForSelectorTextChange('#coding-rules-total');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '4');
+        casper.click('[data-property="qprofile"] .js-facet-toggle');
+        casper.waitForSelectorTextChange('#coding-rules-total');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '609');
+        test.assertExists('.search-navigator-facet-box-forbidden[data-property="active_severities"]');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/coding-rules-page-available-since.js b/server/sonar-web/src/test/js/coding-rules-page-available-since.js
new file mode 100644 (file)
index 0000000..e55b457
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules-page-available-since');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-available-since', 2, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        lib.mockRequestFromFile('/api/rules/search', 'search-limited.json',
+            { data: { available_since: '2014-12-01' } });
+        lib.mockRequestFromFile('/api/rules/search', 'search.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rule');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '609');
+        casper.click('[data-property="available_since"] .js-facet-toggle');
+        casper.evaluate(function () {
+          jQuery('[data-property="available_since"] input').val('2014-12-01').change();
+        });
+      })
+
+      .then(function () {
+        casper.waitForSelectorTextChange('#coding-rules-total');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '101');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/coding-rules-page-inheritance-facet.js b/server/sonar-web/src/test/js/coding-rules-page-inheritance-facet.js
new file mode 100644 (file)
index 0000000..64cb89a
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules-page-inheritance-facet');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-inheritance-facet', 11, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        lib.mockRequestFromFile('/api/rules/search', 'search-not-inherited.json', { data: { inheritance: 'NONE' } });
+        lib.mockRequestFromFile('/api/rules/search', 'search-inherited.json', { data: { inheritance: 'INHERITED' } });
+        lib.mockRequestFromFile('/api/rules/search', 'search-overriden.json', { data: { inheritance: 'OVERRIDES' } });
+        lib.mockRequestFromFile('/api/rules/search', 'search-qprofile.json',
+            { data: { qprofile: 'java-default-with-mojo-conventions-49307' } });
+        lib.mockRequestFromFile('/api/rules/search', 'search-qprofile2.json',
+            { data: { qprofile: 'java-top-profile-without-formatting-conventions-50037' } });
+        lib.mockRequestFromFile('/api/rules/search', 'search.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rule');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '609');
+        test.assertExists('.search-navigator-facet-box-forbidden[data-property="inheritance"]');
+        casper.click('[data-property="qprofile"] .js-facet-toggle');
+        casper.waitForSelector('.js-facet[data-value="java-default-with-mojo-conventions-49307"]');
+      })
+
+      .then(function () {
+        casper.click('.js-facet[data-value="java-default-with-mojo-conventions-49307"]');
+        casper.waitForSelectorTextChange('#coding-rules-total');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '407');
+        test.assertDoesntExist('.search-navigator-facet-box-forbidden[data-property="inheritance"]');
+        casper.click('[data-property="inheritance"] .js-facet-toggle');
+        casper.waitForSelector('[data-property="inheritance"] [data-value="NONE"]');
+      })
+
+      .then(function () {
+        casper.click('[data-property="inheritance"] [data-value="NONE"]');
+        casper.waitForSelectorTextChange('#coding-rules-total');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '103');
+        casper.click('[data-property="inheritance"] [data-value="INHERITED"]');
+        casper.waitForSelectorTextChange('#coding-rules-total');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '101');
+        casper.click('[data-property="inheritance"] [data-value="OVERRIDES"]');
+        casper.waitForSelectorTextChange('#coding-rules-total');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '102');
+        casper.click('.js-facet[data-value="java-top-profile-without-formatting-conventions-50037"]');
+        casper.waitForSelectorTextChange('#coding-rules-total');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '408');
+        test.assertExists('.search-navigator-facet-box-forbidden[data-property="inheritance"]');
+        casper.click('[data-property="qprofile"] .js-facet-toggle');
+        casper.waitForSelectorTextChange('#coding-rules-total');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '609');
+        test.assertExists('.search-navigator-facet-box-forbidden[data-property="inheritance"]');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/coding-rules-page-no-available-profiles-for-activation.js b/server/sonar-web/src/test/js/coding-rules-page-no-available-profiles-for-activation.js
new file mode 100644 (file)
index 0000000..a7ad36f
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules-page-no-available-profiles-for-activation');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-no-available-profiles-for-activation', 2, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        lib.mockRequestFromFile('/api/rules/search', 'search.json');
+        lib.mockRequestFromFile('/api/rules/show', 'show.json');
+        lib.mockRequest('/api/issues/search', '{}');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rule.selected', function () {
+          casper.click('.coding-rule.selected .js-rule');
+        });
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rules-detail-header');
+      })
+
+      .then(function () {
+        test.assertExist('#coding-rules-quality-profile-activate');
+        casper.click('#coding-rules-quality-profile-activate');
+        casper.waitForSelector('.modal');
+      })
+
+      .then(function () {
+        test.assertExists('.modal .message-notice');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/coding-rules-page-quality-profile-facet.js b/server/sonar-web/src/test/js/coding-rules-page-quality-profile-facet.js
new file mode 100644 (file)
index 0000000..3d2d55a
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules-page-quality-profile-facet');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-quality-profile-facet', 6, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        lib.mockRequestFromFile('/api/rules/search', 'search-qprofile-active.json',
+            { data: { activation: true } });
+        lib.mockRequestFromFile('/api/rules/search', 'search-qprofile-inactive.json',
+            { data: { activation: 'false' } });
+        lib.mockRequestFromFile('/api/rules/search', 'search.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rule');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '609');
+        casper.click('[data-property="qprofile"] .js-facet-toggle');
+        casper.waitForSelector('.js-facet[data-value="java-default-with-mojo-conventions-49307"]');
+      })
+
+      .then(function () {
+        casper.click('.js-facet[data-value="java-default-with-mojo-conventions-49307"]');
+        casper.waitForSelectorTextChange('#coding-rules-total');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '407');
+        test.assertExists('.js-facet[data-value="java-default-with-mojo-conventions-49307"] .js-active.facet-toggle-active');
+        casper.click('.js-facet[data-value="java-default-with-mojo-conventions-49307"] .js-inactive');
+        casper.waitForSelectorTextChange('#coding-rules-total');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '408');
+        test.assertExists('.js-facet[data-value="java-default-with-mojo-conventions-49307"] .js-inactive.facet-toggle-active');
+        casper.click('[data-property="qprofile"] .js-facet-toggle');
+        casper.waitForSelectorTextChange('#coding-rules-total');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '609');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/coding-rules-page-query-facet.js b/server/sonar-web/src/test/js/coding-rules-page-query-facet.js
new file mode 100644 (file)
index 0000000..e64cf5d
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules-page-query-facet');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-query-facet', 3, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        lib.mockRequestFromFile('/api/rules/search', 'search-query.json', { data: { q: 'query' } });
+        lib.mockRequestFromFile('/api/rules/search', 'search.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rule');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '609');
+        casper.evaluate(function () {
+          jQuery('[data-property="q"] input').val('query');
+          jQuery('[data-property="q"] form').submit();
+        });
+        casper.waitForSelectorTextChange('#coding-rules-total');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '4');
+        casper.evaluate(function () {
+          jQuery('[data-property="q"] input').val('');
+          jQuery('[data-property="q"] form').submit();
+        });
+        casper.waitForSelectorTextChange('#coding-rules-total');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', '609');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/coding-rules-page-rule-should-have-permalink.js b/server/sonar-web/src/test/js/coding-rules-page-rule-should-have-permalink.js
new file mode 100644 (file)
index 0000000..38da7b7
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules-page-rule-permalink');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-rule-permalink', 1, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        lib.mockRequestFromFile('/api/rules/search', 'search.json');
+        lib.mockRequestFromFile('/api/rules/show', 'show.json');
+        lib.mockRequest('/api/issues/search', '{}');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rule.selected');
+      })
+
+      .then(function () {
+        casper.click('.coding-rule.selected .js-rule');
+        casper.waitForSelector('.coding-rules-detail-header');
+      })
+
+      .then(function () {
+        test.assertExists('a[href="/coding_rules#rule_key=squid%3AS1181"]');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/coding-rules-page-should-activate-profile.js b/server/sonar-web/src/test/js/coding-rules-page-should-activate-profile.js
new file mode 100644 (file)
index 0000000..e354b98
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules-page-should-activate-profile');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-should-activate-profile', 5, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        lib.mockRequestFromFile('/api/rules/search', 'search.json');
+        this.showMock = lib.mockRequestFromFile('/api/rules/show', 'show.json');
+        lib.mockRequest('/api/qualityprofiles/activate_rule', '{}');
+        lib.mockRequest('/api/issues/search', '{}');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rule.selected', function () {
+          casper.click('.coding-rule.selected .js-rule');
+        });
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rules-detail-header');
+      })
+
+      .then(function () {
+        test.assertDoesntExist('.coding-rules-detail-quality-profile-name');
+        test.assertExist('#coding-rules-quality-profile-activate');
+        casper.click('#coding-rules-quality-profile-activate');
+        casper.waitForSelector('.modal');
+      })
+
+      .then(function () {
+        lib.clearRequestMock(this.showMock);
+        lib.mockRequestFromFile('/api/rules/show', 'show-with-profile.json');
+        casper.click('#coding-rules-quality-profile-activation-activate');
+        casper.waitForSelector('.coding-rules-detail-quality-profile-name');
+      })
+
+      .then(function () {
+        test.assertExists('.coding-rules-detail-quality-profile-name');
+        test.assertExists('.coding-rules-detail-quality-profile-severity');
+        test.assertExists('.coding-rules-detail-quality-profile-deactivate');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/coding-rules-page-should-create-custom-rules.js b/server/sonar-web/src/test/js/coding-rules-page-should-create-custom-rules.js
new file mode 100644 (file)
index 0000000..fac972f
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules-page-should-create-custom-rules');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-should-delete-create-rules', 2, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        this.customRulesSearchMock = lib.mockRequestFromFile('/api/rules/search', 'search-custom-rules.json',
+            { data: { template_key: 'squid:ArchitecturalConstraint' } });
+        this.searchMock = lib.mockRequestFromFile('/api/rules/search', 'search.json');
+        lib.mockRequestFromFile('/api/rules/show', 'show.json');
+        lib.mockRequest('/api/rules/create', '{}');
+        lib.mockRequest('/api/issues/search', '{}');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rule.selected', function () {
+          casper.click('.coding-rule.selected .js-rule');
+        });
+      })
+
+      .then(function () {
+        casper.waitForSelector('#coding-rules-detail-custom-rules .coding-rules-detail-list-name');
+      })
+
+      .then(function () {
+        lib.clearRequestMock(this.customRulesSearchMock);
+        lib.clearRequestMock(this.searchMock);
+        lib.mockRequestFromFile('/api/rules/search', 'search-custom-rules2.json');
+      })
+
+      .then(function () {
+        test.assertElementCount('#coding-rules-detail-custom-rules .coding-rules-detail-list-name', 1);
+        casper.click('.js-create-custom-rule');
+        casper.fillForm('.modal form', {
+          name: 'test',
+          markdown_description: 'test'
+        });
+        casper.click('#coding-rules-custom-rule-creation-create');
+        lib.waitForElementCount('#coding-rules-detail-custom-rules .coding-rules-detail-list-name', 2, function () {
+          test.assert(true); // put dummy assert into wait statement
+        });
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/coding-rules-page-should-create-manual-rules.js b/server/sonar-web/src/test/js/coding-rules-page-should-create-manual-rules.js
new file mode 100644 (file)
index 0000000..5903046
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules-page-should-create-manual-rules');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-should-delete-manual-rules', 3, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        lib.mockRequestFromFile('/api/rules/search', 'search.json');
+        lib.mockRequestFromFile('/api/rules/create', 'show.json');
+        lib.mockRequestFromFile('/api/rules/show', 'show.json');
+        lib.mockRequest('/api/issues/search', '{}');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.js-create-manual-rule', function () {
+          casper.click('.js-create-manual-rule');
+        });
+      })
+
+      .then(function () {
+        casper.waitForSelector('.modal');
+      })
+
+      .then(function () {
+        casper.evaluate(function () {
+          jQuery('.modal [name="name"]').val('Manual Rule');
+          jQuery('.modal [name="key"]').val('manual:Manual_Rule');
+          jQuery('.modal [name="markdown_description"]').val('Manual Rule Description');
+          jQuery('.modal #coding-rules-manual-rule-creation-create').click();
+        });
+        casper.waitForSelector('.coding-rules-detail-header');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('.coding-rules-detail-header', 'Manual Rule');
+        test.assertSelectorContains('.coding-rule-details .subtitle', 'manual:Manual_Rule');
+        test.assertSelectorContains('.coding-rules-detail-description', 'Manual Rule Description');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/coding-rules-page-should-delete-custom-rules.js b/server/sonar-web/src/test/js/coding-rules-page-should-delete-custom-rules.js
new file mode 100644 (file)
index 0000000..623c36e
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules-page-should-delete-custom-rules');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-should-delete-custom-rules', 2, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        lib.mockRequestFromFile('/api/rules/search', 'search-custom-rules.json',
+            { data: { template_key: 'squid:ArchitecturalConstraint' } });
+        lib.mockRequestFromFile('/api/rules/search', 'search.json');
+        lib.mockRequestFromFile('/api/rules/show', 'show.json');
+        lib.mockRequest('/api/rules/delete', '{}');
+        lib.mockRequest('/api/issues/search', '{}');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rule.selected', function () {
+          casper.click('.coding-rule.selected .js-rule');
+        });
+      })
+
+      .then(function () {
+        casper.waitForSelector('#coding-rules-detail-custom-rules .coding-rules-detail-list-name');
+      })
+
+      .then(function () {
+        test.assertElementCount('#coding-rules-detail-custom-rules .coding-rules-detail-list-name', 2);
+        casper.click('.js-delete-custom-rule');
+        casper.click('[data-confirm="yes"]');
+        lib.waitForElementCount('#coding-rules-detail-custom-rules .coding-rules-detail-list-name', 1, function () {
+          test.assert(true); // put dummy assert into wait statement
+        });
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/coding-rules-page-should-delete-manual-rules.js b/server/sonar-web/src/test/js/coding-rules-page-should-delete-manual-rules.js
new file mode 100644 (file)
index 0000000..c4b590b
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules-page-should-delete-manual-rules');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-should-delete-manual-rules', 1, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        this.searchMock = lib.mockRequestFromFile('/api/rules/search', 'search-before.json');
+        lib.mockRequestFromFile('/api/rules/show', 'show.json');
+        lib.mockRequest('/api/rules/delete', '{}');
+        lib.mockRequest('/api/issues/search', '{}');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rule.selected', function () {
+          casper.click('.coding-rule.selected .js-rule');
+        });
+      })
+
+      .then(function () {
+        casper.waitForSelector('.js-delete');
+      })
+
+      .then(function () {
+        casper.click('.js-delete');
+        casper.waitForSelector('[data-confirm="yes"]');
+      })
+
+      .then(function () {
+        lib.clearRequestMock(this.searchMock);
+        lib.mockRequestFromFile('/api/rules/search', 'search-after.json');
+        casper.click('[data-confirm="yes"]');
+        casper.waitForSelectorTextChange('#coding-rules-total');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('#coding-rules-total', 0);
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/coding-rules-page-should-show-custom-rules.js b/server/sonar-web/src/test/js/coding-rules-page-should-show-custom-rules.js
new file mode 100644 (file)
index 0000000..bcf5d43
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules-page-should-show-custom-rules');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-should-show-custom-rules', 3, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        lib.mockRequestFromFile('/api/rules/search', 'search-custom-rules.json',
+            { data: { template_key: 'squid:ArchitecturalConstraint' } });
+        lib.mockRequestFromFile('/api/rules/search', 'search.json');
+        lib.mockRequestFromFile('/api/rules/show', 'show.json');
+        lib.mockRequest('/api/issues/search', '{}');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rule.selected', function () {
+          casper.click('.coding-rule.selected .js-rule');
+        });
+      })
+
+      .then(function () {
+        casper.waitForSelector('#coding-rules-detail-custom-rules .coding-rules-detail-list-name');
+      })
+
+      .then(function () {
+        test.assertExists('#coding-rules-detail-custom-rules');
+        test.assertElementCount('#coding-rules-detail-custom-rules .coding-rules-detail-list-name', 2);
+        test.assertSelectorContains('#coding-rules-detail-custom-rules .coding-rules-detail-list-name',
+            'Do not use org.h2.util.StringUtils');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/coding-rules-page-should-show-deprecated-label.js b/server/sonar-web/src/test/js/coding-rules-page-should-show-deprecated-label.js
new file mode 100644 (file)
index 0000000..7c57c1a
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules-page-should-show-deprecated-label');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-should-show-deprecated-label', 1, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        lib.mockRequestFromFile('/api/rules/search', 'search.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rule.selected');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('.coding-rule.selected', 'DEPRECATED');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/coding-rules-page-should-show-details.js b/server/sonar-web/src/test/js/coding-rules-page-should-show-details.js
new file mode 100644 (file)
index 0000000..49bac8b
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules-page-should-show-details');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-should-show-details', 20, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        lib.mockRequestFromFile('/api/rules/search', 'search.json');
+        lib.mockRequestFromFile('/api/rules/show', 'show.json');
+        lib.mockRequest('/api/issues/search', '{}');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rule.selected', function () {
+          casper.click('.coding-rule.selected .js-rule');
+        });
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rules-detail-header');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('.search-navigator-workspace-details',
+            'Throwable and Error classes should not be caught');
+
+        test.assertSelectorContains('.search-navigator-workspace-details', 'squid:S1181');
+        test.assertExists('.coding-rules-detail-properties .icon-severity-blocker');
+        test.assertSelectorContains('.coding-rules-detail-properties', 'error-handling');
+        test.assertSelectorContains('.coding-rules-detail-properties', '2013');
+        test.assertSelectorContains('.coding-rules-detail-properties', 'SonarQube (Java)');
+        test.assertSelectorContains('.coding-rules-detail-properties', 'Reliability > Exception handling');
+        test.assertSelectorContains('.coding-rules-detail-properties', 'LINEAR');
+        test.assertSelectorContains('.coding-rules-detail-properties', '20min');
+
+        test.assertSelectorContains('.coding-rules-detail-description', 'is the superclass of all errors and');
+        test.assertSelectorContains('.coding-rules-detail-description', 'its subclasses should be caught.');
+        test.assertSelectorContains('.coding-rules-detail-description', 'Noncompliant Code Example');
+        test.assertSelectorContains('.coding-rules-detail-description', 'Compliant Solution');
+
+        test.assertSelectorContains('.coding-rules-detail-parameters', 'max');
+        test.assertSelectorContains('.coding-rules-detail-parameters', 'Maximum authorized number of parameters');
+        test.assertSelectorContains('.coding-rules-detail-parameters', '7');
+
+        test.assertElementCount('.coding-rules-detail-quality-profile-name', 6);
+        test.assertSelectorContains('.coding-rules-detail-quality-profile-name', 'Default - Top');
+        test.assertElementCount('.coding-rules-detail-quality-profile-inheritance', 4);
+        test.assertSelectorContains('.coding-rules-detail-quality-profile-inheritance', 'Default - Top');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/coding-rules-page-should-show-empty-list.js b/server/sonar-web/src/test/js/coding-rules-page-should-show-empty-list.js
new file mode 100644 (file)
index 0000000..d918aa6
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules-page-should-show-empty-list');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-should-show-empty-list', 3, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        lib.mockRequestFromFile('/api/rules/search', 'search.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.search-navigator-facet-box');
+      })
+
+      .then(function () {
+        test.assertDoesntExist('.coding-rule');
+        test.assertSelectorContains('#coding-rules-total', 0);
+        test.assertExists('.search-navigator-no-results');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/coding-rules-page-should-show-facets.js b/server/sonar-web/src/test/js/coding-rules-page-should-show-facets.js
new file mode 100644 (file)
index 0000000..5f8b5a7
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-should-show-facets', 1, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        lib.mockRequestFromFile('/api/rules/search', 'search.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.search-navigator-facet-box');
+      })
+
+      .then(function () {
+        test.assertElementCount('.search-navigator-facet-box', 13);
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/coding-rules-page-should-show-rule-issues.js b/server/sonar-web/src/test/js/coding-rules-page-should-show-rule-issues.js
new file mode 100644 (file)
index 0000000..aa6474f
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules-page-should-show-rule-issues');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-should-show-rule-issues', 5, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        lib.mockRequestFromFile('/api/rules/search', 'search.json');
+        lib.mockRequestFromFile('/api/rules/show', 'show.json');
+        lib.mockRequestFromFile('/api/issues/search', 'issues-search.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rule.selected', function () {
+          casper.click('.coding-rule.selected .js-rule');
+        });
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rules-most-violated-projects');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('.js-rule-issues', '7');
+        test.assertSelectorContains('.coding-rules-most-violated-projects', 'SonarQube');
+        test.assertSelectorContains('.coding-rules-most-violated-projects', '2');
+        test.assertSelectorContains('.coding-rules-most-violated-projects', 'SonarQube Runner');
+        test.assertSelectorContains('.coding-rules-most-violated-projects', '1');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/coding-rules-page-should-show-rule.js b/server/sonar-web/src/test/js/coding-rules-page-should-show-rule.js
new file mode 100644 (file)
index 0000000..1b3ab38
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-should-show-rule', 7, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        lib.mockRequestFromFile('/api/rules/search', 'search.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rule.selected');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('.coding-rule.selected', 'Values passed to SQL commands should be sanitized');
+        test.assertSelectorContains('.coding-rule.selected', 'Java');
+        test.assertSelectorContains('.coding-rule.selected', 'cwe');
+        test.assertSelectorContains('.coding-rule.selected', 'owasp-top10');
+        test.assertSelectorContains('.coding-rule.selected', 'security');
+        test.assertSelectorContains('.coding-rule.selected', 'sql');
+        test.assertSelectorContains('.coding-rule.selected', 'custom-tag');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/coding-rules-page-should-show-rules.js b/server/sonar-web/src/test/js/coding-rules-page-should-show-rules.js
new file mode 100644 (file)
index 0000000..cde137a
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('coding-rules');
+lib.configureCasper();
+
+
+casper.test.begin('coding-rules-page-should-show-rules', 4, function (test) {
+  casper
+      .start(lib.buildUrl('coding-rules'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/rules/app', 'app.json');
+        lib.mockRequestFromFile('/api/rules/search', 'search.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.coding-rule');
+      })
+
+      .then(function () {
+        test.assertElementCount('.coding-rule', 25);
+        test.assertSelectorContains('.coding-rule', 'Values passed to SQL commands should be sanitized');
+        test.assertSelectorContains('.coding-rule', 'An open curly brace should be located at the beginning of a line');
+        test.assertSelectorContains('#coding-rules-total', '609');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/design-spec.js b/server/sonar-web/src/test/js/design-spec.js
new file mode 100644 (file)
index 0000000..d698904
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+var lib = require('../lib'),
+    testName = lib.testName('Design');
+
+lib.initMessages();
+lib.changeWorkingDirectory('design-spec');
+lib.configureCasper();
+
+
+casper.test.begin(testName('Base'), function suite(test) {
+  casper
+      .start(lib.buildUrl('design'), function () {
+        lib.setDefaultViewport();
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/resources', 'resources.json');
+        lib.mockRequestFromFile('/api/dependencies', 'dependencies.json');
+      })
+
+      .then(function () {
+        casper.waitWhileSelector('.spinner');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('.dsm-body', 'src/test/java/com/maif/sonar/cobol/metrics');
+        test.assertSelectorContains('.dsm-body', 'src/test/java/com/maif/sonar/cobol/repository');
+        test.assertElementCount('.dsm-body-cell-dependency', 12);
+        test.assertElementCount('.dsm-body-cell-cycle', 1);
+        test.assertSelectorContains('.dsm-body-cell-cycle', '6');
+      })
+
+      .then(function () {
+        casper.mouse.doubleclick('.dsm-body-cell-cycle');
+        casper.waitForSelector('.spinner', function () {
+          casper.waitWhileSelector('.spinner');
+        })
+      })
+
+      .then(function () {
+        test.assertElementCount('.dsm-info tr', 7);
+        test.assertSelectorContains('.dsm-info', 'src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java');
+        test.assertSelectorContains('.dsm-info', 'src/main/java/com/maif/sonar/cobol/metrics/BusinessRuleCounter.java ');
+        test.assertSelectorContains('.dsm-info', 'src/main/java/com/maif/sonar/cobol/metrics/TableMetricsVisitor.java ');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/issues-page-should-open-issue-permalink.js b/server/sonar-web/src/test/js/issues-page-should-open-issue-permalink.js
new file mode 100644 (file)
index 0000000..64b10e6
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* globals casper: false */
+
+var lib = require('../lib');
+
+
+lib.initMessages();
+lib.changeWorkingDirectory('issues-page-should-open-issue-permalink');
+lib.configureCasper();
+
+
+var issueKey = 'some-issue-key';
+
+
+casper.test.begin('issues-page-should-open-issue-permalink', 3, function (test) {
+  casper
+      .start(lib.buildUrl('issues#issues=' + encodeURI(issueKey)), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/issue_filters/app', 'app.json');
+        lib.mockRequest('/api/issues/search', '{}', { data: { issues: issueKey, p: 2 } });
+        lib.mockRequestFromFile('/api/issues/search', 'search.json', { data: { issues: issueKey } });
+        lib.mockRequestFromFile('/api/components/app', 'components-app.json');
+        lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.source-line', function () {
+          test.assertSelectorContains('.source-viewer', 'public void executeOn(Project project, SensorContext context');
+          test.assertElementCount('.issue', 1);
+          test.assertExist('.issue[data-key="' + issueKey + '"]');
+        });
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/issues-page-spec.js b/server/sonar-web/src/test/js/issues-page-spec.js
new file mode 100644 (file)
index 0000000..7dfb191
--- /dev/null
@@ -0,0 +1,316 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* globals casper: false */
+
+var lib = require('../lib'),
+    testName = lib.testName('Issues');
+
+
+lib.initMessages();
+lib.changeWorkingDirectory('issues-spec');
+lib.configureCasper();
+
+
+casper.test.begin(testName('Base'), function (test) {
+  casper
+      .start(lib.buildUrl('issues'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/issue_filters/app', 'app.json');
+        lib.mockRequestFromFile('/api/issues/search', 'search.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.facet[data-value=BLOCKER]', function () {
+          // Facets
+          test.assertExists('.facet[data-value=BLOCKER]');
+          test.assertExists('.facet[data-value=CRITICAL]');
+          test.assertExists('.facet[data-value=MAJOR]');
+          test.assertExists('.facet[data-value=MINOR]');
+          test.assertExists('.facet[data-value=INFO]');
+
+          test.assertExists('.facet[data-value=OPEN]');
+          test.assertExists('.facet[data-value=REOPENED]');
+          test.assertExists('.facet[data-value=CONFIRMED]');
+          test.assertExists('.facet[data-value=RESOLVED]');
+          test.assertExists('.facet[data-value=CLOSED]');
+
+          test.assertExists('.facet[data-unresolved]');
+          test.assertExists('.facet[data-value=REMOVED]');
+          test.assertExists('.facet[data-value=FIXED]');
+          test.assertExists('.facet[data-value=FALSE-POSITIVE]');
+
+          // Issues
+          test.assertElementCount('.issue', 50);
+          test.assertElementCount('.issue.selected', 1);
+          test.assertSelectorContains('.issue', '1 more branches need to be covered by unit tests to reach');
+
+          // Filters
+          test.assertExists('.js-toggle-filters');
+          test.assertExists('.js-new-search');
+          test.assertExists('.js-filter-save-as');
+
+          // Workspace header
+          test.assertSelectorContains('#issues-total', '4623');
+          test.assertExists('.js-prev');
+          test.assertExists('.js-next');
+          test.assertExists('.js-reload');
+          test.assertExists('.js-bulk-change');
+        });
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
+
+
+casper.test.begin(testName('Issue Box', 'Check Elements'), function (test) {
+  casper
+      .start(lib.buildUrl('issues'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/issue_filters/app', 'app.json');
+        lib.mockRequestFromFile('/api/issues/search', 'search.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.issue.selected');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('.issue.selected', "Add a 'package-info.java' file to document the");
+        test.assertExists('.issue.selected .js-issue-tags');
+        test.assertSelectorContains('.issue.selected .js-issue-tags', 'issue.no_tag');
+        test.assertExists('.issue.selected .js-issue-set-severity');
+        test.assertSelectorContains('.issue.selected .js-issue-set-severity', 'MAJOR');
+        test.assertSelectorContains('.issue.selected', 'CONFIRMED');
+        test.assertElementCount('.issue.selected .js-issue-transition', 1);
+        test.assertExists('.issue.selected .js-issue-transition');
+        test.assertExists('.issue.selected .js-issue-assign');
+        test.assertSelectorContains('.issue.selected .js-issue-assign', 'unassigned');
+        test.assertExists('.issue.selected .js-issue-plan');
+        test.assertSelectorContains('.issue.selected .js-issue-plan', 'unplanned');
+        test.assertSelectorContains('.issue.selected', '20min');
+        test.assertExists('.issue.selected .js-issue-comment');
+        test.assertExists('.issue.selected .js-issue-show-changelog');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
+
+
+casper.test.begin(testName('Issue Box', 'Tags'), function (test) {
+  casper
+      .start(lib.buildUrl('issues'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/issue_filters/app', 'app.json');
+        lib.mockRequestFromFile('/api/issues/search', 'search-with-tags.json');
+        lib.mockRequestFromFile('/api/issues/tags', 'tags.json');
+        lib.mockRequestFromFile('/api/issues/set_tags', 'tags-modified.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.issue.selected .js-issue-tags');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('.issue.selected .js-issue-tags', 'security, cwe');
+        casper.click('.issue.selected .js-issue-edit-tags');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.issue-action-option[data-value=design]');
+      })
+
+      .then(function () {
+        casper.click('.issue-action-option[data-value=design]');
+        test.assertSelectorContains('.issue.selected .js-issue-tags', 'security, cwe, design');
+      })
+
+      .then(function () {
+        casper.click('.issue-action-option[data-value=cwe]');
+        test.assertSelectorContains('.issue.selected .js-issue-tags', 'security, design');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
+
+
+casper.test.begin(testName('Issue Box', 'Transitions'), function (test) {
+  casper
+      .start(lib.buildUrl('issues'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/issue_filters/app', 'app.json');
+        lib.mockRequestFromFile('/api/issues/search', 'search.json');
+        lib.mockRequestFromFile('/api/issues/show*', 'show.json');
+        lib.mockRequest('/api/issues/do_transition', '{}');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.issue.selected .js-issue-transition');
+      })
+
+      .then(function () {
+        casper.click('.issue.selected .js-issue-transition');
+        casper.waitForSelector('.issue-action-option');
+      })
+
+      .then(function () {
+        test.assertExists('.issue-action-option[data-value=unconfirm]');
+        test.assertExists('.issue-action-option[data-value=resolve]');
+        test.assertExists('.issue-action-option[data-value=falsepositive]');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
+
+
+casper.test.begin(testName('File-Level Issues'), function (test) {
+  var issueKey = '200d4a8b-9666-4e70-9953-7bab57933f97',
+      issueSelector = '.issue[data-key="' + issueKey + '"]';
+
+  casper
+      .start(lib.buildUrl('issues'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/issue_filters/app', 'app.json');
+        lib.mockRequestFromFile('/api/issues/search', 'file-level/search.json');
+        lib.mockRequestFromFile('/api/components/app', 'file-level/components-app.json');
+        lib.mockRequestFromFile('/api/sources/lines', 'file-level/lines.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector(issueSelector, function () {
+          casper.click(issueSelector + ' .js-issue-navigate');
+        });
+      })
+
+      .then(function () {
+        casper.waitForSelector('.source-viewer ' + issueSelector, function () {
+          test.assertSelectorContains('.source-viewer ' + issueSelector, '1 duplicated blocks of code');
+        });
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
+
+
+casper.test.begin(testName('Severity Facet'), function (test) {
+  casper
+      .start(lib.buildUrl('issues'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/issue_filters/app', 'app.json');
+        lib.mockRequestFromFile('/api/issues/search', 'search-reopened.json', { data: { severities: 'BLOCKER' } });
+        lib.mockRequestFromFile('/api/issues/search', 'search.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.facet[data-value=BLOCKER]', function () {
+          casper.click('.facet[data-value=BLOCKER]');
+        });
+      })
+
+      .then(function () {
+        casper.waitForSelectorTextChange('#issues-total', function () {
+          test.assertElementCount('.issue', 4);
+        });
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
+
+
+casper.test.begin(testName('Bulk Change'), function (test) {
+  casper
+      .start(lib.buildUrl('issues'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/issue_filters/app', 'app.json');
+        lib.mockRequestFromFile('/api/issues/search', 'search.json');
+        lib.mockRequest('/issues/bulk_change_form?resolved=false',
+            '<div id="bulk-change-form">bulk change form</div>', { contentType: 'text/plain' });
+      })
+
+      .then(function () {
+        casper.waitForSelector('.issue', function () {
+          casper.waitForSelector('#issues-bulk-change');
+        });
+      })
+
+      .then(function () {
+        casper.click('#issues-bulk-change');
+        casper.waitForSelector('#bulk-change-form', function () {
+          test.assertSelectorContains('#bulk-change-form', 'bulk change form');
+        });
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/quality-gates-spec.js b/server/sonar-web/src/test/js/quality-gates-spec.js
new file mode 100644 (file)
index 0000000..2b2c7ef
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('quality-gates-spec');
+lib.configureCasper();
+
+
+casper.test.begin('Quality Gates', function suite (test) {
+  casper
+      .start(lib.buildUrl('quality-gates'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/qualitygates/app', 'app.json');
+        lib.mockRequestFromFile('/api/qualitygates/list', 'list.json');
+        lib.mockRequestFromFile('/api/qualitygates/show?id=1', 'show.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.active', function () {
+          test.assertElementCount('.active', 1);
+          test.assertSelectorHasText('.search-navigator-side .active', 'Default Gate');
+        });
+      })
+
+      .then(function () {
+        casper.waitForSelector('.search-navigator-workspace-header', function () {
+          test.assertSelectorHasText('.search-navigator-workspace-header', 'Default Gate');
+        });
+      })
+
+      .then(function () {
+        casper.waitForSelector('table.quality-gate-conditions tbody tr:nth-child(9)', function () {
+          test.assertElementCount('table.quality-gate-conditions tbody tr', 9);
+        });
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/source-viewer-create-manual-issue.js b/server/sonar-web/src/test/js/source-viewer-create-manual-issue.js
new file mode 100644 (file)
index 0000000..2cc0a79
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib'),
+    testName = lib.testName('Source Viewer');
+
+lib.initMessages();
+lib.changeWorkingDirectory('source-viewer-create-manual-issue');
+lib.configureCasper();
+
+
+casper.test.begin(testName('source-viewer-create-manual-issue'), function (test) {
+  casper
+      .start(lib.buildUrl('source-viewer'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/components/app', 'app.json');
+        lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
+        lib.mockRequestFromFile('/api/issues/search', 'issues.json');
+        lib.mockRequestFromFile('/api/issues/create', 'create-issue.json');
+        lib.mockRequestFromFile('/api/issues/show', 'create-issue.json');
+        lib.mockRequestFromFile('/api/rules/search*', 'api-rules-search.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.source-line-number[data-line-number="3"]');
+      })
+
+      .then(function () {
+        casper.click('.source-line-number[data-line-number="3"]');
+        casper.waitForSelector('.js-add-manual-issue');
+      })
+
+      .then(function () {
+        casper.click('.js-add-manual-issue');
+        casper.waitForSelector('.js-manual-issue-form');
+      })
+
+      .then(function () {
+        casper.fill('.js-manual-issue-form', {
+          rule: 'manual:api',
+          message: 'An issue message'
+        }, true);
+      })
+
+      .then(function () {
+        casper.waitForSelector('.source-line-code.has-issues[data-line-number="3"]', function () {
+          test.assertExists('.source-line-code.has-issues[data-line-number="3"]');
+        });
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/source-viewer-favorite-spec.js b/server/sonar-web/src/test/js/source-viewer-favorite-spec.js
new file mode 100644 (file)
index 0000000..91eeedc
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib'),
+    testName = lib.testName('Source Viewer');
+
+lib.initMessages();
+lib.changeWorkingDirectory('source-viewer-spec');
+lib.configureCasper();
+
+
+casper.test.begin(testName('Mark as Favorite'), function (test) {
+  casper
+      .start(lib.buildUrl('source-viewer'), function () {
+        lib.setDefaultViewport();
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequest('/api/favourites', '{}', { type: 'POST' });
+        lib.mockRequest('/api/favourites/*', '{}', { type: 'DELETE' });
+        lib.mockRequestFromFile('/api/components/app', 'app.json');
+        lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
+        lib.mockRequestFromFile('/api/issues/search', 'issues.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.source-line');
+      })
+
+      .then(function () {
+        test.assertExists('.js-favorite');
+        test.assertExists('.icon-not-favorite');
+        casper.click('.js-favorite');
+        casper.waitForSelector('.icon-favorite', function () {
+          test.assertExists('.icon-favorite');
+          casper.click('.js-favorite');
+          casper.waitForSelector('.icon-not-favorite', function () {
+            test.assertExists('.icon-not-favorite');
+          });
+        });
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
+
+
+casper.test.begin(testName('Don\'t Show Favorite If Not Logged In'), function (test) {
+  casper
+      .start(lib.buildUrl('source-viewer'), function () {
+        lib.setDefaultViewport();
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/components/app', 'app-not-logged-in.json');
+        lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
+        lib.mockRequestFromFile('/api/issues/search', 'issues.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.source-line');
+      })
+
+      .then(function () {
+        test.assertDoesntExist('.js-favorite');
+        test.assertDoesntExist('.icon-favorite');
+        test.assertDoesntExist('.icon-not-favorite');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/source-viewer-link-to-raw-spec.js b/server/sonar-web/src/test/js/source-viewer-link-to-raw-spec.js
new file mode 100644 (file)
index 0000000..8942a7c
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib'),
+    testName = lib.testName('Source Viewer');
+
+lib.initMessages();
+lib.changeWorkingDirectory('source-viewer-spec');
+lib.configureCasper();
+
+
+casper.test.begin(testName('Link to Raw'), function (test) {
+  casper
+      .start(lib.buildUrl('source-viewer'), function () {
+        lib.setDefaultViewport();
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/components/app', 'app.json');
+        lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
+        lib.mockRequestFromFile('/api/issues/search', 'issues.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.source-line');
+      })
+
+      .then(function () {
+        casper.click('.js-actions');
+        casper.waitForSelector('.js-raw-source', function () {
+          casper.click('.js-raw-source');
+        });
+      })
+
+      .then(function () {
+        casper.withPopup(/Cache\.java/, function () {
+          this.test.assertUrlMatch('org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java');
+        });
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/source-viewer-should-not-show-source-if-no-permission.js b/server/sonar-web/src/test/js/source-viewer-should-not-show-source-if-no-permission.js
new file mode 100644 (file)
index 0000000..ec29cb5
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib'),
+    testName = lib.testName('Source Viewer');
+
+lib.initMessages();
+lib.changeWorkingDirectory('source-viewer-should-not-show-source-if-no-permission');
+lib.configureCasper();
+
+
+casper.test.begin(testName('source-viewer-should-not-show-source-if-no-permission'), function (test) {
+  casper
+      .start(lib.buildUrl('source-viewer'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/components/app', 'api-components-app.json');
+        lib.mockRequest('/api/sources/lines', '{}', { status: 403 });
+        lib.mockRequestFromFile('/api/issues/search', 'api-issues-search.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.message-error', function () {
+          test.assertDoesntExist('.source-line');
+        });
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/source-viewer-should-open-in-new-window-with-line.js b/server/sonar-web/src/test/js/source-viewer-should-open-in-new-window-with-line.js
new file mode 100644 (file)
index 0000000..f1c6228
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib'),
+    testName = lib.testName('Source Viewer');
+
+lib.initMessages();
+lib.changeWorkingDirectory('source-viewer-should-open-in-new-window');
+lib.configureCasper();
+
+
+casper.test.begin(testName('source-viewer-should-open-in-new-window-with-line'), function (test) {
+  casper
+      .start(lib.buildUrl('source-viewer'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/components/app', 'api-components-app.json');
+        lib.mockRequestFromFile('/api/sources/lines', 'api-sources-lines.json');
+        lib.mockRequestFromFile('/api/issues/search', 'api-issues-search.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.source-line');
+      })
+
+      .then(function () {
+        casper.click('.source-line-number[data-line-number="6"]');
+        casper.waitForSelector('.bubble-popup');
+      })
+
+      .then(function () {
+        casper.click('.js-actions');
+        casper.waitForSelector('.js-new-window', function () {
+          casper.click('.js-new-window');
+        });
+      })
+
+      .then(function () {
+        casper.withPopup(/Simplest\.java/, function () {
+          this.test.assertUrlMatch('test:fake-project-for-tests:src/main/java/foo/Simplest.java');
+          this.test.assertUrlMatch('line=6');
+        });
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/source-viewer-should-open-in-new-window.js b/server/sonar-web/src/test/js/source-viewer-should-open-in-new-window.js
new file mode 100644 (file)
index 0000000..200932f
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+var lib = require('../lib'),
+    testName = lib.testName('Source Viewer');
+
+lib.initMessages();
+lib.changeWorkingDirectory('source-viewer-should-open-in-new-window');
+lib.configureCasper();
+
+
+casper.test.begin(testName('source-viewer-should-open-in-new-window'), function (test) {
+  casper
+      .start(lib.buildUrl('source-viewer'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/components/app', 'api-components-app.json');
+        lib.mockRequestFromFile('/api/sources/lines', 'api-sources-lines.json');
+        lib.mockRequestFromFile('/api/issues/search', 'api-issues-search.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.source-line');
+      })
+
+      .then(function () {
+        casper.click('.js-actions');
+        casper.waitForSelector('.js-new-window', function () {
+          casper.click('.js-new-window');
+        });
+      })
+
+      .then(function () {
+        casper.withPopup(/Simplest\.java/, function () {
+          this.test.assertUrlMatch('test:fake-project-for-tests:src/main/java/foo/Simplest.java');
+        });
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/source-viewer-spec.js b/server/sonar-web/src/test/js/source-viewer-spec.js
new file mode 100644 (file)
index 0000000..7adcee1
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* global casper:false */
+
+
+var lib = require('../lib'),
+    testName = lib.testName('Source Viewer');
+
+lib.initMessages();
+lib.changeWorkingDirectory('source-viewer-spec');
+lib.configureCasper();
+
+
+casper.test.begin(testName('Base'), function (test) {
+  casper
+      .start(lib.buildUrl('source-viewer'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/components/app', 'app.json');
+        lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
+        lib.mockRequestFromFile('/api/issues/search', 'issues.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.source-line', function () {
+          // Check header elements
+          test.assertExists('.source-viewer-header');
+          test.assertSelectorContains('.source-viewer-header', 'SonarQube');
+          test.assertSelectorContains('.source-viewer-header', 'SonarQube :: Batch');
+          test.assertSelectorContains('.source-viewer-header', 'src/main/java/org/sonar/batch/index/Cache.java');
+          test.assertExists('.source-viewer-header .js-favorite');
+          test.assertExists('.source-viewer-header-actions');
+
+          // Check main measures
+          // FIXME enable lines check
+          //test.assertSelectorContains('.source-viewer-header-measure', '379');
+          test.assertSelectorContains('.source-viewer-header-measure', 'A');
+          test.assertSelectorContains('.source-viewer-header-measure', '2h 10min');
+          test.assertSelectorContains('.source-viewer-header-measure', '6');
+          test.assertSelectorContains('.source-viewer-header-measure', '74.3%');
+          test.assertSelectorContains('.source-viewer-header-measure', '5.8%');
+
+          // Check source
+          // FIXME enable source lines count check
+          //test.assertElementCount('.source-line', 518);
+          test.assertSelectorContains('.source-viewer', 'public class Cache');
+        });
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
+
+
+casper.test.begin(testName('Decoration'), function (test) {
+  casper
+      .start(lib.buildUrl('source-viewer'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/components/app', 'app.json');
+        lib.mockRequestFromFile('/api/sources/lines', 'lines.json');
+        lib.mockRequestFromFile('/api/issues/search', 'issues.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.source-line');
+      })
+
+      .then(function () {
+        // Check issues decoration
+        test.assertElementCount('.has-issues', 6);
+      })
+
+      .then(function () {
+        // Check coverage decoration
+        test.assertElementCount('.source-line-covered', 142);
+        test.assertElementCount('.source-line-uncovered', 50);
+        test.assertElementCount('.source-line-partially-covered', 2);
+      })
+
+      .then(function () {
+        // Check duplications decoration
+        test.assertElementCount('.source-line-duplicated', 30);
+      })
+
+      .then(function () {
+        // Check scm decoration
+        test.assertElementCount('.source-line-scm-inner', 186);
+        test.assertExists('.source-line-scm-inner[data-author="simon.brandhof@gmail.com"]');
+        test.assertExists('.source-line-scm-inner[data-author="julien.henry@sonarsource.com"]');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
+
+
+casper.test.begin(testName('Test File'), function (test) {
+  casper
+      .start(lib.buildUrl('source-viewer'), function () {
+        lib.setDefaultViewport();
+
+        lib.mockRequest('/api/l10n/index', '{}');
+        lib.mockRequestFromFile('/api/components/app', 'tests/app.json');
+        lib.mockRequestFromFile('/api/sources/lines', 'tests/lines.json');
+        lib.mockRequestFromFile('/api/issues/search', 'issues.json');
+      })
+
+      .then(function () {
+        casper.waitForSelector('.source-line');
+      })
+
+      .then(function () {
+        test.assertSelectorContains('.source-viewer-header-measure', '6');
+      })
+
+      .then(function () {
+        lib.sendCoverage();
+      })
+
+      .run(function () {
+        test.done();
+      });
+});
diff --git a/server/sonar-web/src/test/js/treemap-spec.js b/server/sonar-web/src/test/js/treemap-spec.js
new file mode 100644 (file)
index 0000000..43100cf
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+var lib = require('../lib');
+
+lib.initMessages();
+lib.changeWorkingDirectory('treemap-spec');
+lib.configureCasper();
+
+
+casper.test.begin('Treemap', function (test) {
+  var treemapData = JSON.parse(fs.read('treemap.json'));
+
+  casper.start(lib.buildUrl('treemap'), function () {
+    lib.mockRequestFromFile('/api/resources/index', 'treemap-resources.json');
+
+    casper.evaluate(function (treemapData) {
+      var widget = new SonarWidgets.Treemap();
+      widget
+          .metrics(treemapData.metrics)
+          .metricsPriority(['coverage', 'ncloc'])
+          .components(treemapData.components)
+          .options({
+            heightInPercents: 55,
+            maxItems: 30,
+            maxItemsReachedMessage: '',
+            baseUrl: '/dashboard/index/',
+            noData: '',
+            resource: ''
+          })
+          .render('#container');
+    }, treemapData)
+  });
+
+  casper
+      .then(function () {
+        casper.waitWhileSelector('.spinner', function() {
+          test.assertElementCount('.treemap-cell', 30);
+          test.assertSelectorHasText('.treemap-cell', 'SonarQube');
+          test.assertMatch(casper.getElementAttribute('.treemap-link', 'href'), /dashboard\/index/,
+              'Treemap cells have links to dashboards');
+        });
+      })
+      .then(function () {
+        casper.evaluate(function () {
+          var evt = document.createEvent('MouseEvents');
+          evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
+          d3.select('.treemap-cell').node().dispatchEvent(evt);
+        });
+      })
+      .then(function () {
+        casper.wait(500, function () {
+          test.assertSelectorHasText('.treemap-cell', 'Server');
+          test.assertElementCount('.treemap-cell', 25);
+        });
+      })
+      .then(function () {
+        lib.sendCoverage();
+      });
+
+  casper.run(function() {
+    test.done();
+  });
+});
diff --git a/server/sonar-web/src/test/json/coding-rules-page-active-severity-facet/app.json b/server/sonar-web/src/test/json/coding-rules-page-active-severity-facet/app.json
new file mode 100644 (file)
index 0000000..0eb43bc
--- /dev/null
@@ -0,0 +1,316 @@
+{
+  "canWrite": false,
+  "qualityprofiles": [
+    {
+      "key": "java-default-with-mojo-conventions-49307",
+      "name": "Default - Maven Conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-default-with-sonarsource-conventions-27339",
+      "name": "Default - SonarSource conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-top-profile-without-formatting-conventions-50037",
+      "name": "Default - Top",
+      "lang": "java"
+    },
+    {
+      "key": "java-findbugs-14954",
+      "name": "FindBugs",
+      "lang": "java"
+    },
+    {
+      "key": "java-for-sq-java-plugin-only-92289",
+      "name": "For SQ Java Plugin Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "java-for-sq-only-95381",
+      "name": "For SQ Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "php-psr-2-06315",
+      "name": "PSR-2",
+      "lang": "php"
+    },
+    {
+      "key": "java-sonar-way-80423",
+      "name": "Sonar way",
+      "lang": "java"
+    },
+    {
+      "key": "js-sonar-way",
+      "name": "Sonar way",
+      "lang": "js"
+    },
+    {
+      "key": "php-sonar-way-05548",
+      "name": "Sonar way",
+      "lang": "php"
+    },
+    {
+      "key": "py-sonar-way-80265",
+      "name": "Sonar way",
+      "lang": "py"
+    },
+    {
+      "key": "java-without-findbugs",
+      "name": "Without Findbugs",
+      "lang": "java"
+    }
+  ],
+  "languages": {
+    "py": "Python",
+    "js": "JavaScript",
+    "php": "PHP",
+    "java": "Java"
+  },
+  "repositories": [
+    {
+      "key": "common-java",
+      "name": "Common SonarQube",
+      "language": "java"
+    },
+    {
+      "key": "common-js",
+      "name": "Common SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "common-php",
+      "name": "Common SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "common-py",
+      "name": "Common SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "Pylint",
+      "name": "Pylint",
+      "language": "py"
+    },
+    {
+      "key": "javascript",
+      "name": "SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "php",
+      "name": "SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "python",
+      "name": "SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "squid",
+      "name": "SonarQube",
+      "language": "java"
+    }
+  ],
+  "statuses": {
+    "BETA": "Beta",
+    "DEPRECATED": "Deprecated",
+    "READY": "Ready"
+  },
+  "characteristics": [
+    {
+      "key": "UNDERSTANDABILITY",
+      "name": "Understandability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "MAINTAINABILITY",
+      "name": "Maintainability"
+    },
+    {
+      "key": "TIME_ZONE_RELATED_PORTABILITY",
+      "name": "Time zone related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "READABILITY",
+      "name": "Readability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "SECURITY_FEATURES",
+      "name": "Security features",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_RELIABILITY",
+      "name": "Architecture related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "OS_RELATED_PORTABILITY",
+      "name": "OS related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "EXCEPTION_HANDLING",
+      "name": "Exception handling",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_CHANGEABILITY",
+      "name": "Logic related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "SOFTWARE_RELATED_PORTABILITY",
+      "name": "Software related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
+      "name": "Input validation and representation",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "LANGUAGE_RELATED_PORTABILITY",
+      "name": "Language related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "ERRORS",
+      "name": "Errors",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "SECURITY",
+      "name": "Security"
+    },
+    {
+      "key": "RELIABILITY",
+      "name": "Reliability"
+    },
+    {
+      "key": "PORTABILITY",
+      "name": "Portability"
+    },
+    {
+      "key": "HARDWARE_RELATED_PORTABILITY",
+      "name": "Hardware related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "SYNCHRONIZATION_RELIABILITY",
+      "name": "Synchronization related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "TRANSPORTABILITY",
+      "name": "Transportability",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "COMPILER_RELATED_PORTABILITY",
+      "name": "Compiler related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "RESOURCE_RELIABILITY",
+      "name": "Resource",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "CPU_EFFICIENCY",
+      "name": "Processor use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "EFFICIENCY",
+      "name": "Efficiency"
+    },
+    {
+      "key": "CHANGEABILITY",
+      "name": "Changeability"
+    },
+    {
+      "key": "DATA_CHANGEABILITY",
+      "name": "Data related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "API_ABUSE",
+      "name": "API abuse",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_CHANGEABILITY",
+      "name": "Architecture related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "UNIT_TESTS",
+      "name": "Unit tests",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "INSTRUCTION_RELIABILITY",
+      "name": "Instruction related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "REUSABILITY",
+      "name": "Reusability"
+    },
+    {
+      "key": "MODULARITY",
+      "name": "Modularity",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "UNIT_TESTABILITY",
+      "name": "Unit level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "TESTABILITY",
+      "name": "Testability"
+    },
+    {
+      "key": "INTEGRATION_TESTABILITY",
+      "name": "Integration level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "NETWORK_USE",
+      "name": "Network use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "MEMORY_EFFICIENCY",
+      "name": "Memory use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "DATA_RELIABILITY",
+      "name": "Data related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "FAULT_TOLERANCE",
+      "name": "Fault tolerance",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_RELIABILITY",
+      "name": "Logic related reliability",
+      "parent": "RELIABILITY"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-active-severity-facet/search-BLOCKER.json b/server/sonar-web/src/test/json/coding-rules-page-active-severity-facet/search-BLOCKER.json
new file mode 100644 (file)
index 0000000..3dc49f0
--- /dev/null
@@ -0,0 +1,371 @@
+{
+  "total": 4,
+  "p": 1,
+  "ps": 25,
+  "rules": [
+    {
+      "key": "squid:S2077",
+      "name": "Values passed to SQL commands should be sanitized",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security",
+        "sql"
+      ],
+      "tags": [
+        "custom-tag"
+      ]
+    },
+    {
+      "key": "php:S107",
+      "name": "Functions should not have too many parameters",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1192",
+      "name": "String literals should not be duplicated",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1145",
+      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "bug",
+        "cwe",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S108",
+      "name": "Nested blocks of code should not be left empty",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1301",
+      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S103",
+      "name": "Lines should not be too long",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1144",
+      "name": "Unused private method should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S105",
+      "name": "Tabulation characters should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1481",
+      "name": "Unused local variables should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1142",
+      "name": "Functions should not contain too many return statements",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S104",
+      "name": "Files should not have too many lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1605",
+      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1448",
+      "name": "Classes should not have too many methods",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1603",
+      "name": "PHP 4 constructor declarations should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1779",
+      "name": "Only LF character (Unix-like) should be used to end lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1185",
+      "name": "Overriding methods should do more than simply call the same method in the super class",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1600",
+      "name": "Deprecated predefined variables should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1109",
+      "name": "A close curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2001",
+      "name": "Functions deprecated in PHP 5 should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "obsolete"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2002",
+      "name": "Errors should not be silenced",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2000",
+      "name": "Files should not contain characters before \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-active-severity-facet/search-qprofile.json b/server/sonar-web/src/test/json/coding-rules-page-active-severity-facet/search-qprofile.json
new file mode 100644 (file)
index 0000000..cbbb272
--- /dev/null
@@ -0,0 +1,371 @@
+{
+  "total": 407,
+  "p": 1,
+  "ps": 25,
+  "rules": [
+    {
+      "key": "squid:S2077",
+      "name": "Values passed to SQL commands should be sanitized",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security",
+        "sql"
+      ],
+      "tags": [
+        "custom-tag"
+      ]
+    },
+    {
+      "key": "php:S107",
+      "name": "Functions should not have too many parameters",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1192",
+      "name": "String literals should not be duplicated",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1145",
+      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "bug",
+        "cwe",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S108",
+      "name": "Nested blocks of code should not be left empty",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1301",
+      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S103",
+      "name": "Lines should not be too long",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1144",
+      "name": "Unused private method should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S105",
+      "name": "Tabulation characters should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1481",
+      "name": "Unused local variables should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1142",
+      "name": "Functions should not contain too many return statements",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S104",
+      "name": "Files should not have too many lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1605",
+      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1448",
+      "name": "Classes should not have too many methods",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1603",
+      "name": "PHP 4 constructor declarations should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1779",
+      "name": "Only LF character (Unix-like) should be used to end lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1185",
+      "name": "Overriding methods should do more than simply call the same method in the super class",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1600",
+      "name": "Deprecated predefined variables should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1109",
+      "name": "A close curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2001",
+      "name": "Functions deprecated in PHP 5 should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "obsolete"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2002",
+      "name": "Errors should not be silenced",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2000",
+      "name": "Files should not contain characters before \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-active-severity-facet/search.json b/server/sonar-web/src/test/json/coding-rules-page-active-severity-facet/search.json
new file mode 100644 (file)
index 0000000..c17c58d
--- /dev/null
@@ -0,0 +1,371 @@
+{
+  "total": 609,
+  "p": 1,
+  "ps": 25,
+  "rules": [
+    {
+      "key": "squid:S2077",
+      "name": "Values passed to SQL commands should be sanitized",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security",
+        "sql"
+      ],
+      "tags": [
+        "custom-tag"
+      ]
+    },
+    {
+      "key": "php:S107",
+      "name": "Functions should not have too many parameters",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1192",
+      "name": "String literals should not be duplicated",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1145",
+      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "bug",
+        "cwe",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S108",
+      "name": "Nested blocks of code should not be left empty",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1301",
+      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S103",
+      "name": "Lines should not be too long",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1144",
+      "name": "Unused private method should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S105",
+      "name": "Tabulation characters should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1481",
+      "name": "Unused local variables should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1142",
+      "name": "Functions should not contain too many return statements",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S104",
+      "name": "Files should not have too many lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1605",
+      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1448",
+      "name": "Classes should not have too many methods",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1603",
+      "name": "PHP 4 constructor declarations should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1779",
+      "name": "Only LF character (Unix-like) should be used to end lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1185",
+      "name": "Overriding methods should do more than simply call the same method in the super class",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1600",
+      "name": "Deprecated predefined variables should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1109",
+      "name": "A close curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2001",
+      "name": "Functions deprecated in PHP 5 should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "obsolete"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2002",
+      "name": "Errors should not be silenced",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2000",
+      "name": "Files should not contain characters before \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-available-since/app.json b/server/sonar-web/src/test/json/coding-rules-page-available-since/app.json
new file mode 100644 (file)
index 0000000..0eb43bc
--- /dev/null
@@ -0,0 +1,316 @@
+{
+  "canWrite": false,
+  "qualityprofiles": [
+    {
+      "key": "java-default-with-mojo-conventions-49307",
+      "name": "Default - Maven Conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-default-with-sonarsource-conventions-27339",
+      "name": "Default - SonarSource conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-top-profile-without-formatting-conventions-50037",
+      "name": "Default - Top",
+      "lang": "java"
+    },
+    {
+      "key": "java-findbugs-14954",
+      "name": "FindBugs",
+      "lang": "java"
+    },
+    {
+      "key": "java-for-sq-java-plugin-only-92289",
+      "name": "For SQ Java Plugin Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "java-for-sq-only-95381",
+      "name": "For SQ Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "php-psr-2-06315",
+      "name": "PSR-2",
+      "lang": "php"
+    },
+    {
+      "key": "java-sonar-way-80423",
+      "name": "Sonar way",
+      "lang": "java"
+    },
+    {
+      "key": "js-sonar-way",
+      "name": "Sonar way",
+      "lang": "js"
+    },
+    {
+      "key": "php-sonar-way-05548",
+      "name": "Sonar way",
+      "lang": "php"
+    },
+    {
+      "key": "py-sonar-way-80265",
+      "name": "Sonar way",
+      "lang": "py"
+    },
+    {
+      "key": "java-without-findbugs",
+      "name": "Without Findbugs",
+      "lang": "java"
+    }
+  ],
+  "languages": {
+    "py": "Python",
+    "js": "JavaScript",
+    "php": "PHP",
+    "java": "Java"
+  },
+  "repositories": [
+    {
+      "key": "common-java",
+      "name": "Common SonarQube",
+      "language": "java"
+    },
+    {
+      "key": "common-js",
+      "name": "Common SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "common-php",
+      "name": "Common SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "common-py",
+      "name": "Common SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "Pylint",
+      "name": "Pylint",
+      "language": "py"
+    },
+    {
+      "key": "javascript",
+      "name": "SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "php",
+      "name": "SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "python",
+      "name": "SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "squid",
+      "name": "SonarQube",
+      "language": "java"
+    }
+  ],
+  "statuses": {
+    "BETA": "Beta",
+    "DEPRECATED": "Deprecated",
+    "READY": "Ready"
+  },
+  "characteristics": [
+    {
+      "key": "UNDERSTANDABILITY",
+      "name": "Understandability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "MAINTAINABILITY",
+      "name": "Maintainability"
+    },
+    {
+      "key": "TIME_ZONE_RELATED_PORTABILITY",
+      "name": "Time zone related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "READABILITY",
+      "name": "Readability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "SECURITY_FEATURES",
+      "name": "Security features",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_RELIABILITY",
+      "name": "Architecture related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "OS_RELATED_PORTABILITY",
+      "name": "OS related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "EXCEPTION_HANDLING",
+      "name": "Exception handling",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_CHANGEABILITY",
+      "name": "Logic related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "SOFTWARE_RELATED_PORTABILITY",
+      "name": "Software related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
+      "name": "Input validation and representation",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "LANGUAGE_RELATED_PORTABILITY",
+      "name": "Language related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "ERRORS",
+      "name": "Errors",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "SECURITY",
+      "name": "Security"
+    },
+    {
+      "key": "RELIABILITY",
+      "name": "Reliability"
+    },
+    {
+      "key": "PORTABILITY",
+      "name": "Portability"
+    },
+    {
+      "key": "HARDWARE_RELATED_PORTABILITY",
+      "name": "Hardware related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "SYNCHRONIZATION_RELIABILITY",
+      "name": "Synchronization related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "TRANSPORTABILITY",
+      "name": "Transportability",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "COMPILER_RELATED_PORTABILITY",
+      "name": "Compiler related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "RESOURCE_RELIABILITY",
+      "name": "Resource",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "CPU_EFFICIENCY",
+      "name": "Processor use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "EFFICIENCY",
+      "name": "Efficiency"
+    },
+    {
+      "key": "CHANGEABILITY",
+      "name": "Changeability"
+    },
+    {
+      "key": "DATA_CHANGEABILITY",
+      "name": "Data related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "API_ABUSE",
+      "name": "API abuse",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_CHANGEABILITY",
+      "name": "Architecture related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "UNIT_TESTS",
+      "name": "Unit tests",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "INSTRUCTION_RELIABILITY",
+      "name": "Instruction related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "REUSABILITY",
+      "name": "Reusability"
+    },
+    {
+      "key": "MODULARITY",
+      "name": "Modularity",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "UNIT_TESTABILITY",
+      "name": "Unit level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "TESTABILITY",
+      "name": "Testability"
+    },
+    {
+      "key": "INTEGRATION_TESTABILITY",
+      "name": "Integration level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "NETWORK_USE",
+      "name": "Network use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "MEMORY_EFFICIENCY",
+      "name": "Memory use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "DATA_RELIABILITY",
+      "name": "Data related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "FAULT_TOLERANCE",
+      "name": "Fault tolerance",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_RELIABILITY",
+      "name": "Logic related reliability",
+      "parent": "RELIABILITY"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-available-since/search-limited.json b/server/sonar-web/src/test/json/coding-rules-page-available-since/search-limited.json
new file mode 100644 (file)
index 0000000..ca5b331
--- /dev/null
@@ -0,0 +1,371 @@
+{
+  "total": 101,
+  "p": 1,
+  "ps": 25,
+  "rules": [
+    {
+      "key": "squid:S2077",
+      "name": "Values passed to SQL commands should be sanitized",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security",
+        "sql"
+      ],
+      "tags": [
+        "custom-tag"
+      ]
+    },
+    {
+      "key": "php:S107",
+      "name": "Functions should not have too many parameters",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1192",
+      "name": "String literals should not be duplicated",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1145",
+      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "bug",
+        "cwe",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S108",
+      "name": "Nested blocks of code should not be left empty",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1301",
+      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S103",
+      "name": "Lines should not be too long",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1144",
+      "name": "Unused private method should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S105",
+      "name": "Tabulation characters should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1481",
+      "name": "Unused local variables should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1142",
+      "name": "Functions should not contain too many return statements",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S104",
+      "name": "Files should not have too many lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1605",
+      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1448",
+      "name": "Classes should not have too many methods",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1603",
+      "name": "PHP 4 constructor declarations should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1779",
+      "name": "Only LF character (Unix-like) should be used to end lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1185",
+      "name": "Overriding methods should do more than simply call the same method in the super class",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1600",
+      "name": "Deprecated predefined variables should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1109",
+      "name": "A close curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2001",
+      "name": "Functions deprecated in PHP 5 should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "obsolete"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2002",
+      "name": "Errors should not be silenced",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2000",
+      "name": "Files should not contain characters before \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-available-since/search.json b/server/sonar-web/src/test/json/coding-rules-page-available-since/search.json
new file mode 100644 (file)
index 0000000..c17c58d
--- /dev/null
@@ -0,0 +1,371 @@
+{
+  "total": 609,
+  "p": 1,
+  "ps": 25,
+  "rules": [
+    {
+      "key": "squid:S2077",
+      "name": "Values passed to SQL commands should be sanitized",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security",
+        "sql"
+      ],
+      "tags": [
+        "custom-tag"
+      ]
+    },
+    {
+      "key": "php:S107",
+      "name": "Functions should not have too many parameters",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1192",
+      "name": "String literals should not be duplicated",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1145",
+      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "bug",
+        "cwe",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S108",
+      "name": "Nested blocks of code should not be left empty",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1301",
+      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S103",
+      "name": "Lines should not be too long",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1144",
+      "name": "Unused private method should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S105",
+      "name": "Tabulation characters should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1481",
+      "name": "Unused local variables should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1142",
+      "name": "Functions should not contain too many return statements",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S104",
+      "name": "Files should not have too many lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1605",
+      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1448",
+      "name": "Classes should not have too many methods",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1603",
+      "name": "PHP 4 constructor declarations should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1779",
+      "name": "Only LF character (Unix-like) should be used to end lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1185",
+      "name": "Overriding methods should do more than simply call the same method in the super class",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1600",
+      "name": "Deprecated predefined variables should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1109",
+      "name": "A close curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2001",
+      "name": "Functions deprecated in PHP 5 should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "obsolete"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2002",
+      "name": "Errors should not be silenced",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2000",
+      "name": "Files should not contain characters before \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/app.json b/server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/app.json
new file mode 100644 (file)
index 0000000..0eb43bc
--- /dev/null
@@ -0,0 +1,316 @@
+{
+  "canWrite": false,
+  "qualityprofiles": [
+    {
+      "key": "java-default-with-mojo-conventions-49307",
+      "name": "Default - Maven Conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-default-with-sonarsource-conventions-27339",
+      "name": "Default - SonarSource conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-top-profile-without-formatting-conventions-50037",
+      "name": "Default - Top",
+      "lang": "java"
+    },
+    {
+      "key": "java-findbugs-14954",
+      "name": "FindBugs",
+      "lang": "java"
+    },
+    {
+      "key": "java-for-sq-java-plugin-only-92289",
+      "name": "For SQ Java Plugin Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "java-for-sq-only-95381",
+      "name": "For SQ Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "php-psr-2-06315",
+      "name": "PSR-2",
+      "lang": "php"
+    },
+    {
+      "key": "java-sonar-way-80423",
+      "name": "Sonar way",
+      "lang": "java"
+    },
+    {
+      "key": "js-sonar-way",
+      "name": "Sonar way",
+      "lang": "js"
+    },
+    {
+      "key": "php-sonar-way-05548",
+      "name": "Sonar way",
+      "lang": "php"
+    },
+    {
+      "key": "py-sonar-way-80265",
+      "name": "Sonar way",
+      "lang": "py"
+    },
+    {
+      "key": "java-without-findbugs",
+      "name": "Without Findbugs",
+      "lang": "java"
+    }
+  ],
+  "languages": {
+    "py": "Python",
+    "js": "JavaScript",
+    "php": "PHP",
+    "java": "Java"
+  },
+  "repositories": [
+    {
+      "key": "common-java",
+      "name": "Common SonarQube",
+      "language": "java"
+    },
+    {
+      "key": "common-js",
+      "name": "Common SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "common-php",
+      "name": "Common SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "common-py",
+      "name": "Common SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "Pylint",
+      "name": "Pylint",
+      "language": "py"
+    },
+    {
+      "key": "javascript",
+      "name": "SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "php",
+      "name": "SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "python",
+      "name": "SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "squid",
+      "name": "SonarQube",
+      "language": "java"
+    }
+  ],
+  "statuses": {
+    "BETA": "Beta",
+    "DEPRECATED": "Deprecated",
+    "READY": "Ready"
+  },
+  "characteristics": [
+    {
+      "key": "UNDERSTANDABILITY",
+      "name": "Understandability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "MAINTAINABILITY",
+      "name": "Maintainability"
+    },
+    {
+      "key": "TIME_ZONE_RELATED_PORTABILITY",
+      "name": "Time zone related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "READABILITY",
+      "name": "Readability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "SECURITY_FEATURES",
+      "name": "Security features",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_RELIABILITY",
+      "name": "Architecture related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "OS_RELATED_PORTABILITY",
+      "name": "OS related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "EXCEPTION_HANDLING",
+      "name": "Exception handling",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_CHANGEABILITY",
+      "name": "Logic related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "SOFTWARE_RELATED_PORTABILITY",
+      "name": "Software related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
+      "name": "Input validation and representation",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "LANGUAGE_RELATED_PORTABILITY",
+      "name": "Language related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "ERRORS",
+      "name": "Errors",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "SECURITY",
+      "name": "Security"
+    },
+    {
+      "key": "RELIABILITY",
+      "name": "Reliability"
+    },
+    {
+      "key": "PORTABILITY",
+      "name": "Portability"
+    },
+    {
+      "key": "HARDWARE_RELATED_PORTABILITY",
+      "name": "Hardware related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "SYNCHRONIZATION_RELIABILITY",
+      "name": "Synchronization related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "TRANSPORTABILITY",
+      "name": "Transportability",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "COMPILER_RELATED_PORTABILITY",
+      "name": "Compiler related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "RESOURCE_RELIABILITY",
+      "name": "Resource",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "CPU_EFFICIENCY",
+      "name": "Processor use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "EFFICIENCY",
+      "name": "Efficiency"
+    },
+    {
+      "key": "CHANGEABILITY",
+      "name": "Changeability"
+    },
+    {
+      "key": "DATA_CHANGEABILITY",
+      "name": "Data related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "API_ABUSE",
+      "name": "API abuse",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_CHANGEABILITY",
+      "name": "Architecture related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "UNIT_TESTS",
+      "name": "Unit tests",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "INSTRUCTION_RELIABILITY",
+      "name": "Instruction related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "REUSABILITY",
+      "name": "Reusability"
+    },
+    {
+      "key": "MODULARITY",
+      "name": "Modularity",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "UNIT_TESTABILITY",
+      "name": "Unit level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "TESTABILITY",
+      "name": "Testability"
+    },
+    {
+      "key": "INTEGRATION_TESTABILITY",
+      "name": "Integration level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "NETWORK_USE",
+      "name": "Network use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "MEMORY_EFFICIENCY",
+      "name": "Memory use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "DATA_RELIABILITY",
+      "name": "Data related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "FAULT_TOLERANCE",
+      "name": "Fault tolerance",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_RELIABILITY",
+      "name": "Logic related reliability",
+      "parent": "RELIABILITY"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/search-inherited.json b/server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/search-inherited.json
new file mode 100644 (file)
index 0000000..ca5b331
--- /dev/null
@@ -0,0 +1,371 @@
+{
+  "total": 101,
+  "p": 1,
+  "ps": 25,
+  "rules": [
+    {
+      "key": "squid:S2077",
+      "name": "Values passed to SQL commands should be sanitized",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security",
+        "sql"
+      ],
+      "tags": [
+        "custom-tag"
+      ]
+    },
+    {
+      "key": "php:S107",
+      "name": "Functions should not have too many parameters",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1192",
+      "name": "String literals should not be duplicated",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1145",
+      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "bug",
+        "cwe",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S108",
+      "name": "Nested blocks of code should not be left empty",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1301",
+      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S103",
+      "name": "Lines should not be too long",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1144",
+      "name": "Unused private method should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S105",
+      "name": "Tabulation characters should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1481",
+      "name": "Unused local variables should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1142",
+      "name": "Functions should not contain too many return statements",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S104",
+      "name": "Files should not have too many lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1605",
+      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1448",
+      "name": "Classes should not have too many methods",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1603",
+      "name": "PHP 4 constructor declarations should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1779",
+      "name": "Only LF character (Unix-like) should be used to end lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1185",
+      "name": "Overriding methods should do more than simply call the same method in the super class",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1600",
+      "name": "Deprecated predefined variables should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1109",
+      "name": "A close curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2001",
+      "name": "Functions deprecated in PHP 5 should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "obsolete"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2002",
+      "name": "Errors should not be silenced",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2000",
+      "name": "Files should not contain characters before \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/search-not-inherited.json b/server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/search-not-inherited.json
new file mode 100644 (file)
index 0000000..c49bff7
--- /dev/null
@@ -0,0 +1,371 @@
+{
+  "total": 103,
+  "p": 1,
+  "ps": 25,
+  "rules": [
+    {
+      "key": "squid:S2077",
+      "name": "Values passed to SQL commands should be sanitized",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security",
+        "sql"
+      ],
+      "tags": [
+        "custom-tag"
+      ]
+    },
+    {
+      "key": "php:S107",
+      "name": "Functions should not have too many parameters",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1192",
+      "name": "String literals should not be duplicated",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1145",
+      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "bug",
+        "cwe",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S108",
+      "name": "Nested blocks of code should not be left empty",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1301",
+      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S103",
+      "name": "Lines should not be too long",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1144",
+      "name": "Unused private method should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S105",
+      "name": "Tabulation characters should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1481",
+      "name": "Unused local variables should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1142",
+      "name": "Functions should not contain too many return statements",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S104",
+      "name": "Files should not have too many lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1605",
+      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1448",
+      "name": "Classes should not have too many methods",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1603",
+      "name": "PHP 4 constructor declarations should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1779",
+      "name": "Only LF character (Unix-like) should be used to end lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1185",
+      "name": "Overriding methods should do more than simply call the same method in the super class",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1600",
+      "name": "Deprecated predefined variables should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1109",
+      "name": "A close curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2001",
+      "name": "Functions deprecated in PHP 5 should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "obsolete"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2002",
+      "name": "Errors should not be silenced",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2000",
+      "name": "Files should not contain characters before \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/search-overriden.json b/server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/search-overriden.json
new file mode 100644 (file)
index 0000000..60bb4a7
--- /dev/null
@@ -0,0 +1,371 @@
+{
+  "total": 102,
+  "p": 1,
+  "ps": 25,
+  "rules": [
+    {
+      "key": "squid:S2077",
+      "name": "Values passed to SQL commands should be sanitized",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security",
+        "sql"
+      ],
+      "tags": [
+        "custom-tag"
+      ]
+    },
+    {
+      "key": "php:S107",
+      "name": "Functions should not have too many parameters",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1192",
+      "name": "String literals should not be duplicated",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1145",
+      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "bug",
+        "cwe",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S108",
+      "name": "Nested blocks of code should not be left empty",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1301",
+      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S103",
+      "name": "Lines should not be too long",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1144",
+      "name": "Unused private method should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S105",
+      "name": "Tabulation characters should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1481",
+      "name": "Unused local variables should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1142",
+      "name": "Functions should not contain too many return statements",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S104",
+      "name": "Files should not have too many lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1605",
+      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1448",
+      "name": "Classes should not have too many methods",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1603",
+      "name": "PHP 4 constructor declarations should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1779",
+      "name": "Only LF character (Unix-like) should be used to end lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1185",
+      "name": "Overriding methods should do more than simply call the same method in the super class",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1600",
+      "name": "Deprecated predefined variables should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1109",
+      "name": "A close curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2001",
+      "name": "Functions deprecated in PHP 5 should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "obsolete"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2002",
+      "name": "Errors should not be silenced",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2000",
+      "name": "Files should not contain characters before \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/search-qprofile.json b/server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/search-qprofile.json
new file mode 100644 (file)
index 0000000..cbbb272
--- /dev/null
@@ -0,0 +1,371 @@
+{
+  "total": 407,
+  "p": 1,
+  "ps": 25,
+  "rules": [
+    {
+      "key": "squid:S2077",
+      "name": "Values passed to SQL commands should be sanitized",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security",
+        "sql"
+      ],
+      "tags": [
+        "custom-tag"
+      ]
+    },
+    {
+      "key": "php:S107",
+      "name": "Functions should not have too many parameters",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1192",
+      "name": "String literals should not be duplicated",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1145",
+      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "bug",
+        "cwe",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S108",
+      "name": "Nested blocks of code should not be left empty",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1301",
+      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S103",
+      "name": "Lines should not be too long",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1144",
+      "name": "Unused private method should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S105",
+      "name": "Tabulation characters should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1481",
+      "name": "Unused local variables should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1142",
+      "name": "Functions should not contain too many return statements",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S104",
+      "name": "Files should not have too many lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1605",
+      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1448",
+      "name": "Classes should not have too many methods",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1603",
+      "name": "PHP 4 constructor declarations should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1779",
+      "name": "Only LF character (Unix-like) should be used to end lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1185",
+      "name": "Overriding methods should do more than simply call the same method in the super class",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1600",
+      "name": "Deprecated predefined variables should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1109",
+      "name": "A close curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2001",
+      "name": "Functions deprecated in PHP 5 should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "obsolete"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2002",
+      "name": "Errors should not be silenced",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2000",
+      "name": "Files should not contain characters before \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/search-qprofile2.json b/server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/search-qprofile2.json
new file mode 100644 (file)
index 0000000..63dd5c4
--- /dev/null
@@ -0,0 +1,371 @@
+{
+  "total": 408,
+  "p": 1,
+  "ps": 25,
+  "rules": [
+    {
+      "key": "squid:S2077",
+      "name": "Values passed to SQL commands should be sanitized",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security",
+        "sql"
+      ],
+      "tags": [
+        "custom-tag"
+      ]
+    },
+    {
+      "key": "php:S107",
+      "name": "Functions should not have too many parameters",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1192",
+      "name": "String literals should not be duplicated",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1145",
+      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "bug",
+        "cwe",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S108",
+      "name": "Nested blocks of code should not be left empty",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1301",
+      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S103",
+      "name": "Lines should not be too long",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1144",
+      "name": "Unused private method should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S105",
+      "name": "Tabulation characters should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1481",
+      "name": "Unused local variables should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1142",
+      "name": "Functions should not contain too many return statements",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S104",
+      "name": "Files should not have too many lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1605",
+      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1448",
+      "name": "Classes should not have too many methods",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1603",
+      "name": "PHP 4 constructor declarations should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1779",
+      "name": "Only LF character (Unix-like) should be used to end lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1185",
+      "name": "Overriding methods should do more than simply call the same method in the super class",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1600",
+      "name": "Deprecated predefined variables should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1109",
+      "name": "A close curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2001",
+      "name": "Functions deprecated in PHP 5 should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "obsolete"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2002",
+      "name": "Errors should not be silenced",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2000",
+      "name": "Files should not contain characters before \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/search.json b/server/sonar-web/src/test/json/coding-rules-page-inheritance-facet/search.json
new file mode 100644 (file)
index 0000000..c17c58d
--- /dev/null
@@ -0,0 +1,371 @@
+{
+  "total": 609,
+  "p": 1,
+  "ps": 25,
+  "rules": [
+    {
+      "key": "squid:S2077",
+      "name": "Values passed to SQL commands should be sanitized",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security",
+        "sql"
+      ],
+      "tags": [
+        "custom-tag"
+      ]
+    },
+    {
+      "key": "php:S107",
+      "name": "Functions should not have too many parameters",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1192",
+      "name": "String literals should not be duplicated",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1145",
+      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "bug",
+        "cwe",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S108",
+      "name": "Nested blocks of code should not be left empty",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1301",
+      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S103",
+      "name": "Lines should not be too long",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1144",
+      "name": "Unused private method should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S105",
+      "name": "Tabulation characters should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1481",
+      "name": "Unused local variables should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1142",
+      "name": "Functions should not contain too many return statements",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S104",
+      "name": "Files should not have too many lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1605",
+      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1448",
+      "name": "Classes should not have too many methods",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1603",
+      "name": "PHP 4 constructor declarations should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1779",
+      "name": "Only LF character (Unix-like) should be used to end lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1185",
+      "name": "Overriding methods should do more than simply call the same method in the super class",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1600",
+      "name": "Deprecated predefined variables should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1109",
+      "name": "A close curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2001",
+      "name": "Functions deprecated in PHP 5 should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "obsolete"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2002",
+      "name": "Errors should not be silenced",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2000",
+      "name": "Files should not contain characters before \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-no-available-profiles-for-activation/app.json b/server/sonar-web/src/test/json/coding-rules-page-no-available-profiles-for-activation/app.json
new file mode 100644 (file)
index 0000000..4e69bde
--- /dev/null
@@ -0,0 +1,258 @@
+{
+  "canWrite": true,
+  "qualityprofiles": [
+    {
+      "key": "java-default-with-mojo-conventions-49307",
+      "name": "Default - Maven Conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    }
+  ],
+  "languages": {
+    "py": "Python",
+    "js": "JavaScript",
+    "php": "PHP",
+    "java": "Java"
+  },
+  "repositories": [
+    {
+      "key": "common-java",
+      "name": "Common SonarQube",
+      "language": "java"
+    },
+    {
+      "key": "common-js",
+      "name": "Common SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "common-php",
+      "name": "Common SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "common-py",
+      "name": "Common SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "Pylint",
+      "name": "Pylint",
+      "language": "py"
+    },
+    {
+      "key": "javascript",
+      "name": "SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "php",
+      "name": "SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "python",
+      "name": "SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "squid",
+      "name": "SonarQube",
+      "language": "java"
+    }
+  ],
+  "statuses": {
+    "BETA": "Beta",
+    "DEPRECATED": "Deprecated",
+    "READY": "Ready"
+  },
+  "characteristics": [
+    {
+      "key": "UNDERSTANDABILITY",
+      "name": "Understandability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "MAINTAINABILITY",
+      "name": "Maintainability"
+    },
+    {
+      "key": "TIME_ZONE_RELATED_PORTABILITY",
+      "name": "Time zone related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "READABILITY",
+      "name": "Readability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "SECURITY_FEATURES",
+      "name": "Security features",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_RELIABILITY",
+      "name": "Architecture related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "OS_RELATED_PORTABILITY",
+      "name": "OS related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "EXCEPTION_HANDLING",
+      "name": "Exception handling",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_CHANGEABILITY",
+      "name": "Logic related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "SOFTWARE_RELATED_PORTABILITY",
+      "name": "Software related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
+      "name": "Input validation and representation",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "LANGUAGE_RELATED_PORTABILITY",
+      "name": "Language related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "ERRORS",
+      "name": "Errors",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "SECURITY",
+      "name": "Security"
+    },
+    {
+      "key": "RELIABILITY",
+      "name": "Reliability"
+    },
+    {
+      "key": "PORTABILITY",
+      "name": "Portability"
+    },
+    {
+      "key": "HARDWARE_RELATED_PORTABILITY",
+      "name": "Hardware related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "SYNCHRONIZATION_RELIABILITY",
+      "name": "Synchronization related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "TRANSPORTABILITY",
+      "name": "Transportability",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "COMPILER_RELATED_PORTABILITY",
+      "name": "Compiler related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "RESOURCE_RELIABILITY",
+      "name": "Resource",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "CPU_EFFICIENCY",
+      "name": "Processor use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "EFFICIENCY",
+      "name": "Efficiency"
+    },
+    {
+      "key": "CHANGEABILITY",
+      "name": "Changeability"
+    },
+    {
+      "key": "DATA_CHANGEABILITY",
+      "name": "Data related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "API_ABUSE",
+      "name": "API abuse",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_CHANGEABILITY",
+      "name": "Architecture related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "UNIT_TESTS",
+      "name": "Unit tests",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "INSTRUCTION_RELIABILITY",
+      "name": "Instruction related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "REUSABILITY",
+      "name": "Reusability"
+    },
+    {
+      "key": "MODULARITY",
+      "name": "Modularity",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "UNIT_TESTABILITY",
+      "name": "Unit level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "TESTABILITY",
+      "name": "Testability"
+    },
+    {
+      "key": "INTEGRATION_TESTABILITY",
+      "name": "Integration level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "NETWORK_USE",
+      "name": "Network use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "MEMORY_EFFICIENCY",
+      "name": "Memory use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "DATA_RELIABILITY",
+      "name": "Data related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "FAULT_TOLERANCE",
+      "name": "Fault tolerance",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_RELIABILITY",
+      "name": "Logic related reliability",
+      "parent": "RELIABILITY"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-no-available-profiles-for-activation/search.json b/server/sonar-web/src/test/json/coding-rules-page-no-available-profiles-for-activation/search.json
new file mode 100644 (file)
index 0000000..b5a6bc2
--- /dev/null
@@ -0,0 +1,171 @@
+{
+  "total": 10,
+  "p": 1,
+  "ps": 200,
+  "rules": [
+    {
+      "key": "squid:S1181",
+      "name": "Throwable and Error classes should not be caught",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "error-handling"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1849",
+      "name": "\"Iterator.hasNext()\" should not call \"Iterator.next()\"",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1844",
+      "name": "\"Object.wait(...)\" should never be called on objects that implement \"java.util.concurrent.locks.Condition\"",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug",
+        "pitfall"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S2258",
+      "name": "\"javax.crypto.NullCipher\" should not be used for anything other than testing",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S2251",
+      "name": "A \"for\" loop update clause should move the counter in the right direction",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:ObjectFinalizeOverridenCallsSuperFinalizeCheck",
+      "name": "super.finalize() should be called at the end of Object.finalize() implementations",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1143",
+      "name": "Return statements should not occur in finally blocks",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1206",
+      "name": "\"equals(Object obj)\" and \"hashCode()\" should be overridden in pairs",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1451",
+      "name": "Copyright and license headers should be defined in all source files",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1697",
+      "name": "Short-circuit logic should be used to prevent null pointer dereferences in conditionals",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "bug",
+          "count": 7
+        },
+        {
+          "val": "convention",
+          "count": 1
+        },
+        {
+          "val": "cwe",
+          "count": 1
+        },
+        {
+          "val": "error-handling",
+          "count": 1
+        },
+        {
+          "val": "owasp-top10",
+          "count": 1
+        },
+        {
+          "val": "pitfall",
+          "count": 1
+        },
+        {
+          "val": "security",
+          "count": 1
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 10
+        },
+        {
+          "val": "js",
+          "count": 6
+        },
+        {
+          "val": "php",
+          "count": 2
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 10
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-no-available-profiles-for-activation/show.json b/server/sonar-web/src/test/json/coding-rules-page-no-available-profiles-for-activation/show.json
new file mode 100644 (file)
index 0000000..1fddeb6
--- /dev/null
@@ -0,0 +1,39 @@
+{
+  "rule": {
+    "key": "squid:S1181",
+    "repo": "squid",
+    "name": "Throwable and Error classes should not be caught",
+    "createdAt": "2013-08-09T14:40:54+0200",
+    "severity": "BLOCKER",
+    "status": "READY",
+    "internalKey": "S1181",
+    "isTemplate": false,
+    "tags": [],
+    "sysTags": [
+      "error-handling"
+    ],
+    "lang": "java",
+    "langName": "Java",
+    "htmlDesc": "<p>\n<code>Throwable</code> is the superclass of all errors and exceptions in Java.\n<code>Error</code> is the superclass of all errors which are not meant to be caught by applications.\n</p>\n\n<p>\nCatching either <code>Throwable</code> or <code>Error</code> will also catch <code>OutOfMemoryError</code> or <code>InternalError</code> from which an application should not attempt to recover.\n</p>\n\n<p>Only <code>Exception</code> and its subclasses should be caught.</p>\n\n<h2>Noncompliant Code Example</h2>\n\n<pre>\ntry { /* ... */ } catch (Throwable t) { /* ... */ }\ntry { /* ... */ } catch (Error e) { /* ... */ } \n</pre>\n\n<h2>Compliant Solution</h2>\n\n<pre>\ntry { /* ... */ } catch (Exception e) { /* ... */ }  \ntry { /* ... */ } catch (RuntimeException e) { /* ... */ }  \ntry { /* ... */ } catch (MyException e) { /* ... */ }  \n</pre>",
+    "defaultDebtChar": "RELIABILITY",
+    "defaultDebtSubChar": "EXCEPTION_HANDLING",
+    "debtChar": "RELIABILITY",
+    "debtSubChar": "EXCEPTION_HANDLING",
+    "debtCharName": "Reliability",
+    "debtSubCharName": "Exception handling",
+    "defaultDebtRemFnType": "CONSTANT_ISSUE",
+    "defaultDebtRemFnOffset": "20min",
+    "debtOverloaded": true,
+    "debtRemFnType": "LINEAR",
+    "debtRemFnCoeff": "20min",
+    "params": []
+  },
+  "actives": [
+    {
+      "qProfile": "java-default-with-mojo-conventions-49307",
+      "inherit": "NONE",
+      "severity": "BLOCKER",
+      "params": []
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-quality-profile-facet/app.json b/server/sonar-web/src/test/json/coding-rules-page-quality-profile-facet/app.json
new file mode 100644 (file)
index 0000000..0eb43bc
--- /dev/null
@@ -0,0 +1,316 @@
+{
+  "canWrite": false,
+  "qualityprofiles": [
+    {
+      "key": "java-default-with-mojo-conventions-49307",
+      "name": "Default - Maven Conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-default-with-sonarsource-conventions-27339",
+      "name": "Default - SonarSource conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-top-profile-without-formatting-conventions-50037",
+      "name": "Default - Top",
+      "lang": "java"
+    },
+    {
+      "key": "java-findbugs-14954",
+      "name": "FindBugs",
+      "lang": "java"
+    },
+    {
+      "key": "java-for-sq-java-plugin-only-92289",
+      "name": "For SQ Java Plugin Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "java-for-sq-only-95381",
+      "name": "For SQ Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "php-psr-2-06315",
+      "name": "PSR-2",
+      "lang": "php"
+    },
+    {
+      "key": "java-sonar-way-80423",
+      "name": "Sonar way",
+      "lang": "java"
+    },
+    {
+      "key": "js-sonar-way",
+      "name": "Sonar way",
+      "lang": "js"
+    },
+    {
+      "key": "php-sonar-way-05548",
+      "name": "Sonar way",
+      "lang": "php"
+    },
+    {
+      "key": "py-sonar-way-80265",
+      "name": "Sonar way",
+      "lang": "py"
+    },
+    {
+      "key": "java-without-findbugs",
+      "name": "Without Findbugs",
+      "lang": "java"
+    }
+  ],
+  "languages": {
+    "py": "Python",
+    "js": "JavaScript",
+    "php": "PHP",
+    "java": "Java"
+  },
+  "repositories": [
+    {
+      "key": "common-java",
+      "name": "Common SonarQube",
+      "language": "java"
+    },
+    {
+      "key": "common-js",
+      "name": "Common SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "common-php",
+      "name": "Common SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "common-py",
+      "name": "Common SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "Pylint",
+      "name": "Pylint",
+      "language": "py"
+    },
+    {
+      "key": "javascript",
+      "name": "SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "php",
+      "name": "SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "python",
+      "name": "SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "squid",
+      "name": "SonarQube",
+      "language": "java"
+    }
+  ],
+  "statuses": {
+    "BETA": "Beta",
+    "DEPRECATED": "Deprecated",
+    "READY": "Ready"
+  },
+  "characteristics": [
+    {
+      "key": "UNDERSTANDABILITY",
+      "name": "Understandability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "MAINTAINABILITY",
+      "name": "Maintainability"
+    },
+    {
+      "key": "TIME_ZONE_RELATED_PORTABILITY",
+      "name": "Time zone related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "READABILITY",
+      "name": "Readability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "SECURITY_FEATURES",
+      "name": "Security features",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_RELIABILITY",
+      "name": "Architecture related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "OS_RELATED_PORTABILITY",
+      "name": "OS related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "EXCEPTION_HANDLING",
+      "name": "Exception handling",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_CHANGEABILITY",
+      "name": "Logic related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "SOFTWARE_RELATED_PORTABILITY",
+      "name": "Software related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
+      "name": "Input validation and representation",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "LANGUAGE_RELATED_PORTABILITY",
+      "name": "Language related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "ERRORS",
+      "name": "Errors",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "SECURITY",
+      "name": "Security"
+    },
+    {
+      "key": "RELIABILITY",
+      "name": "Reliability"
+    },
+    {
+      "key": "PORTABILITY",
+      "name": "Portability"
+    },
+    {
+      "key": "HARDWARE_RELATED_PORTABILITY",
+      "name": "Hardware related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "SYNCHRONIZATION_RELIABILITY",
+      "name": "Synchronization related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "TRANSPORTABILITY",
+      "name": "Transportability",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "COMPILER_RELATED_PORTABILITY",
+      "name": "Compiler related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "RESOURCE_RELIABILITY",
+      "name": "Resource",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "CPU_EFFICIENCY",
+      "name": "Processor use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "EFFICIENCY",
+      "name": "Efficiency"
+    },
+    {
+      "key": "CHANGEABILITY",
+      "name": "Changeability"
+    },
+    {
+      "key": "DATA_CHANGEABILITY",
+      "name": "Data related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "API_ABUSE",
+      "name": "API abuse",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_CHANGEABILITY",
+      "name": "Architecture related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "UNIT_TESTS",
+      "name": "Unit tests",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "INSTRUCTION_RELIABILITY",
+      "name": "Instruction related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "REUSABILITY",
+      "name": "Reusability"
+    },
+    {
+      "key": "MODULARITY",
+      "name": "Modularity",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "UNIT_TESTABILITY",
+      "name": "Unit level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "TESTABILITY",
+      "name": "Testability"
+    },
+    {
+      "key": "INTEGRATION_TESTABILITY",
+      "name": "Integration level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "NETWORK_USE",
+      "name": "Network use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "MEMORY_EFFICIENCY",
+      "name": "Memory use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "DATA_RELIABILITY",
+      "name": "Data related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "FAULT_TOLERANCE",
+      "name": "Fault tolerance",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_RELIABILITY",
+      "name": "Logic related reliability",
+      "parent": "RELIABILITY"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-quality-profile-facet/search-qprofile-active.json b/server/sonar-web/src/test/json/coding-rules-page-quality-profile-facet/search-qprofile-active.json
new file mode 100644 (file)
index 0000000..cbbb272
--- /dev/null
@@ -0,0 +1,371 @@
+{
+  "total": 407,
+  "p": 1,
+  "ps": 25,
+  "rules": [
+    {
+      "key": "squid:S2077",
+      "name": "Values passed to SQL commands should be sanitized",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security",
+        "sql"
+      ],
+      "tags": [
+        "custom-tag"
+      ]
+    },
+    {
+      "key": "php:S107",
+      "name": "Functions should not have too many parameters",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1192",
+      "name": "String literals should not be duplicated",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1145",
+      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "bug",
+        "cwe",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S108",
+      "name": "Nested blocks of code should not be left empty",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1301",
+      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S103",
+      "name": "Lines should not be too long",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1144",
+      "name": "Unused private method should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S105",
+      "name": "Tabulation characters should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1481",
+      "name": "Unused local variables should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1142",
+      "name": "Functions should not contain too many return statements",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S104",
+      "name": "Files should not have too many lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1605",
+      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1448",
+      "name": "Classes should not have too many methods",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1603",
+      "name": "PHP 4 constructor declarations should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1779",
+      "name": "Only LF character (Unix-like) should be used to end lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1185",
+      "name": "Overriding methods should do more than simply call the same method in the super class",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1600",
+      "name": "Deprecated predefined variables should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1109",
+      "name": "A close curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2001",
+      "name": "Functions deprecated in PHP 5 should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "obsolete"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2002",
+      "name": "Errors should not be silenced",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2000",
+      "name": "Files should not contain characters before \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-quality-profile-facet/search-qprofile-inactive.json b/server/sonar-web/src/test/json/coding-rules-page-quality-profile-facet/search-qprofile-inactive.json
new file mode 100644 (file)
index 0000000..63dd5c4
--- /dev/null
@@ -0,0 +1,371 @@
+{
+  "total": 408,
+  "p": 1,
+  "ps": 25,
+  "rules": [
+    {
+      "key": "squid:S2077",
+      "name": "Values passed to SQL commands should be sanitized",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security",
+        "sql"
+      ],
+      "tags": [
+        "custom-tag"
+      ]
+    },
+    {
+      "key": "php:S107",
+      "name": "Functions should not have too many parameters",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1192",
+      "name": "String literals should not be duplicated",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1145",
+      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "bug",
+        "cwe",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S108",
+      "name": "Nested blocks of code should not be left empty",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1301",
+      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S103",
+      "name": "Lines should not be too long",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1144",
+      "name": "Unused private method should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S105",
+      "name": "Tabulation characters should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1481",
+      "name": "Unused local variables should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1142",
+      "name": "Functions should not contain too many return statements",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S104",
+      "name": "Files should not have too many lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1605",
+      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1448",
+      "name": "Classes should not have too many methods",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1603",
+      "name": "PHP 4 constructor declarations should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1779",
+      "name": "Only LF character (Unix-like) should be used to end lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1185",
+      "name": "Overriding methods should do more than simply call the same method in the super class",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1600",
+      "name": "Deprecated predefined variables should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1109",
+      "name": "A close curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2001",
+      "name": "Functions deprecated in PHP 5 should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "obsolete"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2002",
+      "name": "Errors should not be silenced",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2000",
+      "name": "Files should not contain characters before \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-quality-profile-facet/search.json b/server/sonar-web/src/test/json/coding-rules-page-quality-profile-facet/search.json
new file mode 100644 (file)
index 0000000..c17c58d
--- /dev/null
@@ -0,0 +1,371 @@
+{
+  "total": 609,
+  "p": 1,
+  "ps": 25,
+  "rules": [
+    {
+      "key": "squid:S2077",
+      "name": "Values passed to SQL commands should be sanitized",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security",
+        "sql"
+      ],
+      "tags": [
+        "custom-tag"
+      ]
+    },
+    {
+      "key": "php:S107",
+      "name": "Functions should not have too many parameters",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1192",
+      "name": "String literals should not be duplicated",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1145",
+      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "bug",
+        "cwe",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S108",
+      "name": "Nested blocks of code should not be left empty",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1301",
+      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S103",
+      "name": "Lines should not be too long",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1144",
+      "name": "Unused private method should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S105",
+      "name": "Tabulation characters should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1481",
+      "name": "Unused local variables should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1142",
+      "name": "Functions should not contain too many return statements",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S104",
+      "name": "Files should not have too many lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1605",
+      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1448",
+      "name": "Classes should not have too many methods",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1603",
+      "name": "PHP 4 constructor declarations should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1779",
+      "name": "Only LF character (Unix-like) should be used to end lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1185",
+      "name": "Overriding methods should do more than simply call the same method in the super class",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1600",
+      "name": "Deprecated predefined variables should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1109",
+      "name": "A close curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2001",
+      "name": "Functions deprecated in PHP 5 should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "obsolete"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2002",
+      "name": "Errors should not be silenced",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2000",
+      "name": "Files should not contain characters before \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-query-facet/app.json b/server/sonar-web/src/test/json/coding-rules-page-query-facet/app.json
new file mode 100644 (file)
index 0000000..0eb43bc
--- /dev/null
@@ -0,0 +1,316 @@
+{
+  "canWrite": false,
+  "qualityprofiles": [
+    {
+      "key": "java-default-with-mojo-conventions-49307",
+      "name": "Default - Maven Conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-default-with-sonarsource-conventions-27339",
+      "name": "Default - SonarSource conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-top-profile-without-formatting-conventions-50037",
+      "name": "Default - Top",
+      "lang": "java"
+    },
+    {
+      "key": "java-findbugs-14954",
+      "name": "FindBugs",
+      "lang": "java"
+    },
+    {
+      "key": "java-for-sq-java-plugin-only-92289",
+      "name": "For SQ Java Plugin Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "java-for-sq-only-95381",
+      "name": "For SQ Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "php-psr-2-06315",
+      "name": "PSR-2",
+      "lang": "php"
+    },
+    {
+      "key": "java-sonar-way-80423",
+      "name": "Sonar way",
+      "lang": "java"
+    },
+    {
+      "key": "js-sonar-way",
+      "name": "Sonar way",
+      "lang": "js"
+    },
+    {
+      "key": "php-sonar-way-05548",
+      "name": "Sonar way",
+      "lang": "php"
+    },
+    {
+      "key": "py-sonar-way-80265",
+      "name": "Sonar way",
+      "lang": "py"
+    },
+    {
+      "key": "java-without-findbugs",
+      "name": "Without Findbugs",
+      "lang": "java"
+    }
+  ],
+  "languages": {
+    "py": "Python",
+    "js": "JavaScript",
+    "php": "PHP",
+    "java": "Java"
+  },
+  "repositories": [
+    {
+      "key": "common-java",
+      "name": "Common SonarQube",
+      "language": "java"
+    },
+    {
+      "key": "common-js",
+      "name": "Common SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "common-php",
+      "name": "Common SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "common-py",
+      "name": "Common SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "Pylint",
+      "name": "Pylint",
+      "language": "py"
+    },
+    {
+      "key": "javascript",
+      "name": "SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "php",
+      "name": "SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "python",
+      "name": "SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "squid",
+      "name": "SonarQube",
+      "language": "java"
+    }
+  ],
+  "statuses": {
+    "BETA": "Beta",
+    "DEPRECATED": "Deprecated",
+    "READY": "Ready"
+  },
+  "characteristics": [
+    {
+      "key": "UNDERSTANDABILITY",
+      "name": "Understandability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "MAINTAINABILITY",
+      "name": "Maintainability"
+    },
+    {
+      "key": "TIME_ZONE_RELATED_PORTABILITY",
+      "name": "Time zone related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "READABILITY",
+      "name": "Readability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "SECURITY_FEATURES",
+      "name": "Security features",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_RELIABILITY",
+      "name": "Architecture related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "OS_RELATED_PORTABILITY",
+      "name": "OS related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "EXCEPTION_HANDLING",
+      "name": "Exception handling",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_CHANGEABILITY",
+      "name": "Logic related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "SOFTWARE_RELATED_PORTABILITY",
+      "name": "Software related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
+      "name": "Input validation and representation",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "LANGUAGE_RELATED_PORTABILITY",
+      "name": "Language related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "ERRORS",
+      "name": "Errors",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "SECURITY",
+      "name": "Security"
+    },
+    {
+      "key": "RELIABILITY",
+      "name": "Reliability"
+    },
+    {
+      "key": "PORTABILITY",
+      "name": "Portability"
+    },
+    {
+      "key": "HARDWARE_RELATED_PORTABILITY",
+      "name": "Hardware related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "SYNCHRONIZATION_RELIABILITY",
+      "name": "Synchronization related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "TRANSPORTABILITY",
+      "name": "Transportability",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "COMPILER_RELATED_PORTABILITY",
+      "name": "Compiler related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "RESOURCE_RELIABILITY",
+      "name": "Resource",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "CPU_EFFICIENCY",
+      "name": "Processor use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "EFFICIENCY",
+      "name": "Efficiency"
+    },
+    {
+      "key": "CHANGEABILITY",
+      "name": "Changeability"
+    },
+    {
+      "key": "DATA_CHANGEABILITY",
+      "name": "Data related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "API_ABUSE",
+      "name": "API abuse",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_CHANGEABILITY",
+      "name": "Architecture related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "UNIT_TESTS",
+      "name": "Unit tests",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "INSTRUCTION_RELIABILITY",
+      "name": "Instruction related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "REUSABILITY",
+      "name": "Reusability"
+    },
+    {
+      "key": "MODULARITY",
+      "name": "Modularity",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "UNIT_TESTABILITY",
+      "name": "Unit level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "TESTABILITY",
+      "name": "Testability"
+    },
+    {
+      "key": "INTEGRATION_TESTABILITY",
+      "name": "Integration level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "NETWORK_USE",
+      "name": "Network use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "MEMORY_EFFICIENCY",
+      "name": "Memory use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "DATA_RELIABILITY",
+      "name": "Data related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "FAULT_TOLERANCE",
+      "name": "Fault tolerance",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_RELIABILITY",
+      "name": "Logic related reliability",
+      "parent": "RELIABILITY"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-query-facet/search-query.json b/server/sonar-web/src/test/json/coding-rules-page-query-facet/search-query.json
new file mode 100644 (file)
index 0000000..3dc49f0
--- /dev/null
@@ -0,0 +1,371 @@
+{
+  "total": 4,
+  "p": 1,
+  "ps": 25,
+  "rules": [
+    {
+      "key": "squid:S2077",
+      "name": "Values passed to SQL commands should be sanitized",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security",
+        "sql"
+      ],
+      "tags": [
+        "custom-tag"
+      ]
+    },
+    {
+      "key": "php:S107",
+      "name": "Functions should not have too many parameters",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1192",
+      "name": "String literals should not be duplicated",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1145",
+      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "bug",
+        "cwe",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S108",
+      "name": "Nested blocks of code should not be left empty",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1301",
+      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S103",
+      "name": "Lines should not be too long",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1144",
+      "name": "Unused private method should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S105",
+      "name": "Tabulation characters should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1481",
+      "name": "Unused local variables should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1142",
+      "name": "Functions should not contain too many return statements",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S104",
+      "name": "Files should not have too many lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1605",
+      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1448",
+      "name": "Classes should not have too many methods",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1603",
+      "name": "PHP 4 constructor declarations should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1779",
+      "name": "Only LF character (Unix-like) should be used to end lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1185",
+      "name": "Overriding methods should do more than simply call the same method in the super class",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1600",
+      "name": "Deprecated predefined variables should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1109",
+      "name": "A close curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2001",
+      "name": "Functions deprecated in PHP 5 should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "obsolete"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2002",
+      "name": "Errors should not be silenced",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2000",
+      "name": "Files should not contain characters before \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-query-facet/search.json b/server/sonar-web/src/test/json/coding-rules-page-query-facet/search.json
new file mode 100644 (file)
index 0000000..c17c58d
--- /dev/null
@@ -0,0 +1,371 @@
+{
+  "total": 609,
+  "p": 1,
+  "ps": 25,
+  "rules": [
+    {
+      "key": "squid:S2077",
+      "name": "Values passed to SQL commands should be sanitized",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security",
+        "sql"
+      ],
+      "tags": [
+        "custom-tag"
+      ]
+    },
+    {
+      "key": "php:S107",
+      "name": "Functions should not have too many parameters",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1192",
+      "name": "String literals should not be duplicated",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1145",
+      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "bug",
+        "cwe",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S108",
+      "name": "Nested blocks of code should not be left empty",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1301",
+      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S103",
+      "name": "Lines should not be too long",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1144",
+      "name": "Unused private method should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S105",
+      "name": "Tabulation characters should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1481",
+      "name": "Unused local variables should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1142",
+      "name": "Functions should not contain too many return statements",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S104",
+      "name": "Files should not have too many lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1605",
+      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1448",
+      "name": "Classes should not have too many methods",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1603",
+      "name": "PHP 4 constructor declarations should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1779",
+      "name": "Only LF character (Unix-like) should be used to end lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1185",
+      "name": "Overriding methods should do more than simply call the same method in the super class",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1600",
+      "name": "Deprecated predefined variables should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1109",
+      "name": "A close curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2001",
+      "name": "Functions deprecated in PHP 5 should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "obsolete"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2002",
+      "name": "Errors should not be silenced",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2000",
+      "name": "Files should not contain characters before \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-rule-permalink/app.json b/server/sonar-web/src/test/json/coding-rules-page-rule-permalink/app.json
new file mode 100644 (file)
index 0000000..0eb43bc
--- /dev/null
@@ -0,0 +1,316 @@
+{
+  "canWrite": false,
+  "qualityprofiles": [
+    {
+      "key": "java-default-with-mojo-conventions-49307",
+      "name": "Default - Maven Conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-default-with-sonarsource-conventions-27339",
+      "name": "Default - SonarSource conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-top-profile-without-formatting-conventions-50037",
+      "name": "Default - Top",
+      "lang": "java"
+    },
+    {
+      "key": "java-findbugs-14954",
+      "name": "FindBugs",
+      "lang": "java"
+    },
+    {
+      "key": "java-for-sq-java-plugin-only-92289",
+      "name": "For SQ Java Plugin Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "java-for-sq-only-95381",
+      "name": "For SQ Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "php-psr-2-06315",
+      "name": "PSR-2",
+      "lang": "php"
+    },
+    {
+      "key": "java-sonar-way-80423",
+      "name": "Sonar way",
+      "lang": "java"
+    },
+    {
+      "key": "js-sonar-way",
+      "name": "Sonar way",
+      "lang": "js"
+    },
+    {
+      "key": "php-sonar-way-05548",
+      "name": "Sonar way",
+      "lang": "php"
+    },
+    {
+      "key": "py-sonar-way-80265",
+      "name": "Sonar way",
+      "lang": "py"
+    },
+    {
+      "key": "java-without-findbugs",
+      "name": "Without Findbugs",
+      "lang": "java"
+    }
+  ],
+  "languages": {
+    "py": "Python",
+    "js": "JavaScript",
+    "php": "PHP",
+    "java": "Java"
+  },
+  "repositories": [
+    {
+      "key": "common-java",
+      "name": "Common SonarQube",
+      "language": "java"
+    },
+    {
+      "key": "common-js",
+      "name": "Common SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "common-php",
+      "name": "Common SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "common-py",
+      "name": "Common SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "Pylint",
+      "name": "Pylint",
+      "language": "py"
+    },
+    {
+      "key": "javascript",
+      "name": "SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "php",
+      "name": "SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "python",
+      "name": "SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "squid",
+      "name": "SonarQube",
+      "language": "java"
+    }
+  ],
+  "statuses": {
+    "BETA": "Beta",
+    "DEPRECATED": "Deprecated",
+    "READY": "Ready"
+  },
+  "characteristics": [
+    {
+      "key": "UNDERSTANDABILITY",
+      "name": "Understandability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "MAINTAINABILITY",
+      "name": "Maintainability"
+    },
+    {
+      "key": "TIME_ZONE_RELATED_PORTABILITY",
+      "name": "Time zone related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "READABILITY",
+      "name": "Readability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "SECURITY_FEATURES",
+      "name": "Security features",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_RELIABILITY",
+      "name": "Architecture related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "OS_RELATED_PORTABILITY",
+      "name": "OS related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "EXCEPTION_HANDLING",
+      "name": "Exception handling",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_CHANGEABILITY",
+      "name": "Logic related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "SOFTWARE_RELATED_PORTABILITY",
+      "name": "Software related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
+      "name": "Input validation and representation",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "LANGUAGE_RELATED_PORTABILITY",
+      "name": "Language related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "ERRORS",
+      "name": "Errors",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "SECURITY",
+      "name": "Security"
+    },
+    {
+      "key": "RELIABILITY",
+      "name": "Reliability"
+    },
+    {
+      "key": "PORTABILITY",
+      "name": "Portability"
+    },
+    {
+      "key": "HARDWARE_RELATED_PORTABILITY",
+      "name": "Hardware related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "SYNCHRONIZATION_RELIABILITY",
+      "name": "Synchronization related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "TRANSPORTABILITY",
+      "name": "Transportability",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "COMPILER_RELATED_PORTABILITY",
+      "name": "Compiler related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "RESOURCE_RELIABILITY",
+      "name": "Resource",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "CPU_EFFICIENCY",
+      "name": "Processor use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "EFFICIENCY",
+      "name": "Efficiency"
+    },
+    {
+      "key": "CHANGEABILITY",
+      "name": "Changeability"
+    },
+    {
+      "key": "DATA_CHANGEABILITY",
+      "name": "Data related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "API_ABUSE",
+      "name": "API abuse",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_CHANGEABILITY",
+      "name": "Architecture related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "UNIT_TESTS",
+      "name": "Unit tests",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "INSTRUCTION_RELIABILITY",
+      "name": "Instruction related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "REUSABILITY",
+      "name": "Reusability"
+    },
+    {
+      "key": "MODULARITY",
+      "name": "Modularity",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "UNIT_TESTABILITY",
+      "name": "Unit level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "TESTABILITY",
+      "name": "Testability"
+    },
+    {
+      "key": "INTEGRATION_TESTABILITY",
+      "name": "Integration level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "NETWORK_USE",
+      "name": "Network use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "MEMORY_EFFICIENCY",
+      "name": "Memory use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "DATA_RELIABILITY",
+      "name": "Data related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "FAULT_TOLERANCE",
+      "name": "Fault tolerance",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_RELIABILITY",
+      "name": "Logic related reliability",
+      "parent": "RELIABILITY"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-rule-permalink/search.json b/server/sonar-web/src/test/json/coding-rules-page-rule-permalink/search.json
new file mode 100644 (file)
index 0000000..b5a6bc2
--- /dev/null
@@ -0,0 +1,171 @@
+{
+  "total": 10,
+  "p": 1,
+  "ps": 200,
+  "rules": [
+    {
+      "key": "squid:S1181",
+      "name": "Throwable and Error classes should not be caught",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "error-handling"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1849",
+      "name": "\"Iterator.hasNext()\" should not call \"Iterator.next()\"",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1844",
+      "name": "\"Object.wait(...)\" should never be called on objects that implement \"java.util.concurrent.locks.Condition\"",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug",
+        "pitfall"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S2258",
+      "name": "\"javax.crypto.NullCipher\" should not be used for anything other than testing",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S2251",
+      "name": "A \"for\" loop update clause should move the counter in the right direction",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:ObjectFinalizeOverridenCallsSuperFinalizeCheck",
+      "name": "super.finalize() should be called at the end of Object.finalize() implementations",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1143",
+      "name": "Return statements should not occur in finally blocks",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1206",
+      "name": "\"equals(Object obj)\" and \"hashCode()\" should be overridden in pairs",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1451",
+      "name": "Copyright and license headers should be defined in all source files",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1697",
+      "name": "Short-circuit logic should be used to prevent null pointer dereferences in conditionals",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "bug",
+          "count": 7
+        },
+        {
+          "val": "convention",
+          "count": 1
+        },
+        {
+          "val": "cwe",
+          "count": 1
+        },
+        {
+          "val": "error-handling",
+          "count": 1
+        },
+        {
+          "val": "owasp-top10",
+          "count": 1
+        },
+        {
+          "val": "pitfall",
+          "count": 1
+        },
+        {
+          "val": "security",
+          "count": 1
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 10
+        },
+        {
+          "val": "js",
+          "count": 6
+        },
+        {
+          "val": "php",
+          "count": 2
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 10
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-rule-permalink/show.json b/server/sonar-web/src/test/json/coding-rules-page-rule-permalink/show.json
new file mode 100644 (file)
index 0000000..274b587
--- /dev/null
@@ -0,0 +1,76 @@
+{
+  "rule": {
+    "key": "squid:S1181",
+    "repo": "squid",
+    "name": "Throwable and Error classes should not be caught",
+    "createdAt": "2013-08-09T14:40:54+0200",
+    "severity": "BLOCKER",
+    "status": "READY",
+    "internalKey": "S1181",
+    "isTemplate": false,
+    "tags": [],
+    "sysTags": [
+      "error-handling"
+    ],
+    "lang": "java",
+    "langName": "Java",
+    "htmlDesc": "<p>\n<code>Throwable</code> is the superclass of all errors and exceptions in Java.\n<code>Error</code> is the superclass of all errors which are not meant to be caught by applications.\n</p>\n\n<p>\nCatching either <code>Throwable</code> or <code>Error</code> will also catch <code>OutOfMemoryError</code> or <code>InternalError</code> from which an application should not attempt to recover.\n</p>\n\n<p>Only <code>Exception</code> and its subclasses should be caught.</p>\n\n<h2>Noncompliant Code Example</h2>\n\n<pre>\ntry { /* ... */ } catch (Throwable t) { /* ... */ }\ntry { /* ... */ } catch (Error e) { /* ... */ } \n</pre>\n\n<h2>Compliant Solution</h2>\n\n<pre>\ntry { /* ... */ } catch (Exception e) { /* ... */ }  \ntry { /* ... */ } catch (RuntimeException e) { /* ... */ }  \ntry { /* ... */ } catch (MyException e) { /* ... */ }  \n</pre>",
+    "defaultDebtChar": "RELIABILITY",
+    "defaultDebtSubChar": "EXCEPTION_HANDLING",
+    "debtChar": "RELIABILITY",
+    "debtSubChar": "EXCEPTION_HANDLING",
+    "debtCharName": "Reliability",
+    "debtSubCharName": "Exception handling",
+    "defaultDebtRemFnType": "CONSTANT_ISSUE",
+    "defaultDebtRemFnOffset": "20min",
+    "debtOverloaded": true,
+    "debtRemFnType": "LINEAR",
+    "debtRemFnCoeff": "20min",
+    "params": [
+      {
+        "key": "max",
+        "htmlDesc": "Maximum authorized number of parameters",
+        "type": "INTEGER",
+        "defaultValue": "7"
+      }
+    ]
+  },
+  "actives": [
+    {
+      "qProfile": "java-top-profile-without-formatting-conventions-50037",
+      "inherit": "NONE",
+      "severity": "BLOCKER",
+      "params": []
+    },
+    {
+      "qProfile": "java-default-with-sonarsource-conventions-27339",
+      "inherit": "INHERITED",
+      "severity": "BLOCKER",
+      "params": []
+    },
+    {
+      "qProfile": "java-for-sq-java-plugin-only-92289",
+      "inherit": "INHERITED",
+      "severity": "BLOCKER",
+      "params": []
+    },
+    {
+      "qProfile": "java-for-sq-only-95381",
+      "inherit": "INHERITED",
+      "severity": "BLOCKER",
+      "params": []
+    },
+    {
+      "qProfile": "java-default-with-mojo-conventions-49307",
+      "inherit": "INHERITED",
+      "severity": "BLOCKER",
+      "params": []
+    },
+    {
+      "qProfile": "java-sonar-way-80423",
+      "inherit": "NONE",
+      "severity": "BLOCKER",
+      "params": []
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-activate-profile/app.json b/server/sonar-web/src/test/json/coding-rules-page-should-activate-profile/app.json
new file mode 100644 (file)
index 0000000..50148bb
--- /dev/null
@@ -0,0 +1,316 @@
+{
+  "canWrite": true,
+  "qualityprofiles": [
+    {
+      "key": "java-default-with-mojo-conventions-49307",
+      "name": "Default - Maven Conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-default-with-sonarsource-conventions-27339",
+      "name": "Default - SonarSource conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-top-profile-without-formatting-conventions-50037",
+      "name": "Default - Top",
+      "lang": "java"
+    },
+    {
+      "key": "java-findbugs-14954",
+      "name": "FindBugs",
+      "lang": "java"
+    },
+    {
+      "key": "java-for-sq-java-plugin-only-92289",
+      "name": "For SQ Java Plugin Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "java-for-sq-only-95381",
+      "name": "For SQ Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "php-psr-2-06315",
+      "name": "PSR-2",
+      "lang": "php"
+    },
+    {
+      "key": "java-sonar-way-80423",
+      "name": "Sonar way",
+      "lang": "java"
+    },
+    {
+      "key": "js-sonar-way",
+      "name": "Sonar way",
+      "lang": "js"
+    },
+    {
+      "key": "php-sonar-way-05548",
+      "name": "Sonar way",
+      "lang": "php"
+    },
+    {
+      "key": "py-sonar-way-80265",
+      "name": "Sonar way",
+      "lang": "py"
+    },
+    {
+      "key": "java-without-findbugs",
+      "name": "Without Findbugs",
+      "lang": "java"
+    }
+  ],
+  "languages": {
+    "py": "Python",
+    "js": "JavaScript",
+    "php": "PHP",
+    "java": "Java"
+  },
+  "repositories": [
+    {
+      "key": "common-java",
+      "name": "Common SonarQube",
+      "language": "java"
+    },
+    {
+      "key": "common-js",
+      "name": "Common SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "common-php",
+      "name": "Common SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "common-py",
+      "name": "Common SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "Pylint",
+      "name": "Pylint",
+      "language": "py"
+    },
+    {
+      "key": "javascript",
+      "name": "SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "php",
+      "name": "SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "python",
+      "name": "SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "squid",
+      "name": "SonarQube",
+      "language": "java"
+    }
+  ],
+  "statuses": {
+    "BETA": "Beta",
+    "DEPRECATED": "Deprecated",
+    "READY": "Ready"
+  },
+  "characteristics": [
+    {
+      "key": "UNDERSTANDABILITY",
+      "name": "Understandability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "MAINTAINABILITY",
+      "name": "Maintainability"
+    },
+    {
+      "key": "TIME_ZONE_RELATED_PORTABILITY",
+      "name": "Time zone related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "READABILITY",
+      "name": "Readability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "SECURITY_FEATURES",
+      "name": "Security features",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_RELIABILITY",
+      "name": "Architecture related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "OS_RELATED_PORTABILITY",
+      "name": "OS related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "EXCEPTION_HANDLING",
+      "name": "Exception handling",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_CHANGEABILITY",
+      "name": "Logic related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "SOFTWARE_RELATED_PORTABILITY",
+      "name": "Software related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
+      "name": "Input validation and representation",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "LANGUAGE_RELATED_PORTABILITY",
+      "name": "Language related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "ERRORS",
+      "name": "Errors",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "SECURITY",
+      "name": "Security"
+    },
+    {
+      "key": "RELIABILITY",
+      "name": "Reliability"
+    },
+    {
+      "key": "PORTABILITY",
+      "name": "Portability"
+    },
+    {
+      "key": "HARDWARE_RELATED_PORTABILITY",
+      "name": "Hardware related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "SYNCHRONIZATION_RELIABILITY",
+      "name": "Synchronization related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "TRANSPORTABILITY",
+      "name": "Transportability",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "COMPILER_RELATED_PORTABILITY",
+      "name": "Compiler related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "RESOURCE_RELIABILITY",
+      "name": "Resource",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "CPU_EFFICIENCY",
+      "name": "Processor use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "EFFICIENCY",
+      "name": "Efficiency"
+    },
+    {
+      "key": "CHANGEABILITY",
+      "name": "Changeability"
+    },
+    {
+      "key": "DATA_CHANGEABILITY",
+      "name": "Data related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "API_ABUSE",
+      "name": "API abuse",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_CHANGEABILITY",
+      "name": "Architecture related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "UNIT_TESTS",
+      "name": "Unit tests",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "INSTRUCTION_RELIABILITY",
+      "name": "Instruction related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "REUSABILITY",
+      "name": "Reusability"
+    },
+    {
+      "key": "MODULARITY",
+      "name": "Modularity",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "UNIT_TESTABILITY",
+      "name": "Unit level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "TESTABILITY",
+      "name": "Testability"
+    },
+    {
+      "key": "INTEGRATION_TESTABILITY",
+      "name": "Integration level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "NETWORK_USE",
+      "name": "Network use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "MEMORY_EFFICIENCY",
+      "name": "Memory use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "DATA_RELIABILITY",
+      "name": "Data related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "FAULT_TOLERANCE",
+      "name": "Fault tolerance",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_RELIABILITY",
+      "name": "Logic related reliability",
+      "parent": "RELIABILITY"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-activate-profile/search.json b/server/sonar-web/src/test/json/coding-rules-page-should-activate-profile/search.json
new file mode 100644 (file)
index 0000000..b5a6bc2
--- /dev/null
@@ -0,0 +1,171 @@
+{
+  "total": 10,
+  "p": 1,
+  "ps": 200,
+  "rules": [
+    {
+      "key": "squid:S1181",
+      "name": "Throwable and Error classes should not be caught",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "error-handling"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1849",
+      "name": "\"Iterator.hasNext()\" should not call \"Iterator.next()\"",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1844",
+      "name": "\"Object.wait(...)\" should never be called on objects that implement \"java.util.concurrent.locks.Condition\"",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug",
+        "pitfall"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S2258",
+      "name": "\"javax.crypto.NullCipher\" should not be used for anything other than testing",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S2251",
+      "name": "A \"for\" loop update clause should move the counter in the right direction",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:ObjectFinalizeOverridenCallsSuperFinalizeCheck",
+      "name": "super.finalize() should be called at the end of Object.finalize() implementations",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1143",
+      "name": "Return statements should not occur in finally blocks",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1206",
+      "name": "\"equals(Object obj)\" and \"hashCode()\" should be overridden in pairs",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1451",
+      "name": "Copyright and license headers should be defined in all source files",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1697",
+      "name": "Short-circuit logic should be used to prevent null pointer dereferences in conditionals",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "bug",
+          "count": 7
+        },
+        {
+          "val": "convention",
+          "count": 1
+        },
+        {
+          "val": "cwe",
+          "count": 1
+        },
+        {
+          "val": "error-handling",
+          "count": 1
+        },
+        {
+          "val": "owasp-top10",
+          "count": 1
+        },
+        {
+          "val": "pitfall",
+          "count": 1
+        },
+        {
+          "val": "security",
+          "count": 1
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 10
+        },
+        {
+          "val": "js",
+          "count": 6
+        },
+        {
+          "val": "php",
+          "count": 2
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 10
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-activate-profile/show-with-profile.json b/server/sonar-web/src/test/json/coding-rules-page-should-activate-profile/show-with-profile.json
new file mode 100644 (file)
index 0000000..1fddeb6
--- /dev/null
@@ -0,0 +1,39 @@
+{
+  "rule": {
+    "key": "squid:S1181",
+    "repo": "squid",
+    "name": "Throwable and Error classes should not be caught",
+    "createdAt": "2013-08-09T14:40:54+0200",
+    "severity": "BLOCKER",
+    "status": "READY",
+    "internalKey": "S1181",
+    "isTemplate": false,
+    "tags": [],
+    "sysTags": [
+      "error-handling"
+    ],
+    "lang": "java",
+    "langName": "Java",
+    "htmlDesc": "<p>\n<code>Throwable</code> is the superclass of all errors and exceptions in Java.\n<code>Error</code> is the superclass of all errors which are not meant to be caught by applications.\n</p>\n\n<p>\nCatching either <code>Throwable</code> or <code>Error</code> will also catch <code>OutOfMemoryError</code> or <code>InternalError</code> from which an application should not attempt to recover.\n</p>\n\n<p>Only <code>Exception</code> and its subclasses should be caught.</p>\n\n<h2>Noncompliant Code Example</h2>\n\n<pre>\ntry { /* ... */ } catch (Throwable t) { /* ... */ }\ntry { /* ... */ } catch (Error e) { /* ... */ } \n</pre>\n\n<h2>Compliant Solution</h2>\n\n<pre>\ntry { /* ... */ } catch (Exception e) { /* ... */ }  \ntry { /* ... */ } catch (RuntimeException e) { /* ... */ }  \ntry { /* ... */ } catch (MyException e) { /* ... */ }  \n</pre>",
+    "defaultDebtChar": "RELIABILITY",
+    "defaultDebtSubChar": "EXCEPTION_HANDLING",
+    "debtChar": "RELIABILITY",
+    "debtSubChar": "EXCEPTION_HANDLING",
+    "debtCharName": "Reliability",
+    "debtSubCharName": "Exception handling",
+    "defaultDebtRemFnType": "CONSTANT_ISSUE",
+    "defaultDebtRemFnOffset": "20min",
+    "debtOverloaded": true,
+    "debtRemFnType": "LINEAR",
+    "debtRemFnCoeff": "20min",
+    "params": []
+  },
+  "actives": [
+    {
+      "qProfile": "java-default-with-mojo-conventions-49307",
+      "inherit": "NONE",
+      "severity": "BLOCKER",
+      "params": []
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-activate-profile/show.json b/server/sonar-web/src/test/json/coding-rules-page-should-activate-profile/show.json
new file mode 100644 (file)
index 0000000..cf4b206
--- /dev/null
@@ -0,0 +1,32 @@
+{
+  "rule": {
+    "key": "squid:S1181",
+    "repo": "squid",
+    "name": "Throwable and Error classes should not be caught",
+    "createdAt": "2013-08-09T14:40:54+0200",
+    "severity": "BLOCKER",
+    "status": "READY",
+    "internalKey": "S1181",
+    "isTemplate": false,
+    "tags": [],
+    "sysTags": [
+      "error-handling"
+    ],
+    "lang": "java",
+    "langName": "Java",
+    "htmlDesc": "<p>\n<code>Throwable</code> is the superclass of all errors and exceptions in Java.\n<code>Error</code> is the superclass of all errors which are not meant to be caught by applications.\n</p>\n\n<p>\nCatching either <code>Throwable</code> or <code>Error</code> will also catch <code>OutOfMemoryError</code> or <code>InternalError</code> from which an application should not attempt to recover.\n</p>\n\n<p>Only <code>Exception</code> and its subclasses should be caught.</p>\n\n<h2>Noncompliant Code Example</h2>\n\n<pre>\ntry { /* ... */ } catch (Throwable t) { /* ... */ }\ntry { /* ... */ } catch (Error e) { /* ... */ } \n</pre>\n\n<h2>Compliant Solution</h2>\n\n<pre>\ntry { /* ... */ } catch (Exception e) { /* ... */ }  \ntry { /* ... */ } catch (RuntimeException e) { /* ... */ }  \ntry { /* ... */ } catch (MyException e) { /* ... */ }  \n</pre>",
+    "defaultDebtChar": "RELIABILITY",
+    "defaultDebtSubChar": "EXCEPTION_HANDLING",
+    "debtChar": "RELIABILITY",
+    "debtSubChar": "EXCEPTION_HANDLING",
+    "debtCharName": "Reliability",
+    "debtSubCharName": "Exception handling",
+    "defaultDebtRemFnType": "CONSTANT_ISSUE",
+    "defaultDebtRemFnOffset": "20min",
+    "debtOverloaded": true,
+    "debtRemFnType": "LINEAR",
+    "debtRemFnCoeff": "20min",
+    "params": []
+  },
+  "actives": []
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-create-custom-rules/app.json b/server/sonar-web/src/test/json/coding-rules-page-should-create-custom-rules/app.json
new file mode 100644 (file)
index 0000000..50148bb
--- /dev/null
@@ -0,0 +1,316 @@
+{
+  "canWrite": true,
+  "qualityprofiles": [
+    {
+      "key": "java-default-with-mojo-conventions-49307",
+      "name": "Default - Maven Conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-default-with-sonarsource-conventions-27339",
+      "name": "Default - SonarSource conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-top-profile-without-formatting-conventions-50037",
+      "name": "Default - Top",
+      "lang": "java"
+    },
+    {
+      "key": "java-findbugs-14954",
+      "name": "FindBugs",
+      "lang": "java"
+    },
+    {
+      "key": "java-for-sq-java-plugin-only-92289",
+      "name": "For SQ Java Plugin Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "java-for-sq-only-95381",
+      "name": "For SQ Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "php-psr-2-06315",
+      "name": "PSR-2",
+      "lang": "php"
+    },
+    {
+      "key": "java-sonar-way-80423",
+      "name": "Sonar way",
+      "lang": "java"
+    },
+    {
+      "key": "js-sonar-way",
+      "name": "Sonar way",
+      "lang": "js"
+    },
+    {
+      "key": "php-sonar-way-05548",
+      "name": "Sonar way",
+      "lang": "php"
+    },
+    {
+      "key": "py-sonar-way-80265",
+      "name": "Sonar way",
+      "lang": "py"
+    },
+    {
+      "key": "java-without-findbugs",
+      "name": "Without Findbugs",
+      "lang": "java"
+    }
+  ],
+  "languages": {
+    "py": "Python",
+    "js": "JavaScript",
+    "php": "PHP",
+    "java": "Java"
+  },
+  "repositories": [
+    {
+      "key": "common-java",
+      "name": "Common SonarQube",
+      "language": "java"
+    },
+    {
+      "key": "common-js",
+      "name": "Common SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "common-php",
+      "name": "Common SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "common-py",
+      "name": "Common SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "Pylint",
+      "name": "Pylint",
+      "language": "py"
+    },
+    {
+      "key": "javascript",
+      "name": "SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "php",
+      "name": "SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "python",
+      "name": "SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "squid",
+      "name": "SonarQube",
+      "language": "java"
+    }
+  ],
+  "statuses": {
+    "BETA": "Beta",
+    "DEPRECATED": "Deprecated",
+    "READY": "Ready"
+  },
+  "characteristics": [
+    {
+      "key": "UNDERSTANDABILITY",
+      "name": "Understandability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "MAINTAINABILITY",
+      "name": "Maintainability"
+    },
+    {
+      "key": "TIME_ZONE_RELATED_PORTABILITY",
+      "name": "Time zone related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "READABILITY",
+      "name": "Readability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "SECURITY_FEATURES",
+      "name": "Security features",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_RELIABILITY",
+      "name": "Architecture related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "OS_RELATED_PORTABILITY",
+      "name": "OS related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "EXCEPTION_HANDLING",
+      "name": "Exception handling",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_CHANGEABILITY",
+      "name": "Logic related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "SOFTWARE_RELATED_PORTABILITY",
+      "name": "Software related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
+      "name": "Input validation and representation",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "LANGUAGE_RELATED_PORTABILITY",
+      "name": "Language related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "ERRORS",
+      "name": "Errors",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "SECURITY",
+      "name": "Security"
+    },
+    {
+      "key": "RELIABILITY",
+      "name": "Reliability"
+    },
+    {
+      "key": "PORTABILITY",
+      "name": "Portability"
+    },
+    {
+      "key": "HARDWARE_RELATED_PORTABILITY",
+      "name": "Hardware related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "SYNCHRONIZATION_RELIABILITY",
+      "name": "Synchronization related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "TRANSPORTABILITY",
+      "name": "Transportability",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "COMPILER_RELATED_PORTABILITY",
+      "name": "Compiler related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "RESOURCE_RELIABILITY",
+      "name": "Resource",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "CPU_EFFICIENCY",
+      "name": "Processor use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "EFFICIENCY",
+      "name": "Efficiency"
+    },
+    {
+      "key": "CHANGEABILITY",
+      "name": "Changeability"
+    },
+    {
+      "key": "DATA_CHANGEABILITY",
+      "name": "Data related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "API_ABUSE",
+      "name": "API abuse",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_CHANGEABILITY",
+      "name": "Architecture related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "UNIT_TESTS",
+      "name": "Unit tests",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "INSTRUCTION_RELIABILITY",
+      "name": "Instruction related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "REUSABILITY",
+      "name": "Reusability"
+    },
+    {
+      "key": "MODULARITY",
+      "name": "Modularity",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "UNIT_TESTABILITY",
+      "name": "Unit level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "TESTABILITY",
+      "name": "Testability"
+    },
+    {
+      "key": "INTEGRATION_TESTABILITY",
+      "name": "Integration level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "NETWORK_USE",
+      "name": "Network use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "MEMORY_EFFICIENCY",
+      "name": "Memory use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "DATA_RELIABILITY",
+      "name": "Data related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "FAULT_TOLERANCE",
+      "name": "Fault tolerance",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_RELIABILITY",
+      "name": "Logic related reliability",
+      "parent": "RELIABILITY"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-create-custom-rules/search-custom-rules.json b/server/sonar-web/src/test/json/coding-rules-page-should-create-custom-rules/search-custom-rules.json
new file mode 100644 (file)
index 0000000..db83a85
--- /dev/null
@@ -0,0 +1,26 @@
+{
+  "total": 1,
+  "p": 1,
+  "ps": 10,
+  "rules": [
+    {
+      "key": "squid:Do_not_use_org_h2_util_StringUtils",
+      "name": "Do not use org.h2.util.StringUtils",
+      "severity": "MAJOR",
+      "params": [
+        {
+          "key": "fromClasses",
+          "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
+          "type": "STRING",
+          "defaultValue": ""
+        },
+        {
+          "key": "toClasses",
+          "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
+          "type": "STRING",
+          "defaultValue": "org.h2.util.StringUtils"
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-create-custom-rules/search-custom-rules2.json b/server/sonar-web/src/test/json/coding-rules-page-should-create-custom-rules/search-custom-rules2.json
new file mode 100644 (file)
index 0000000..0e4184e
--- /dev/null
@@ -0,0 +1,45 @@
+{
+  "total": 2,
+  "p": 1,
+  "ps": 10,
+  "rules": [
+    {
+      "key": "squid:Do_not_use_org_h2_util_StringUtils",
+      "name": "Do not use org.h2.util.StringUtils",
+      "severity": "MAJOR",
+      "params": [
+        {
+          "key": "fromClasses",
+          "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
+          "type": "STRING",
+          "defaultValue": ""
+        },
+        {
+          "key": "toClasses",
+          "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
+          "type": "STRING",
+          "defaultValue": "org.h2.util.StringUtils"
+        }
+      ]
+    },
+    {
+      "key": "squid:Do_not_use_edu_emory_mathcs_backport_java_util_Collections",
+      "name": "Do not use edu.emory.mathcs.backport.java.util.Collections",
+      "severity": "MAJOR",
+      "params": [
+        {
+          "key": "fromClasses",
+          "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
+          "type": "STRING",
+          "defaultValue": ""
+        },
+        {
+          "key": "toClasses",
+          "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
+          "type": "STRING",
+          "defaultValue": "edu.emory.mathcs.backport.java.util.Collections"
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-create-custom-rules/search.json b/server/sonar-web/src/test/json/coding-rules-page-should-create-custom-rules/search.json
new file mode 100644 (file)
index 0000000..40ab6ae
--- /dev/null
@@ -0,0 +1,36 @@
+{
+  "total": 1,
+  "p": 1,
+  "ps": 200,
+  "rules": [
+    {
+      "key": "squid:ArchitecturalConstraint",
+      "name": "Architectural constraint",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [],
+      "tags": [],
+      "status": "READY"
+    }
+  ],
+  "facets": [
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 1
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 1
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-create-custom-rules/show.json b/server/sonar-web/src/test/json/coding-rules-page-should-create-custom-rules/show.json
new file mode 100644 (file)
index 0000000..517c5f6
--- /dev/null
@@ -0,0 +1,37 @@
+{
+  "rule": {
+    "key": "squid:ArchitecturalConstraint",
+    "repo": "squid",
+    "name": "Architectural constraint",
+    "createdAt": "2013-03-27T09:52:40+0100",
+    "severity": "MAJOR",
+    "status": "READY",
+    "internalKey": "ArchitecturalConstraint",
+    "isTemplate": true,
+    "tags": [],
+    "sysTags": [],
+    "lang": "java",
+    "langName": "Java",
+    "htmlDesc": "<p>A source code comply to an architectural model when it fully\n\tadheres to a set of architectural constraints. A constraint allows to\n\tdeny references between classes by pattern.</p>\n<p>You can for instance use this rule to :</p>\n<ul>\n\t<li>forbid access to **.web.** from **.dao.** classes</li>\n\t<li>forbid access to java.util.Vector, java.util.Hashtable and\n\t\tjava.util.Enumeration from any classes</li>\n\t<li>forbid access to java.sql.** from **.ui.** and **.web.**\n\t\tclasses</li>\n</ul>",
+    "debtChar": "CHANGEABILITY",
+    "debtSubChar": "ARCHITECTURE_CHANGEABILITY",
+    "debtCharName": "Changeability",
+    "debtSubCharName": "Architecture related changeability",
+    "debtOverloaded": true,
+    "debtRemFnType": "LINEAR",
+    "debtRemFnCoeff": "3h",
+    "params": [
+      {
+        "key": "fromClasses",
+        "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
+        "type": "STRING"
+      },
+      {
+        "key": "toClasses",
+        "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
+        "type": "STRING"
+      }
+    ]
+  },
+  "actives": []
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-create-manual-rules/app.json b/server/sonar-web/src/test/json/coding-rules-page-should-create-manual-rules/app.json
new file mode 100644 (file)
index 0000000..50148bb
--- /dev/null
@@ -0,0 +1,316 @@
+{
+  "canWrite": true,
+  "qualityprofiles": [
+    {
+      "key": "java-default-with-mojo-conventions-49307",
+      "name": "Default - Maven Conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-default-with-sonarsource-conventions-27339",
+      "name": "Default - SonarSource conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-top-profile-without-formatting-conventions-50037",
+      "name": "Default - Top",
+      "lang": "java"
+    },
+    {
+      "key": "java-findbugs-14954",
+      "name": "FindBugs",
+      "lang": "java"
+    },
+    {
+      "key": "java-for-sq-java-plugin-only-92289",
+      "name": "For SQ Java Plugin Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "java-for-sq-only-95381",
+      "name": "For SQ Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "php-psr-2-06315",
+      "name": "PSR-2",
+      "lang": "php"
+    },
+    {
+      "key": "java-sonar-way-80423",
+      "name": "Sonar way",
+      "lang": "java"
+    },
+    {
+      "key": "js-sonar-way",
+      "name": "Sonar way",
+      "lang": "js"
+    },
+    {
+      "key": "php-sonar-way-05548",
+      "name": "Sonar way",
+      "lang": "php"
+    },
+    {
+      "key": "py-sonar-way-80265",
+      "name": "Sonar way",
+      "lang": "py"
+    },
+    {
+      "key": "java-without-findbugs",
+      "name": "Without Findbugs",
+      "lang": "java"
+    }
+  ],
+  "languages": {
+    "py": "Python",
+    "js": "JavaScript",
+    "php": "PHP",
+    "java": "Java"
+  },
+  "repositories": [
+    {
+      "key": "common-java",
+      "name": "Common SonarQube",
+      "language": "java"
+    },
+    {
+      "key": "common-js",
+      "name": "Common SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "common-php",
+      "name": "Common SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "common-py",
+      "name": "Common SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "Pylint",
+      "name": "Pylint",
+      "language": "py"
+    },
+    {
+      "key": "javascript",
+      "name": "SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "php",
+      "name": "SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "python",
+      "name": "SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "squid",
+      "name": "SonarQube",
+      "language": "java"
+    }
+  ],
+  "statuses": {
+    "BETA": "Beta",
+    "DEPRECATED": "Deprecated",
+    "READY": "Ready"
+  },
+  "characteristics": [
+    {
+      "key": "UNDERSTANDABILITY",
+      "name": "Understandability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "MAINTAINABILITY",
+      "name": "Maintainability"
+    },
+    {
+      "key": "TIME_ZONE_RELATED_PORTABILITY",
+      "name": "Time zone related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "READABILITY",
+      "name": "Readability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "SECURITY_FEATURES",
+      "name": "Security features",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_RELIABILITY",
+      "name": "Architecture related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "OS_RELATED_PORTABILITY",
+      "name": "OS related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "EXCEPTION_HANDLING",
+      "name": "Exception handling",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_CHANGEABILITY",
+      "name": "Logic related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "SOFTWARE_RELATED_PORTABILITY",
+      "name": "Software related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
+      "name": "Input validation and representation",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "LANGUAGE_RELATED_PORTABILITY",
+      "name": "Language related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "ERRORS",
+      "name": "Errors",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "SECURITY",
+      "name": "Security"
+    },
+    {
+      "key": "RELIABILITY",
+      "name": "Reliability"
+    },
+    {
+      "key": "PORTABILITY",
+      "name": "Portability"
+    },
+    {
+      "key": "HARDWARE_RELATED_PORTABILITY",
+      "name": "Hardware related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "SYNCHRONIZATION_RELIABILITY",
+      "name": "Synchronization related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "TRANSPORTABILITY",
+      "name": "Transportability",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "COMPILER_RELATED_PORTABILITY",
+      "name": "Compiler related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "RESOURCE_RELIABILITY",
+      "name": "Resource",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "CPU_EFFICIENCY",
+      "name": "Processor use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "EFFICIENCY",
+      "name": "Efficiency"
+    },
+    {
+      "key": "CHANGEABILITY",
+      "name": "Changeability"
+    },
+    {
+      "key": "DATA_CHANGEABILITY",
+      "name": "Data related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "API_ABUSE",
+      "name": "API abuse",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_CHANGEABILITY",
+      "name": "Architecture related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "UNIT_TESTS",
+      "name": "Unit tests",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "INSTRUCTION_RELIABILITY",
+      "name": "Instruction related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "REUSABILITY",
+      "name": "Reusability"
+    },
+    {
+      "key": "MODULARITY",
+      "name": "Modularity",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "UNIT_TESTABILITY",
+      "name": "Unit level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "TESTABILITY",
+      "name": "Testability"
+    },
+    {
+      "key": "INTEGRATION_TESTABILITY",
+      "name": "Integration level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "NETWORK_USE",
+      "name": "Network use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "MEMORY_EFFICIENCY",
+      "name": "Memory use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "DATA_RELIABILITY",
+      "name": "Data related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "FAULT_TOLERANCE",
+      "name": "Fault tolerance",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_RELIABILITY",
+      "name": "Logic related reliability",
+      "parent": "RELIABILITY"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-create-manual-rules/search.json b/server/sonar-web/src/test/json/coding-rules-page-should-create-manual-rules/search.json
new file mode 100644 (file)
index 0000000..f43d117
--- /dev/null
@@ -0,0 +1,7 @@
+{
+  "total": 0,
+  "p": 1,
+  "ps": 200,
+  "rules": [],
+  "facets": []
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-create-manual-rules/show.json b/server/sonar-web/src/test/json/coding-rules-page-should-create-manual-rules/show.json
new file mode 100644 (file)
index 0000000..38190c2
--- /dev/null
@@ -0,0 +1,17 @@
+{
+  "rule": {
+    "key": "manual:Manual_Rule",
+    "repo": "manual",
+    "name": "Manual Rule",
+    "createdAt": "2015-01-05T10:02:11+0100",
+    "status": "READY",
+    "isTemplate": false,
+    "tags": [],
+    "sysTags": [],
+    "htmlDesc": "Manual Rule Description",
+    "mdDesc": "Manual Rule Description",
+    "debtOverloaded": false,
+    "params": []
+  },
+  "actives": []
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-delete-custom-rules/app.json b/server/sonar-web/src/test/json/coding-rules-page-should-delete-custom-rules/app.json
new file mode 100644 (file)
index 0000000..50148bb
--- /dev/null
@@ -0,0 +1,316 @@
+{
+  "canWrite": true,
+  "qualityprofiles": [
+    {
+      "key": "java-default-with-mojo-conventions-49307",
+      "name": "Default - Maven Conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-default-with-sonarsource-conventions-27339",
+      "name": "Default - SonarSource conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-top-profile-without-formatting-conventions-50037",
+      "name": "Default - Top",
+      "lang": "java"
+    },
+    {
+      "key": "java-findbugs-14954",
+      "name": "FindBugs",
+      "lang": "java"
+    },
+    {
+      "key": "java-for-sq-java-plugin-only-92289",
+      "name": "For SQ Java Plugin Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "java-for-sq-only-95381",
+      "name": "For SQ Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "php-psr-2-06315",
+      "name": "PSR-2",
+      "lang": "php"
+    },
+    {
+      "key": "java-sonar-way-80423",
+      "name": "Sonar way",
+      "lang": "java"
+    },
+    {
+      "key": "js-sonar-way",
+      "name": "Sonar way",
+      "lang": "js"
+    },
+    {
+      "key": "php-sonar-way-05548",
+      "name": "Sonar way",
+      "lang": "php"
+    },
+    {
+      "key": "py-sonar-way-80265",
+      "name": "Sonar way",
+      "lang": "py"
+    },
+    {
+      "key": "java-without-findbugs",
+      "name": "Without Findbugs",
+      "lang": "java"
+    }
+  ],
+  "languages": {
+    "py": "Python",
+    "js": "JavaScript",
+    "php": "PHP",
+    "java": "Java"
+  },
+  "repositories": [
+    {
+      "key": "common-java",
+      "name": "Common SonarQube",
+      "language": "java"
+    },
+    {
+      "key": "common-js",
+      "name": "Common SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "common-php",
+      "name": "Common SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "common-py",
+      "name": "Common SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "Pylint",
+      "name": "Pylint",
+      "language": "py"
+    },
+    {
+      "key": "javascript",
+      "name": "SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "php",
+      "name": "SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "python",
+      "name": "SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "squid",
+      "name": "SonarQube",
+      "language": "java"
+    }
+  ],
+  "statuses": {
+    "BETA": "Beta",
+    "DEPRECATED": "Deprecated",
+    "READY": "Ready"
+  },
+  "characteristics": [
+    {
+      "key": "UNDERSTANDABILITY",
+      "name": "Understandability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "MAINTAINABILITY",
+      "name": "Maintainability"
+    },
+    {
+      "key": "TIME_ZONE_RELATED_PORTABILITY",
+      "name": "Time zone related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "READABILITY",
+      "name": "Readability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "SECURITY_FEATURES",
+      "name": "Security features",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_RELIABILITY",
+      "name": "Architecture related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "OS_RELATED_PORTABILITY",
+      "name": "OS related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "EXCEPTION_HANDLING",
+      "name": "Exception handling",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_CHANGEABILITY",
+      "name": "Logic related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "SOFTWARE_RELATED_PORTABILITY",
+      "name": "Software related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
+      "name": "Input validation and representation",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "LANGUAGE_RELATED_PORTABILITY",
+      "name": "Language related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "ERRORS",
+      "name": "Errors",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "SECURITY",
+      "name": "Security"
+    },
+    {
+      "key": "RELIABILITY",
+      "name": "Reliability"
+    },
+    {
+      "key": "PORTABILITY",
+      "name": "Portability"
+    },
+    {
+      "key": "HARDWARE_RELATED_PORTABILITY",
+      "name": "Hardware related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "SYNCHRONIZATION_RELIABILITY",
+      "name": "Synchronization related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "TRANSPORTABILITY",
+      "name": "Transportability",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "COMPILER_RELATED_PORTABILITY",
+      "name": "Compiler related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "RESOURCE_RELIABILITY",
+      "name": "Resource",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "CPU_EFFICIENCY",
+      "name": "Processor use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "EFFICIENCY",
+      "name": "Efficiency"
+    },
+    {
+      "key": "CHANGEABILITY",
+      "name": "Changeability"
+    },
+    {
+      "key": "DATA_CHANGEABILITY",
+      "name": "Data related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "API_ABUSE",
+      "name": "API abuse",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_CHANGEABILITY",
+      "name": "Architecture related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "UNIT_TESTS",
+      "name": "Unit tests",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "INSTRUCTION_RELIABILITY",
+      "name": "Instruction related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "REUSABILITY",
+      "name": "Reusability"
+    },
+    {
+      "key": "MODULARITY",
+      "name": "Modularity",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "UNIT_TESTABILITY",
+      "name": "Unit level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "TESTABILITY",
+      "name": "Testability"
+    },
+    {
+      "key": "INTEGRATION_TESTABILITY",
+      "name": "Integration level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "NETWORK_USE",
+      "name": "Network use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "MEMORY_EFFICIENCY",
+      "name": "Memory use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "DATA_RELIABILITY",
+      "name": "Data related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "FAULT_TOLERANCE",
+      "name": "Fault tolerance",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_RELIABILITY",
+      "name": "Logic related reliability",
+      "parent": "RELIABILITY"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-delete-custom-rules/search-custom-rules.json b/server/sonar-web/src/test/json/coding-rules-page-should-delete-custom-rules/search-custom-rules.json
new file mode 100644 (file)
index 0000000..0e4184e
--- /dev/null
@@ -0,0 +1,45 @@
+{
+  "total": 2,
+  "p": 1,
+  "ps": 10,
+  "rules": [
+    {
+      "key": "squid:Do_not_use_org_h2_util_StringUtils",
+      "name": "Do not use org.h2.util.StringUtils",
+      "severity": "MAJOR",
+      "params": [
+        {
+          "key": "fromClasses",
+          "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
+          "type": "STRING",
+          "defaultValue": ""
+        },
+        {
+          "key": "toClasses",
+          "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
+          "type": "STRING",
+          "defaultValue": "org.h2.util.StringUtils"
+        }
+      ]
+    },
+    {
+      "key": "squid:Do_not_use_edu_emory_mathcs_backport_java_util_Collections",
+      "name": "Do not use edu.emory.mathcs.backport.java.util.Collections",
+      "severity": "MAJOR",
+      "params": [
+        {
+          "key": "fromClasses",
+          "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
+          "type": "STRING",
+          "defaultValue": ""
+        },
+        {
+          "key": "toClasses",
+          "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
+          "type": "STRING",
+          "defaultValue": "edu.emory.mathcs.backport.java.util.Collections"
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-delete-custom-rules/search.json b/server/sonar-web/src/test/json/coding-rules-page-should-delete-custom-rules/search.json
new file mode 100644 (file)
index 0000000..40ab6ae
--- /dev/null
@@ -0,0 +1,36 @@
+{
+  "total": 1,
+  "p": 1,
+  "ps": 200,
+  "rules": [
+    {
+      "key": "squid:ArchitecturalConstraint",
+      "name": "Architectural constraint",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [],
+      "tags": [],
+      "status": "READY"
+    }
+  ],
+  "facets": [
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 1
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 1
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-delete-custom-rules/show.json b/server/sonar-web/src/test/json/coding-rules-page-should-delete-custom-rules/show.json
new file mode 100644 (file)
index 0000000..517c5f6
--- /dev/null
@@ -0,0 +1,37 @@
+{
+  "rule": {
+    "key": "squid:ArchitecturalConstraint",
+    "repo": "squid",
+    "name": "Architectural constraint",
+    "createdAt": "2013-03-27T09:52:40+0100",
+    "severity": "MAJOR",
+    "status": "READY",
+    "internalKey": "ArchitecturalConstraint",
+    "isTemplate": true,
+    "tags": [],
+    "sysTags": [],
+    "lang": "java",
+    "langName": "Java",
+    "htmlDesc": "<p>A source code comply to an architectural model when it fully\n\tadheres to a set of architectural constraints. A constraint allows to\n\tdeny references between classes by pattern.</p>\n<p>You can for instance use this rule to :</p>\n<ul>\n\t<li>forbid access to **.web.** from **.dao.** classes</li>\n\t<li>forbid access to java.util.Vector, java.util.Hashtable and\n\t\tjava.util.Enumeration from any classes</li>\n\t<li>forbid access to java.sql.** from **.ui.** and **.web.**\n\t\tclasses</li>\n</ul>",
+    "debtChar": "CHANGEABILITY",
+    "debtSubChar": "ARCHITECTURE_CHANGEABILITY",
+    "debtCharName": "Changeability",
+    "debtSubCharName": "Architecture related changeability",
+    "debtOverloaded": true,
+    "debtRemFnType": "LINEAR",
+    "debtRemFnCoeff": "3h",
+    "params": [
+      {
+        "key": "fromClasses",
+        "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
+        "type": "STRING"
+      },
+      {
+        "key": "toClasses",
+        "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
+        "type": "STRING"
+      }
+    ]
+  },
+  "actives": []
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-delete-manual-rules/app.json b/server/sonar-web/src/test/json/coding-rules-page-should-delete-manual-rules/app.json
new file mode 100644 (file)
index 0000000..50148bb
--- /dev/null
@@ -0,0 +1,316 @@
+{
+  "canWrite": true,
+  "qualityprofiles": [
+    {
+      "key": "java-default-with-mojo-conventions-49307",
+      "name": "Default - Maven Conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-default-with-sonarsource-conventions-27339",
+      "name": "Default - SonarSource conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-top-profile-without-formatting-conventions-50037",
+      "name": "Default - Top",
+      "lang": "java"
+    },
+    {
+      "key": "java-findbugs-14954",
+      "name": "FindBugs",
+      "lang": "java"
+    },
+    {
+      "key": "java-for-sq-java-plugin-only-92289",
+      "name": "For SQ Java Plugin Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "java-for-sq-only-95381",
+      "name": "For SQ Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "php-psr-2-06315",
+      "name": "PSR-2",
+      "lang": "php"
+    },
+    {
+      "key": "java-sonar-way-80423",
+      "name": "Sonar way",
+      "lang": "java"
+    },
+    {
+      "key": "js-sonar-way",
+      "name": "Sonar way",
+      "lang": "js"
+    },
+    {
+      "key": "php-sonar-way-05548",
+      "name": "Sonar way",
+      "lang": "php"
+    },
+    {
+      "key": "py-sonar-way-80265",
+      "name": "Sonar way",
+      "lang": "py"
+    },
+    {
+      "key": "java-without-findbugs",
+      "name": "Without Findbugs",
+      "lang": "java"
+    }
+  ],
+  "languages": {
+    "py": "Python",
+    "js": "JavaScript",
+    "php": "PHP",
+    "java": "Java"
+  },
+  "repositories": [
+    {
+      "key": "common-java",
+      "name": "Common SonarQube",
+      "language": "java"
+    },
+    {
+      "key": "common-js",
+      "name": "Common SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "common-php",
+      "name": "Common SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "common-py",
+      "name": "Common SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "Pylint",
+      "name": "Pylint",
+      "language": "py"
+    },
+    {
+      "key": "javascript",
+      "name": "SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "php",
+      "name": "SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "python",
+      "name": "SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "squid",
+      "name": "SonarQube",
+      "language": "java"
+    }
+  ],
+  "statuses": {
+    "BETA": "Beta",
+    "DEPRECATED": "Deprecated",
+    "READY": "Ready"
+  },
+  "characteristics": [
+    {
+      "key": "UNDERSTANDABILITY",
+      "name": "Understandability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "MAINTAINABILITY",
+      "name": "Maintainability"
+    },
+    {
+      "key": "TIME_ZONE_RELATED_PORTABILITY",
+      "name": "Time zone related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "READABILITY",
+      "name": "Readability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "SECURITY_FEATURES",
+      "name": "Security features",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_RELIABILITY",
+      "name": "Architecture related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "OS_RELATED_PORTABILITY",
+      "name": "OS related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "EXCEPTION_HANDLING",
+      "name": "Exception handling",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_CHANGEABILITY",
+      "name": "Logic related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "SOFTWARE_RELATED_PORTABILITY",
+      "name": "Software related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
+      "name": "Input validation and representation",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "LANGUAGE_RELATED_PORTABILITY",
+      "name": "Language related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "ERRORS",
+      "name": "Errors",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "SECURITY",
+      "name": "Security"
+    },
+    {
+      "key": "RELIABILITY",
+      "name": "Reliability"
+    },
+    {
+      "key": "PORTABILITY",
+      "name": "Portability"
+    },
+    {
+      "key": "HARDWARE_RELATED_PORTABILITY",
+      "name": "Hardware related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "SYNCHRONIZATION_RELIABILITY",
+      "name": "Synchronization related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "TRANSPORTABILITY",
+      "name": "Transportability",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "COMPILER_RELATED_PORTABILITY",
+      "name": "Compiler related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "RESOURCE_RELIABILITY",
+      "name": "Resource",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "CPU_EFFICIENCY",
+      "name": "Processor use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "EFFICIENCY",
+      "name": "Efficiency"
+    },
+    {
+      "key": "CHANGEABILITY",
+      "name": "Changeability"
+    },
+    {
+      "key": "DATA_CHANGEABILITY",
+      "name": "Data related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "API_ABUSE",
+      "name": "API abuse",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_CHANGEABILITY",
+      "name": "Architecture related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "UNIT_TESTS",
+      "name": "Unit tests",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "INSTRUCTION_RELIABILITY",
+      "name": "Instruction related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "REUSABILITY",
+      "name": "Reusability"
+    },
+    {
+      "key": "MODULARITY",
+      "name": "Modularity",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "UNIT_TESTABILITY",
+      "name": "Unit level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "TESTABILITY",
+      "name": "Testability"
+    },
+    {
+      "key": "INTEGRATION_TESTABILITY",
+      "name": "Integration level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "NETWORK_USE",
+      "name": "Network use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "MEMORY_EFFICIENCY",
+      "name": "Memory use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "DATA_RELIABILITY",
+      "name": "Data related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "FAULT_TOLERANCE",
+      "name": "Fault tolerance",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_RELIABILITY",
+      "name": "Logic related reliability",
+      "parent": "RELIABILITY"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-delete-manual-rules/search-after.json b/server/sonar-web/src/test/json/coding-rules-page-should-delete-manual-rules/search-after.json
new file mode 100644 (file)
index 0000000..f43d117
--- /dev/null
@@ -0,0 +1,7 @@
+{
+  "total": 0,
+  "p": 1,
+  "ps": 200,
+  "rules": [],
+  "facets": []
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-delete-manual-rules/search-before.json b/server/sonar-web/src/test/json/coding-rules-page-should-delete-manual-rules/search-before.json
new file mode 100644 (file)
index 0000000..1f19e1d
--- /dev/null
@@ -0,0 +1,25 @@
+{
+  "total": 1,
+  "p": 1,
+  "ps": 200,
+  "rules": [
+    {
+      "key": "manual:Manual_Rule",
+      "name": "Manual Rule",
+      "sysTags": [],
+      "tags": [],
+      "status": "READY"
+    }
+  ],
+  "facets": [
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "manual",
+          "count": 1
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-delete-manual-rules/show.json b/server/sonar-web/src/test/json/coding-rules-page-should-delete-manual-rules/show.json
new file mode 100644 (file)
index 0000000..38190c2
--- /dev/null
@@ -0,0 +1,17 @@
+{
+  "rule": {
+    "key": "manual:Manual_Rule",
+    "repo": "manual",
+    "name": "Manual Rule",
+    "createdAt": "2015-01-05T10:02:11+0100",
+    "status": "READY",
+    "isTemplate": false,
+    "tags": [],
+    "sysTags": [],
+    "htmlDesc": "Manual Rule Description",
+    "mdDesc": "Manual Rule Description",
+    "debtOverloaded": false,
+    "params": []
+  },
+  "actives": []
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-show-custom-rules/app.json b/server/sonar-web/src/test/json/coding-rules-page-should-show-custom-rules/app.json
new file mode 100644 (file)
index 0000000..0eb43bc
--- /dev/null
@@ -0,0 +1,316 @@
+{
+  "canWrite": false,
+  "qualityprofiles": [
+    {
+      "key": "java-default-with-mojo-conventions-49307",
+      "name": "Default - Maven Conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-default-with-sonarsource-conventions-27339",
+      "name": "Default - SonarSource conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-top-profile-without-formatting-conventions-50037",
+      "name": "Default - Top",
+      "lang": "java"
+    },
+    {
+      "key": "java-findbugs-14954",
+      "name": "FindBugs",
+      "lang": "java"
+    },
+    {
+      "key": "java-for-sq-java-plugin-only-92289",
+      "name": "For SQ Java Plugin Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "java-for-sq-only-95381",
+      "name": "For SQ Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "php-psr-2-06315",
+      "name": "PSR-2",
+      "lang": "php"
+    },
+    {
+      "key": "java-sonar-way-80423",
+      "name": "Sonar way",
+      "lang": "java"
+    },
+    {
+      "key": "js-sonar-way",
+      "name": "Sonar way",
+      "lang": "js"
+    },
+    {
+      "key": "php-sonar-way-05548",
+      "name": "Sonar way",
+      "lang": "php"
+    },
+    {
+      "key": "py-sonar-way-80265",
+      "name": "Sonar way",
+      "lang": "py"
+    },
+    {
+      "key": "java-without-findbugs",
+      "name": "Without Findbugs",
+      "lang": "java"
+    }
+  ],
+  "languages": {
+    "py": "Python",
+    "js": "JavaScript",
+    "php": "PHP",
+    "java": "Java"
+  },
+  "repositories": [
+    {
+      "key": "common-java",
+      "name": "Common SonarQube",
+      "language": "java"
+    },
+    {
+      "key": "common-js",
+      "name": "Common SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "common-php",
+      "name": "Common SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "common-py",
+      "name": "Common SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "Pylint",
+      "name": "Pylint",
+      "language": "py"
+    },
+    {
+      "key": "javascript",
+      "name": "SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "php",
+      "name": "SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "python",
+      "name": "SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "squid",
+      "name": "SonarQube",
+      "language": "java"
+    }
+  ],
+  "statuses": {
+    "BETA": "Beta",
+    "DEPRECATED": "Deprecated",
+    "READY": "Ready"
+  },
+  "characteristics": [
+    {
+      "key": "UNDERSTANDABILITY",
+      "name": "Understandability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "MAINTAINABILITY",
+      "name": "Maintainability"
+    },
+    {
+      "key": "TIME_ZONE_RELATED_PORTABILITY",
+      "name": "Time zone related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "READABILITY",
+      "name": "Readability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "SECURITY_FEATURES",
+      "name": "Security features",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_RELIABILITY",
+      "name": "Architecture related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "OS_RELATED_PORTABILITY",
+      "name": "OS related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "EXCEPTION_HANDLING",
+      "name": "Exception handling",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_CHANGEABILITY",
+      "name": "Logic related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "SOFTWARE_RELATED_PORTABILITY",
+      "name": "Software related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
+      "name": "Input validation and representation",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "LANGUAGE_RELATED_PORTABILITY",
+      "name": "Language related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "ERRORS",
+      "name": "Errors",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "SECURITY",
+      "name": "Security"
+    },
+    {
+      "key": "RELIABILITY",
+      "name": "Reliability"
+    },
+    {
+      "key": "PORTABILITY",
+      "name": "Portability"
+    },
+    {
+      "key": "HARDWARE_RELATED_PORTABILITY",
+      "name": "Hardware related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "SYNCHRONIZATION_RELIABILITY",
+      "name": "Synchronization related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "TRANSPORTABILITY",
+      "name": "Transportability",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "COMPILER_RELATED_PORTABILITY",
+      "name": "Compiler related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "RESOURCE_RELIABILITY",
+      "name": "Resource",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "CPU_EFFICIENCY",
+      "name": "Processor use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "EFFICIENCY",
+      "name": "Efficiency"
+    },
+    {
+      "key": "CHANGEABILITY",
+      "name": "Changeability"
+    },
+    {
+      "key": "DATA_CHANGEABILITY",
+      "name": "Data related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "API_ABUSE",
+      "name": "API abuse",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_CHANGEABILITY",
+      "name": "Architecture related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "UNIT_TESTS",
+      "name": "Unit tests",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "INSTRUCTION_RELIABILITY",
+      "name": "Instruction related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "REUSABILITY",
+      "name": "Reusability"
+    },
+    {
+      "key": "MODULARITY",
+      "name": "Modularity",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "UNIT_TESTABILITY",
+      "name": "Unit level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "TESTABILITY",
+      "name": "Testability"
+    },
+    {
+      "key": "INTEGRATION_TESTABILITY",
+      "name": "Integration level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "NETWORK_USE",
+      "name": "Network use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "MEMORY_EFFICIENCY",
+      "name": "Memory use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "DATA_RELIABILITY",
+      "name": "Data related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "FAULT_TOLERANCE",
+      "name": "Fault tolerance",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_RELIABILITY",
+      "name": "Logic related reliability",
+      "parent": "RELIABILITY"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-show-custom-rules/search-custom-rules.json b/server/sonar-web/src/test/json/coding-rules-page-should-show-custom-rules/search-custom-rules.json
new file mode 100644 (file)
index 0000000..0e4184e
--- /dev/null
@@ -0,0 +1,45 @@
+{
+  "total": 2,
+  "p": 1,
+  "ps": 10,
+  "rules": [
+    {
+      "key": "squid:Do_not_use_org_h2_util_StringUtils",
+      "name": "Do not use org.h2.util.StringUtils",
+      "severity": "MAJOR",
+      "params": [
+        {
+          "key": "fromClasses",
+          "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
+          "type": "STRING",
+          "defaultValue": ""
+        },
+        {
+          "key": "toClasses",
+          "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
+          "type": "STRING",
+          "defaultValue": "org.h2.util.StringUtils"
+        }
+      ]
+    },
+    {
+      "key": "squid:Do_not_use_edu_emory_mathcs_backport_java_util_Collections",
+      "name": "Do not use edu.emory.mathcs.backport.java.util.Collections",
+      "severity": "MAJOR",
+      "params": [
+        {
+          "key": "fromClasses",
+          "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
+          "type": "STRING",
+          "defaultValue": ""
+        },
+        {
+          "key": "toClasses",
+          "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
+          "type": "STRING",
+          "defaultValue": "edu.emory.mathcs.backport.java.util.Collections"
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-show-custom-rules/search.json b/server/sonar-web/src/test/json/coding-rules-page-should-show-custom-rules/search.json
new file mode 100644 (file)
index 0000000..40ab6ae
--- /dev/null
@@ -0,0 +1,36 @@
+{
+  "total": 1,
+  "p": 1,
+  "ps": 200,
+  "rules": [
+    {
+      "key": "squid:ArchitecturalConstraint",
+      "name": "Architectural constraint",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [],
+      "tags": [],
+      "status": "READY"
+    }
+  ],
+  "facets": [
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 1
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 1
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-show-custom-rules/show.json b/server/sonar-web/src/test/json/coding-rules-page-should-show-custom-rules/show.json
new file mode 100644 (file)
index 0000000..517c5f6
--- /dev/null
@@ -0,0 +1,37 @@
+{
+  "rule": {
+    "key": "squid:ArchitecturalConstraint",
+    "repo": "squid",
+    "name": "Architectural constraint",
+    "createdAt": "2013-03-27T09:52:40+0100",
+    "severity": "MAJOR",
+    "status": "READY",
+    "internalKey": "ArchitecturalConstraint",
+    "isTemplate": true,
+    "tags": [],
+    "sysTags": [],
+    "lang": "java",
+    "langName": "Java",
+    "htmlDesc": "<p>A source code comply to an architectural model when it fully\n\tadheres to a set of architectural constraints. A constraint allows to\n\tdeny references between classes by pattern.</p>\n<p>You can for instance use this rule to :</p>\n<ul>\n\t<li>forbid access to **.web.** from **.dao.** classes</li>\n\t<li>forbid access to java.util.Vector, java.util.Hashtable and\n\t\tjava.util.Enumeration from any classes</li>\n\t<li>forbid access to java.sql.** from **.ui.** and **.web.**\n\t\tclasses</li>\n</ul>",
+    "debtChar": "CHANGEABILITY",
+    "debtSubChar": "ARCHITECTURE_CHANGEABILITY",
+    "debtCharName": "Changeability",
+    "debtSubCharName": "Architecture related changeability",
+    "debtOverloaded": true,
+    "debtRemFnType": "LINEAR",
+    "debtRemFnCoeff": "3h",
+    "params": [
+      {
+        "key": "fromClasses",
+        "htmlDesc": "Optional. If this property is not defined, all classes should adhere to this constraint. Ex : *<em>.web.</em>*",
+        "type": "STRING"
+      },
+      {
+        "key": "toClasses",
+        "htmlDesc": "Mandatory. Ex : java.util.Vector, java.util.Hashtable, java.util.Enumeration",
+        "type": "STRING"
+      }
+    ]
+  },
+  "actives": []
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-show-deprecated-label/app.json b/server/sonar-web/src/test/json/coding-rules-page-should-show-deprecated-label/app.json
new file mode 100644 (file)
index 0000000..0eb43bc
--- /dev/null
@@ -0,0 +1,316 @@
+{
+  "canWrite": false,
+  "qualityprofiles": [
+    {
+      "key": "java-default-with-mojo-conventions-49307",
+      "name": "Default - Maven Conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-default-with-sonarsource-conventions-27339",
+      "name": "Default - SonarSource conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-top-profile-without-formatting-conventions-50037",
+      "name": "Default - Top",
+      "lang": "java"
+    },
+    {
+      "key": "java-findbugs-14954",
+      "name": "FindBugs",
+      "lang": "java"
+    },
+    {
+      "key": "java-for-sq-java-plugin-only-92289",
+      "name": "For SQ Java Plugin Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "java-for-sq-only-95381",
+      "name": "For SQ Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "php-psr-2-06315",
+      "name": "PSR-2",
+      "lang": "php"
+    },
+    {
+      "key": "java-sonar-way-80423",
+      "name": "Sonar way",
+      "lang": "java"
+    },
+    {
+      "key": "js-sonar-way",
+      "name": "Sonar way",
+      "lang": "js"
+    },
+    {
+      "key": "php-sonar-way-05548",
+      "name": "Sonar way",
+      "lang": "php"
+    },
+    {
+      "key": "py-sonar-way-80265",
+      "name": "Sonar way",
+      "lang": "py"
+    },
+    {
+      "key": "java-without-findbugs",
+      "name": "Without Findbugs",
+      "lang": "java"
+    }
+  ],
+  "languages": {
+    "py": "Python",
+    "js": "JavaScript",
+    "php": "PHP",
+    "java": "Java"
+  },
+  "repositories": [
+    {
+      "key": "common-java",
+      "name": "Common SonarQube",
+      "language": "java"
+    },
+    {
+      "key": "common-js",
+      "name": "Common SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "common-php",
+      "name": "Common SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "common-py",
+      "name": "Common SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "Pylint",
+      "name": "Pylint",
+      "language": "py"
+    },
+    {
+      "key": "javascript",
+      "name": "SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "php",
+      "name": "SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "python",
+      "name": "SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "squid",
+      "name": "SonarQube",
+      "language": "java"
+    }
+  ],
+  "statuses": {
+    "BETA": "Beta",
+    "DEPRECATED": "Deprecated",
+    "READY": "Ready"
+  },
+  "characteristics": [
+    {
+      "key": "UNDERSTANDABILITY",
+      "name": "Understandability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "MAINTAINABILITY",
+      "name": "Maintainability"
+    },
+    {
+      "key": "TIME_ZONE_RELATED_PORTABILITY",
+      "name": "Time zone related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "READABILITY",
+      "name": "Readability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "SECURITY_FEATURES",
+      "name": "Security features",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_RELIABILITY",
+      "name": "Architecture related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "OS_RELATED_PORTABILITY",
+      "name": "OS related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "EXCEPTION_HANDLING",
+      "name": "Exception handling",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_CHANGEABILITY",
+      "name": "Logic related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "SOFTWARE_RELATED_PORTABILITY",
+      "name": "Software related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
+      "name": "Input validation and representation",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "LANGUAGE_RELATED_PORTABILITY",
+      "name": "Language related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "ERRORS",
+      "name": "Errors",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "SECURITY",
+      "name": "Security"
+    },
+    {
+      "key": "RELIABILITY",
+      "name": "Reliability"
+    },
+    {
+      "key": "PORTABILITY",
+      "name": "Portability"
+    },
+    {
+      "key": "HARDWARE_RELATED_PORTABILITY",
+      "name": "Hardware related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "SYNCHRONIZATION_RELIABILITY",
+      "name": "Synchronization related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "TRANSPORTABILITY",
+      "name": "Transportability",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "COMPILER_RELATED_PORTABILITY",
+      "name": "Compiler related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "RESOURCE_RELIABILITY",
+      "name": "Resource",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "CPU_EFFICIENCY",
+      "name": "Processor use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "EFFICIENCY",
+      "name": "Efficiency"
+    },
+    {
+      "key": "CHANGEABILITY",
+      "name": "Changeability"
+    },
+    {
+      "key": "DATA_CHANGEABILITY",
+      "name": "Data related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "API_ABUSE",
+      "name": "API abuse",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_CHANGEABILITY",
+      "name": "Architecture related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "UNIT_TESTS",
+      "name": "Unit tests",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "INSTRUCTION_RELIABILITY",
+      "name": "Instruction related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "REUSABILITY",
+      "name": "Reusability"
+    },
+    {
+      "key": "MODULARITY",
+      "name": "Modularity",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "UNIT_TESTABILITY",
+      "name": "Unit level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "TESTABILITY",
+      "name": "Testability"
+    },
+    {
+      "key": "INTEGRATION_TESTABILITY",
+      "name": "Integration level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "NETWORK_USE",
+      "name": "Network use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "MEMORY_EFFICIENCY",
+      "name": "Memory use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "DATA_RELIABILITY",
+      "name": "Data related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "FAULT_TOLERANCE",
+      "name": "Fault tolerance",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_RELIABILITY",
+      "name": "Logic related reliability",
+      "parent": "RELIABILITY"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-show-deprecated-label/search.json b/server/sonar-web/src/test/json/coding-rules-page-should-show-deprecated-label/search.json
new file mode 100644 (file)
index 0000000..ddeb1cb
--- /dev/null
@@ -0,0 +1,396 @@
+{
+  "total": 609,
+  "p": 1,
+  "ps": 25,
+  "rules": [
+    {
+      "key": "squid:S2077",
+      "status": "DEPRECATED",
+      "name": "Values passed to SQL commands should be sanitized",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security",
+        "sql"
+      ],
+      "tags": [
+        "custom-tag"
+      ]
+    },
+    {
+      "key": "php:S107",
+      "status": "READY",
+      "name": "Functions should not have too many parameters",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1192",
+      "status": "READY",
+      "name": "String literals should not be duplicated",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1145",
+      "status": "READY",
+      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "bug",
+        "cwe",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S108",
+      "status": "READY",
+      "name": "Nested blocks of code should not be left empty",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1301",
+      "status": "READY",
+      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S103",
+      "status": "READY",
+      "name": "Lines should not be too long",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1144",
+      "status": "READY",
+      "name": "Unused private method should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S105",
+      "status": "READY",
+      "name": "Tabulation characters should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1481",
+      "status": "READY",
+      "name": "Unused local variables should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1142",
+      "status": "READY",
+      "name": "Functions should not contain too many return statements",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S104",
+      "status": "READY",
+      "name": "Files should not have too many lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1605",
+      "status": "READY",
+      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1448",
+      "status": "READY",
+      "name": "Classes should not have too many methods",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1603",
+      "status": "READY",
+      "name": "PHP 4 constructor declarations should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1779",
+      "status": "READY",
+      "name": "Only LF character (Unix-like) should be used to end lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1185",
+      "status": "READY",
+      "name": "Overriding methods should do more than simply call the same method in the super class",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1600",
+      "status": "READY",
+      "name": "Deprecated predefined variables should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1109",
+      "status": "READY",
+      "name": "A close curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2001",
+      "status": "READY",
+      "name": "Functions deprecated in PHP 5 should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "obsolete"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2002",
+      "status": "READY",
+      "name": "Errors should not be silenced",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2000",
+      "status": "READY",
+      "name": "Files should not contain characters before \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "status": "READY",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "status": "READY",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "status": "READY",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-show-details/app.json b/server/sonar-web/src/test/json/coding-rules-page-should-show-details/app.json
new file mode 100644 (file)
index 0000000..0eb43bc
--- /dev/null
@@ -0,0 +1,316 @@
+{
+  "canWrite": false,
+  "qualityprofiles": [
+    {
+      "key": "java-default-with-mojo-conventions-49307",
+      "name": "Default - Maven Conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-default-with-sonarsource-conventions-27339",
+      "name": "Default - SonarSource conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-top-profile-without-formatting-conventions-50037",
+      "name": "Default - Top",
+      "lang": "java"
+    },
+    {
+      "key": "java-findbugs-14954",
+      "name": "FindBugs",
+      "lang": "java"
+    },
+    {
+      "key": "java-for-sq-java-plugin-only-92289",
+      "name": "For SQ Java Plugin Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "java-for-sq-only-95381",
+      "name": "For SQ Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "php-psr-2-06315",
+      "name": "PSR-2",
+      "lang": "php"
+    },
+    {
+      "key": "java-sonar-way-80423",
+      "name": "Sonar way",
+      "lang": "java"
+    },
+    {
+      "key": "js-sonar-way",
+      "name": "Sonar way",
+      "lang": "js"
+    },
+    {
+      "key": "php-sonar-way-05548",
+      "name": "Sonar way",
+      "lang": "php"
+    },
+    {
+      "key": "py-sonar-way-80265",
+      "name": "Sonar way",
+      "lang": "py"
+    },
+    {
+      "key": "java-without-findbugs",
+      "name": "Without Findbugs",
+      "lang": "java"
+    }
+  ],
+  "languages": {
+    "py": "Python",
+    "js": "JavaScript",
+    "php": "PHP",
+    "java": "Java"
+  },
+  "repositories": [
+    {
+      "key": "common-java",
+      "name": "Common SonarQube",
+      "language": "java"
+    },
+    {
+      "key": "common-js",
+      "name": "Common SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "common-php",
+      "name": "Common SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "common-py",
+      "name": "Common SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "Pylint",
+      "name": "Pylint",
+      "language": "py"
+    },
+    {
+      "key": "javascript",
+      "name": "SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "php",
+      "name": "SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "python",
+      "name": "SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "squid",
+      "name": "SonarQube",
+      "language": "java"
+    }
+  ],
+  "statuses": {
+    "BETA": "Beta",
+    "DEPRECATED": "Deprecated",
+    "READY": "Ready"
+  },
+  "characteristics": [
+    {
+      "key": "UNDERSTANDABILITY",
+      "name": "Understandability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "MAINTAINABILITY",
+      "name": "Maintainability"
+    },
+    {
+      "key": "TIME_ZONE_RELATED_PORTABILITY",
+      "name": "Time zone related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "READABILITY",
+      "name": "Readability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "SECURITY_FEATURES",
+      "name": "Security features",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_RELIABILITY",
+      "name": "Architecture related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "OS_RELATED_PORTABILITY",
+      "name": "OS related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "EXCEPTION_HANDLING",
+      "name": "Exception handling",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_CHANGEABILITY",
+      "name": "Logic related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "SOFTWARE_RELATED_PORTABILITY",
+      "name": "Software related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
+      "name": "Input validation and representation",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "LANGUAGE_RELATED_PORTABILITY",
+      "name": "Language related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "ERRORS",
+      "name": "Errors",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "SECURITY",
+      "name": "Security"
+    },
+    {
+      "key": "RELIABILITY",
+      "name": "Reliability"
+    },
+    {
+      "key": "PORTABILITY",
+      "name": "Portability"
+    },
+    {
+      "key": "HARDWARE_RELATED_PORTABILITY",
+      "name": "Hardware related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "SYNCHRONIZATION_RELIABILITY",
+      "name": "Synchronization related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "TRANSPORTABILITY",
+      "name": "Transportability",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "COMPILER_RELATED_PORTABILITY",
+      "name": "Compiler related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "RESOURCE_RELIABILITY",
+      "name": "Resource",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "CPU_EFFICIENCY",
+      "name": "Processor use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "EFFICIENCY",
+      "name": "Efficiency"
+    },
+    {
+      "key": "CHANGEABILITY",
+      "name": "Changeability"
+    },
+    {
+      "key": "DATA_CHANGEABILITY",
+      "name": "Data related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "API_ABUSE",
+      "name": "API abuse",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_CHANGEABILITY",
+      "name": "Architecture related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "UNIT_TESTS",
+      "name": "Unit tests",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "INSTRUCTION_RELIABILITY",
+      "name": "Instruction related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "REUSABILITY",
+      "name": "Reusability"
+    },
+    {
+      "key": "MODULARITY",
+      "name": "Modularity",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "UNIT_TESTABILITY",
+      "name": "Unit level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "TESTABILITY",
+      "name": "Testability"
+    },
+    {
+      "key": "INTEGRATION_TESTABILITY",
+      "name": "Integration level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "NETWORK_USE",
+      "name": "Network use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "MEMORY_EFFICIENCY",
+      "name": "Memory use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "DATA_RELIABILITY",
+      "name": "Data related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "FAULT_TOLERANCE",
+      "name": "Fault tolerance",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_RELIABILITY",
+      "name": "Logic related reliability",
+      "parent": "RELIABILITY"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-show-details/search.json b/server/sonar-web/src/test/json/coding-rules-page-should-show-details/search.json
new file mode 100644 (file)
index 0000000..b5a6bc2
--- /dev/null
@@ -0,0 +1,171 @@
+{
+  "total": 10,
+  "p": 1,
+  "ps": 200,
+  "rules": [
+    {
+      "key": "squid:S1181",
+      "name": "Throwable and Error classes should not be caught",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "error-handling"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1849",
+      "name": "\"Iterator.hasNext()\" should not call \"Iterator.next()\"",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1844",
+      "name": "\"Object.wait(...)\" should never be called on objects that implement \"java.util.concurrent.locks.Condition\"",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug",
+        "pitfall"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S2258",
+      "name": "\"javax.crypto.NullCipher\" should not be used for anything other than testing",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S2251",
+      "name": "A \"for\" loop update clause should move the counter in the right direction",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:ObjectFinalizeOverridenCallsSuperFinalizeCheck",
+      "name": "super.finalize() should be called at the end of Object.finalize() implementations",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1143",
+      "name": "Return statements should not occur in finally blocks",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1206",
+      "name": "\"equals(Object obj)\" and \"hashCode()\" should be overridden in pairs",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1451",
+      "name": "Copyright and license headers should be defined in all source files",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "squid:S1697",
+      "name": "Short-circuit logic should be used to prevent null pointer dereferences in conditionals",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "bug",
+          "count": 7
+        },
+        {
+          "val": "convention",
+          "count": 1
+        },
+        {
+          "val": "cwe",
+          "count": 1
+        },
+        {
+          "val": "error-handling",
+          "count": 1
+        },
+        {
+          "val": "owasp-top10",
+          "count": 1
+        },
+        {
+          "val": "pitfall",
+          "count": 1
+        },
+        {
+          "val": "security",
+          "count": 1
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 10
+        },
+        {
+          "val": "js",
+          "count": 6
+        },
+        {
+          "val": "php",
+          "count": 2
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 10
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-show-details/show.json b/server/sonar-web/src/test/json/coding-rules-page-should-show-details/show.json
new file mode 100644 (file)
index 0000000..274b587
--- /dev/null
@@ -0,0 +1,76 @@
+{
+  "rule": {
+    "key": "squid:S1181",
+    "repo": "squid",
+    "name": "Throwable and Error classes should not be caught",
+    "createdAt": "2013-08-09T14:40:54+0200",
+    "severity": "BLOCKER",
+    "status": "READY",
+    "internalKey": "S1181",
+    "isTemplate": false,
+    "tags": [],
+    "sysTags": [
+      "error-handling"
+    ],
+    "lang": "java",
+    "langName": "Java",
+    "htmlDesc": "<p>\n<code>Throwable</code> is the superclass of all errors and exceptions in Java.\n<code>Error</code> is the superclass of all errors which are not meant to be caught by applications.\n</p>\n\n<p>\nCatching either <code>Throwable</code> or <code>Error</code> will also catch <code>OutOfMemoryError</code> or <code>InternalError</code> from which an application should not attempt to recover.\n</p>\n\n<p>Only <code>Exception</code> and its subclasses should be caught.</p>\n\n<h2>Noncompliant Code Example</h2>\n\n<pre>\ntry { /* ... */ } catch (Throwable t) { /* ... */ }\ntry { /* ... */ } catch (Error e) { /* ... */ } \n</pre>\n\n<h2>Compliant Solution</h2>\n\n<pre>\ntry { /* ... */ } catch (Exception e) { /* ... */ }  \ntry { /* ... */ } catch (RuntimeException e) { /* ... */ }  \ntry { /* ... */ } catch (MyException e) { /* ... */ }  \n</pre>",
+    "defaultDebtChar": "RELIABILITY",
+    "defaultDebtSubChar": "EXCEPTION_HANDLING",
+    "debtChar": "RELIABILITY",
+    "debtSubChar": "EXCEPTION_HANDLING",
+    "debtCharName": "Reliability",
+    "debtSubCharName": "Exception handling",
+    "defaultDebtRemFnType": "CONSTANT_ISSUE",
+    "defaultDebtRemFnOffset": "20min",
+    "debtOverloaded": true,
+    "debtRemFnType": "LINEAR",
+    "debtRemFnCoeff": "20min",
+    "params": [
+      {
+        "key": "max",
+        "htmlDesc": "Maximum authorized number of parameters",
+        "type": "INTEGER",
+        "defaultValue": "7"
+      }
+    ]
+  },
+  "actives": [
+    {
+      "qProfile": "java-top-profile-without-formatting-conventions-50037",
+      "inherit": "NONE",
+      "severity": "BLOCKER",
+      "params": []
+    },
+    {
+      "qProfile": "java-default-with-sonarsource-conventions-27339",
+      "inherit": "INHERITED",
+      "severity": "BLOCKER",
+      "params": []
+    },
+    {
+      "qProfile": "java-for-sq-java-plugin-only-92289",
+      "inherit": "INHERITED",
+      "severity": "BLOCKER",
+      "params": []
+    },
+    {
+      "qProfile": "java-for-sq-only-95381",
+      "inherit": "INHERITED",
+      "severity": "BLOCKER",
+      "params": []
+    },
+    {
+      "qProfile": "java-default-with-mojo-conventions-49307",
+      "inherit": "INHERITED",
+      "severity": "BLOCKER",
+      "params": []
+    },
+    {
+      "qProfile": "java-sonar-way-80423",
+      "inherit": "NONE",
+      "severity": "BLOCKER",
+      "params": []
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-show-empty-list/app.json b/server/sonar-web/src/test/json/coding-rules-page-should-show-empty-list/app.json
new file mode 100644 (file)
index 0000000..0eb43bc
--- /dev/null
@@ -0,0 +1,316 @@
+{
+  "canWrite": false,
+  "qualityprofiles": [
+    {
+      "key": "java-default-with-mojo-conventions-49307",
+      "name": "Default - Maven Conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-default-with-sonarsource-conventions-27339",
+      "name": "Default - SonarSource conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-top-profile-without-formatting-conventions-50037",
+      "name": "Default - Top",
+      "lang": "java"
+    },
+    {
+      "key": "java-findbugs-14954",
+      "name": "FindBugs",
+      "lang": "java"
+    },
+    {
+      "key": "java-for-sq-java-plugin-only-92289",
+      "name": "For SQ Java Plugin Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "java-for-sq-only-95381",
+      "name": "For SQ Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "php-psr-2-06315",
+      "name": "PSR-2",
+      "lang": "php"
+    },
+    {
+      "key": "java-sonar-way-80423",
+      "name": "Sonar way",
+      "lang": "java"
+    },
+    {
+      "key": "js-sonar-way",
+      "name": "Sonar way",
+      "lang": "js"
+    },
+    {
+      "key": "php-sonar-way-05548",
+      "name": "Sonar way",
+      "lang": "php"
+    },
+    {
+      "key": "py-sonar-way-80265",
+      "name": "Sonar way",
+      "lang": "py"
+    },
+    {
+      "key": "java-without-findbugs",
+      "name": "Without Findbugs",
+      "lang": "java"
+    }
+  ],
+  "languages": {
+    "py": "Python",
+    "js": "JavaScript",
+    "php": "PHP",
+    "java": "Java"
+  },
+  "repositories": [
+    {
+      "key": "common-java",
+      "name": "Common SonarQube",
+      "language": "java"
+    },
+    {
+      "key": "common-js",
+      "name": "Common SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "common-php",
+      "name": "Common SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "common-py",
+      "name": "Common SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "Pylint",
+      "name": "Pylint",
+      "language": "py"
+    },
+    {
+      "key": "javascript",
+      "name": "SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "php",
+      "name": "SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "python",
+      "name": "SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "squid",
+      "name": "SonarQube",
+      "language": "java"
+    }
+  ],
+  "statuses": {
+    "BETA": "Beta",
+    "DEPRECATED": "Deprecated",
+    "READY": "Ready"
+  },
+  "characteristics": [
+    {
+      "key": "UNDERSTANDABILITY",
+      "name": "Understandability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "MAINTAINABILITY",
+      "name": "Maintainability"
+    },
+    {
+      "key": "TIME_ZONE_RELATED_PORTABILITY",
+      "name": "Time zone related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "READABILITY",
+      "name": "Readability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "SECURITY_FEATURES",
+      "name": "Security features",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_RELIABILITY",
+      "name": "Architecture related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "OS_RELATED_PORTABILITY",
+      "name": "OS related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "EXCEPTION_HANDLING",
+      "name": "Exception handling",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_CHANGEABILITY",
+      "name": "Logic related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "SOFTWARE_RELATED_PORTABILITY",
+      "name": "Software related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
+      "name": "Input validation and representation",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "LANGUAGE_RELATED_PORTABILITY",
+      "name": "Language related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "ERRORS",
+      "name": "Errors",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "SECURITY",
+      "name": "Security"
+    },
+    {
+      "key": "RELIABILITY",
+      "name": "Reliability"
+    },
+    {
+      "key": "PORTABILITY",
+      "name": "Portability"
+    },
+    {
+      "key": "HARDWARE_RELATED_PORTABILITY",
+      "name": "Hardware related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "SYNCHRONIZATION_RELIABILITY",
+      "name": "Synchronization related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "TRANSPORTABILITY",
+      "name": "Transportability",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "COMPILER_RELATED_PORTABILITY",
+      "name": "Compiler related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "RESOURCE_RELIABILITY",
+      "name": "Resource",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "CPU_EFFICIENCY",
+      "name": "Processor use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "EFFICIENCY",
+      "name": "Efficiency"
+    },
+    {
+      "key": "CHANGEABILITY",
+      "name": "Changeability"
+    },
+    {
+      "key": "DATA_CHANGEABILITY",
+      "name": "Data related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "API_ABUSE",
+      "name": "API abuse",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_CHANGEABILITY",
+      "name": "Architecture related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "UNIT_TESTS",
+      "name": "Unit tests",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "INSTRUCTION_RELIABILITY",
+      "name": "Instruction related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "REUSABILITY",
+      "name": "Reusability"
+    },
+    {
+      "key": "MODULARITY",
+      "name": "Modularity",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "UNIT_TESTABILITY",
+      "name": "Unit level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "TESTABILITY",
+      "name": "Testability"
+    },
+    {
+      "key": "INTEGRATION_TESTABILITY",
+      "name": "Integration level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "NETWORK_USE",
+      "name": "Network use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "MEMORY_EFFICIENCY",
+      "name": "Memory use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "DATA_RELIABILITY",
+      "name": "Data related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "FAULT_TOLERANCE",
+      "name": "Fault tolerance",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_RELIABILITY",
+      "name": "Logic related reliability",
+      "parent": "RELIABILITY"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-show-empty-list/search.json b/server/sonar-web/src/test/json/coding-rules-page-should-show-empty-list/search.json
new file mode 100644 (file)
index 0000000..f43d117
--- /dev/null
@@ -0,0 +1,7 @@
+{
+  "total": 0,
+  "p": 1,
+  "ps": 200,
+  "rules": [],
+  "facets": []
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-show-rule-issues/app.json b/server/sonar-web/src/test/json/coding-rules-page-should-show-rule-issues/app.json
new file mode 100644 (file)
index 0000000..0eb43bc
--- /dev/null
@@ -0,0 +1,316 @@
+{
+  "canWrite": false,
+  "qualityprofiles": [
+    {
+      "key": "java-default-with-mojo-conventions-49307",
+      "name": "Default - Maven Conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-default-with-sonarsource-conventions-27339",
+      "name": "Default - SonarSource conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-top-profile-without-formatting-conventions-50037",
+      "name": "Default - Top",
+      "lang": "java"
+    },
+    {
+      "key": "java-findbugs-14954",
+      "name": "FindBugs",
+      "lang": "java"
+    },
+    {
+      "key": "java-for-sq-java-plugin-only-92289",
+      "name": "For SQ Java Plugin Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "java-for-sq-only-95381",
+      "name": "For SQ Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "php-psr-2-06315",
+      "name": "PSR-2",
+      "lang": "php"
+    },
+    {
+      "key": "java-sonar-way-80423",
+      "name": "Sonar way",
+      "lang": "java"
+    },
+    {
+      "key": "js-sonar-way",
+      "name": "Sonar way",
+      "lang": "js"
+    },
+    {
+      "key": "php-sonar-way-05548",
+      "name": "Sonar way",
+      "lang": "php"
+    },
+    {
+      "key": "py-sonar-way-80265",
+      "name": "Sonar way",
+      "lang": "py"
+    },
+    {
+      "key": "java-without-findbugs",
+      "name": "Without Findbugs",
+      "lang": "java"
+    }
+  ],
+  "languages": {
+    "py": "Python",
+    "js": "JavaScript",
+    "php": "PHP",
+    "java": "Java"
+  },
+  "repositories": [
+    {
+      "key": "common-java",
+      "name": "Common SonarQube",
+      "language": "java"
+    },
+    {
+      "key": "common-js",
+      "name": "Common SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "common-php",
+      "name": "Common SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "common-py",
+      "name": "Common SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "Pylint",
+      "name": "Pylint",
+      "language": "py"
+    },
+    {
+      "key": "javascript",
+      "name": "SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "php",
+      "name": "SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "python",
+      "name": "SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "squid",
+      "name": "SonarQube",
+      "language": "java"
+    }
+  ],
+  "statuses": {
+    "BETA": "Beta",
+    "DEPRECATED": "Deprecated",
+    "READY": "Ready"
+  },
+  "characteristics": [
+    {
+      "key": "UNDERSTANDABILITY",
+      "name": "Understandability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "MAINTAINABILITY",
+      "name": "Maintainability"
+    },
+    {
+      "key": "TIME_ZONE_RELATED_PORTABILITY",
+      "name": "Time zone related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "READABILITY",
+      "name": "Readability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "SECURITY_FEATURES",
+      "name": "Security features",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_RELIABILITY",
+      "name": "Architecture related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "OS_RELATED_PORTABILITY",
+      "name": "OS related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "EXCEPTION_HANDLING",
+      "name": "Exception handling",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_CHANGEABILITY",
+      "name": "Logic related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "SOFTWARE_RELATED_PORTABILITY",
+      "name": "Software related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
+      "name": "Input validation and representation",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "LANGUAGE_RELATED_PORTABILITY",
+      "name": "Language related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "ERRORS",
+      "name": "Errors",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "SECURITY",
+      "name": "Security"
+    },
+    {
+      "key": "RELIABILITY",
+      "name": "Reliability"
+    },
+    {
+      "key": "PORTABILITY",
+      "name": "Portability"
+    },
+    {
+      "key": "HARDWARE_RELATED_PORTABILITY",
+      "name": "Hardware related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "SYNCHRONIZATION_RELIABILITY",
+      "name": "Synchronization related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "TRANSPORTABILITY",
+      "name": "Transportability",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "COMPILER_RELATED_PORTABILITY",
+      "name": "Compiler related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "RESOURCE_RELIABILITY",
+      "name": "Resource",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "CPU_EFFICIENCY",
+      "name": "Processor use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "EFFICIENCY",
+      "name": "Efficiency"
+    },
+    {
+      "key": "CHANGEABILITY",
+      "name": "Changeability"
+    },
+    {
+      "key": "DATA_CHANGEABILITY",
+      "name": "Data related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "API_ABUSE",
+      "name": "API abuse",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_CHANGEABILITY",
+      "name": "Architecture related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "UNIT_TESTS",
+      "name": "Unit tests",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "INSTRUCTION_RELIABILITY",
+      "name": "Instruction related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "REUSABILITY",
+      "name": "Reusability"
+    },
+    {
+      "key": "MODULARITY",
+      "name": "Modularity",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "UNIT_TESTABILITY",
+      "name": "Unit level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "TESTABILITY",
+      "name": "Testability"
+    },
+    {
+      "key": "INTEGRATION_TESTABILITY",
+      "name": "Integration level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "NETWORK_USE",
+      "name": "Network use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "MEMORY_EFFICIENCY",
+      "name": "Memory use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "DATA_RELIABILITY",
+      "name": "Data related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "FAULT_TOLERANCE",
+      "name": "Fault tolerance",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_RELIABILITY",
+      "name": "Logic related reliability",
+      "parent": "RELIABILITY"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-show-rule-issues/issues-search.json b/server/sonar-web/src/test/json/coding-rules-page-should-show-rule-issues/issues-search.json
new file mode 100644 (file)
index 0000000..511b928
--- /dev/null
@@ -0,0 +1,51 @@
+{
+  "total": 7,
+  "p": 1,
+  "ps": 1,
+  "projects": [
+    {
+      "uuid": "3b22f38e-ad68-4792-9791-1435584a686c",
+      "key": "org.codehaus.sonar.runner:sonar-runner",
+      "id": 17226,
+      "qualifier": "TRK",
+      "name": "SonarQube Runner",
+      "longName": "SonarQube Runner"
+    },
+    {
+      "uuid": "69e57151-be0d-4157-adff-c06741d88879",
+      "key": "org.codehaus.sonar:sonar",
+      "id": 2865,
+      "qualifier": "TRK",
+      "name": "SonarQube",
+      "longName": "SonarQube"
+    }
+  ],
+  "components": [],
+  "issues": [],
+  "rules": [],
+  "users": [],
+  "languages": [],
+  "maxResultsReached": false,
+  "paging": {
+    "pageIndex": 1,
+    "pageSize": 1,
+    "total": 7,
+    "fTotal": "7",
+    "pages": 7
+  },
+  "facets": [
+    {
+      "property": "projectUuids",
+      "values": [
+        {
+          "val": "69e57151-be0d-4157-adff-c06741d88879",
+          "count": 2
+        },
+        {
+          "val": "3b22f38e-ad68-4792-9791-1435584a686c",
+          "count": 1
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-show-rule-issues/search.json b/server/sonar-web/src/test/json/coding-rules-page-should-show-rule-issues/search.json
new file mode 100644 (file)
index 0000000..558be10
--- /dev/null
@@ -0,0 +1,47 @@
+{
+  "total": 1,
+  "p": 1,
+  "ps": 200,
+  "rules": [
+    {
+      "key": "squid:S2096",
+      "name": "\"main\" should not \"throw\" anything",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "bug"
+      ],
+      "tags": [],
+      "status": "READY"
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "bug",
+          "count": 1
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 1
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 1
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules-page-should-show-rule-issues/show.json b/server/sonar-web/src/test/json/coding-rules-page-should-show-rule-issues/show.json
new file mode 100644 (file)
index 0000000..274b587
--- /dev/null
@@ -0,0 +1,76 @@
+{
+  "rule": {
+    "key": "squid:S1181",
+    "repo": "squid",
+    "name": "Throwable and Error classes should not be caught",
+    "createdAt": "2013-08-09T14:40:54+0200",
+    "severity": "BLOCKER",
+    "status": "READY",
+    "internalKey": "S1181",
+    "isTemplate": false,
+    "tags": [],
+    "sysTags": [
+      "error-handling"
+    ],
+    "lang": "java",
+    "langName": "Java",
+    "htmlDesc": "<p>\n<code>Throwable</code> is the superclass of all errors and exceptions in Java.\n<code>Error</code> is the superclass of all errors which are not meant to be caught by applications.\n</p>\n\n<p>\nCatching either <code>Throwable</code> or <code>Error</code> will also catch <code>OutOfMemoryError</code> or <code>InternalError</code> from which an application should not attempt to recover.\n</p>\n\n<p>Only <code>Exception</code> and its subclasses should be caught.</p>\n\n<h2>Noncompliant Code Example</h2>\n\n<pre>\ntry { /* ... */ } catch (Throwable t) { /* ... */ }\ntry { /* ... */ } catch (Error e) { /* ... */ } \n</pre>\n\n<h2>Compliant Solution</h2>\n\n<pre>\ntry { /* ... */ } catch (Exception e) { /* ... */ }  \ntry { /* ... */ } catch (RuntimeException e) { /* ... */ }  \ntry { /* ... */ } catch (MyException e) { /* ... */ }  \n</pre>",
+    "defaultDebtChar": "RELIABILITY",
+    "defaultDebtSubChar": "EXCEPTION_HANDLING",
+    "debtChar": "RELIABILITY",
+    "debtSubChar": "EXCEPTION_HANDLING",
+    "debtCharName": "Reliability",
+    "debtSubCharName": "Exception handling",
+    "defaultDebtRemFnType": "CONSTANT_ISSUE",
+    "defaultDebtRemFnOffset": "20min",
+    "debtOverloaded": true,
+    "debtRemFnType": "LINEAR",
+    "debtRemFnCoeff": "20min",
+    "params": [
+      {
+        "key": "max",
+        "htmlDesc": "Maximum authorized number of parameters",
+        "type": "INTEGER",
+        "defaultValue": "7"
+      }
+    ]
+  },
+  "actives": [
+    {
+      "qProfile": "java-top-profile-without-formatting-conventions-50037",
+      "inherit": "NONE",
+      "severity": "BLOCKER",
+      "params": []
+    },
+    {
+      "qProfile": "java-default-with-sonarsource-conventions-27339",
+      "inherit": "INHERITED",
+      "severity": "BLOCKER",
+      "params": []
+    },
+    {
+      "qProfile": "java-for-sq-java-plugin-only-92289",
+      "inherit": "INHERITED",
+      "severity": "BLOCKER",
+      "params": []
+    },
+    {
+      "qProfile": "java-for-sq-only-95381",
+      "inherit": "INHERITED",
+      "severity": "BLOCKER",
+      "params": []
+    },
+    {
+      "qProfile": "java-default-with-mojo-conventions-49307",
+      "inherit": "INHERITED",
+      "severity": "BLOCKER",
+      "params": []
+    },
+    {
+      "qProfile": "java-sonar-way-80423",
+      "inherit": "NONE",
+      "severity": "BLOCKER",
+      "params": []
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules/app.json b/server/sonar-web/src/test/json/coding-rules/app.json
new file mode 100644 (file)
index 0000000..0eb43bc
--- /dev/null
@@ -0,0 +1,316 @@
+{
+  "canWrite": false,
+  "qualityprofiles": [
+    {
+      "key": "java-default-with-mojo-conventions-49307",
+      "name": "Default - Maven Conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-default-with-sonarsource-conventions-27339",
+      "name": "Default - SonarSource conventions",
+      "lang": "java",
+      "parentKey": "java-top-profile-without-formatting-conventions-50037"
+    },
+    {
+      "key": "java-top-profile-without-formatting-conventions-50037",
+      "name": "Default - Top",
+      "lang": "java"
+    },
+    {
+      "key": "java-findbugs-14954",
+      "name": "FindBugs",
+      "lang": "java"
+    },
+    {
+      "key": "java-for-sq-java-plugin-only-92289",
+      "name": "For SQ Java Plugin Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "java-for-sq-only-95381",
+      "name": "For SQ Only",
+      "lang": "java",
+      "parentKey": "java-default-with-sonarsource-conventions-27339"
+    },
+    {
+      "key": "php-psr-2-06315",
+      "name": "PSR-2",
+      "lang": "php"
+    },
+    {
+      "key": "java-sonar-way-80423",
+      "name": "Sonar way",
+      "lang": "java"
+    },
+    {
+      "key": "js-sonar-way",
+      "name": "Sonar way",
+      "lang": "js"
+    },
+    {
+      "key": "php-sonar-way-05548",
+      "name": "Sonar way",
+      "lang": "php"
+    },
+    {
+      "key": "py-sonar-way-80265",
+      "name": "Sonar way",
+      "lang": "py"
+    },
+    {
+      "key": "java-without-findbugs",
+      "name": "Without Findbugs",
+      "lang": "java"
+    }
+  ],
+  "languages": {
+    "py": "Python",
+    "js": "JavaScript",
+    "php": "PHP",
+    "java": "Java"
+  },
+  "repositories": [
+    {
+      "key": "common-java",
+      "name": "Common SonarQube",
+      "language": "java"
+    },
+    {
+      "key": "common-js",
+      "name": "Common SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "common-php",
+      "name": "Common SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "common-py",
+      "name": "Common SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "Pylint",
+      "name": "Pylint",
+      "language": "py"
+    },
+    {
+      "key": "javascript",
+      "name": "SonarQube",
+      "language": "js"
+    },
+    {
+      "key": "php",
+      "name": "SonarQube",
+      "language": "php"
+    },
+    {
+      "key": "python",
+      "name": "SonarQube",
+      "language": "py"
+    },
+    {
+      "key": "squid",
+      "name": "SonarQube",
+      "language": "java"
+    }
+  ],
+  "statuses": {
+    "BETA": "Beta",
+    "DEPRECATED": "Deprecated",
+    "READY": "Ready"
+  },
+  "characteristics": [
+    {
+      "key": "UNDERSTANDABILITY",
+      "name": "Understandability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "MAINTAINABILITY",
+      "name": "Maintainability"
+    },
+    {
+      "key": "TIME_ZONE_RELATED_PORTABILITY",
+      "name": "Time zone related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "READABILITY",
+      "name": "Readability",
+      "parent": "MAINTAINABILITY"
+    },
+    {
+      "key": "SECURITY_FEATURES",
+      "name": "Security features",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_RELIABILITY",
+      "name": "Architecture related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "OS_RELATED_PORTABILITY",
+      "name": "OS related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "EXCEPTION_HANDLING",
+      "name": "Exception handling",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_CHANGEABILITY",
+      "name": "Logic related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "SOFTWARE_RELATED_PORTABILITY",
+      "name": "Software related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "INPUT_VALIDATION_AND_REPRESENTATION",
+      "name": "Input validation and representation",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "LANGUAGE_RELATED_PORTABILITY",
+      "name": "Language related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "ERRORS",
+      "name": "Errors",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "SECURITY",
+      "name": "Security"
+    },
+    {
+      "key": "RELIABILITY",
+      "name": "Reliability"
+    },
+    {
+      "key": "PORTABILITY",
+      "name": "Portability"
+    },
+    {
+      "key": "HARDWARE_RELATED_PORTABILITY",
+      "name": "Hardware related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "SYNCHRONIZATION_RELIABILITY",
+      "name": "Synchronization related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "TRANSPORTABILITY",
+      "name": "Transportability",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "COMPILER_RELATED_PORTABILITY",
+      "name": "Compiler related portability",
+      "parent": "PORTABILITY"
+    },
+    {
+      "key": "RESOURCE_RELIABILITY",
+      "name": "Resource",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "CPU_EFFICIENCY",
+      "name": "Processor use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "EFFICIENCY",
+      "name": "Efficiency"
+    },
+    {
+      "key": "CHANGEABILITY",
+      "name": "Changeability"
+    },
+    {
+      "key": "DATA_CHANGEABILITY",
+      "name": "Data related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "API_ABUSE",
+      "name": "API abuse",
+      "parent": "SECURITY"
+    },
+    {
+      "key": "ARCHITECTURE_CHANGEABILITY",
+      "name": "Architecture related changeability",
+      "parent": "CHANGEABILITY"
+    },
+    {
+      "key": "UNIT_TESTS",
+      "name": "Unit tests",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "INSTRUCTION_RELIABILITY",
+      "name": "Instruction related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "REUSABILITY",
+      "name": "Reusability"
+    },
+    {
+      "key": "MODULARITY",
+      "name": "Modularity",
+      "parent": "REUSABILITY"
+    },
+    {
+      "key": "UNIT_TESTABILITY",
+      "name": "Unit level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "TESTABILITY",
+      "name": "Testability"
+    },
+    {
+      "key": "INTEGRATION_TESTABILITY",
+      "name": "Integration level testability",
+      "parent": "TESTABILITY"
+    },
+    {
+      "key": "NETWORK_USE",
+      "name": "Network use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "MEMORY_EFFICIENCY",
+      "name": "Memory use",
+      "parent": "EFFICIENCY"
+    },
+    {
+      "key": "DATA_RELIABILITY",
+      "name": "Data related reliability",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "FAULT_TOLERANCE",
+      "name": "Fault tolerance",
+      "parent": "RELIABILITY"
+    },
+    {
+      "key": "LOGIC_RELIABILITY",
+      "name": "Logic related reliability",
+      "parent": "RELIABILITY"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/coding-rules/search.json b/server/sonar-web/src/test/json/coding-rules/search.json
new file mode 100644 (file)
index 0000000..c17c58d
--- /dev/null
@@ -0,0 +1,371 @@
+{
+  "total": 609,
+  "p": 1,
+  "ps": 25,
+  "rules": [
+    {
+      "key": "squid:S2077",
+      "name": "Values passed to SQL commands should be sanitized",
+      "lang": "java",
+      "langName": "Java",
+      "sysTags": [
+        "cwe",
+        "owasp-top10",
+        "security",
+        "sql"
+      ],
+      "tags": [
+        "custom-tag"
+      ]
+    },
+    {
+      "key": "php:S107",
+      "name": "Functions should not have too many parameters",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1192",
+      "name": "String literals should not be duplicated",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1145",
+      "name": "\"if\" statement conditions should not always evaluate to \"true\" or to \"false\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "bug",
+        "cwe",
+        "security"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S108",
+      "name": "Nested blocks of code should not be left empty",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1301",
+      "name": "\"switch\" statements should have at least 3 \"case\" clauses",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S103",
+      "name": "Lines should not be too long",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1144",
+      "name": "Unused private method should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S105",
+      "name": "Tabulation characters should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1481",
+      "name": "Unused local variables should be removed",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "unused"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1142",
+      "name": "Functions should not contain too many return statements",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S104",
+      "name": "Files should not have too many lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1605",
+      "name": "PHP 4 style calls to parent constructors should not be used in PHP5 \"__construct\" functions",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1448",
+      "name": "Classes should not have too many methods",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1603",
+      "name": "PHP 4 constructor declarations should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1779",
+      "name": "Only LF character (Unix-like) should be used to end lines",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention",
+        "psr2"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1185",
+      "name": "Overriding methods should do more than simply call the same method in the super class",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [],
+      "tags": []
+    },
+    {
+      "key": "php:S1600",
+      "name": "Deprecated predefined variables should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1109",
+      "name": "A close curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2001",
+      "name": "Functions deprecated in PHP 5 should not be used",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "obsolete"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2002",
+      "name": "Errors should not be silenced",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "pitfail"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S2000",
+      "name": "Files should not contain characters before \"<?php\"",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "user-experience"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1105",
+      "name": "An open curly brace should be located at the end of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1200",
+      "name": "Classes should not be coupled to too many other classes (Single Responsibility Principle)",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "brain-overload"
+      ],
+      "tags": []
+    },
+    {
+      "key": "php:S1106",
+      "name": "An open curly brace should be located at the beginning of a line",
+      "lang": "php",
+      "langName": "PHP",
+      "sysTags": [
+        "convention"
+      ],
+      "tags": []
+    }
+  ],
+  "facets": [
+    {
+      "property": "tags",
+      "values": [
+        {
+          "val": "convention",
+          "count": 67
+        },
+        {
+          "val": "brain-overload",
+          "count": 36
+        },
+        {
+          "val": "bug",
+          "count": 36
+        },
+        {
+          "val": "cwe",
+          "count": 17
+        },
+        {
+          "val": "unused",
+          "count": 16
+        },
+        {
+          "val": "security",
+          "count": 14
+        },
+        {
+          "val": "pitfall",
+          "count": 12
+        },
+        {
+          "val": "psr2",
+          "count": 12
+        },
+        {
+          "val": "error-handling",
+          "count": 11
+        },
+        {
+          "val": "pitfail",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "languages",
+      "values": [
+        {
+          "val": "java",
+          "count": 212
+        },
+        {
+          "val": "py",
+          "count": 212
+        },
+        {
+          "val": "php",
+          "count": 103
+        },
+        {
+          "val": "js",
+          "count": 77
+        }
+      ]
+    },
+    {
+      "property": "repositories",
+      "values": [
+        {
+          "val": "squid",
+          "count": 206
+        },
+        {
+          "val": "Pylint",
+          "count": 180
+        },
+        {
+          "val": "php",
+          "count": 97
+        },
+        {
+          "val": "javascript",
+          "count": 73
+        },
+        {
+          "val": "python",
+          "count": 28
+        },
+        {
+          "val": "common-java",
+          "count": 6
+        },
+        {
+          "val": "common-php",
+          "count": 6
+        },
+        {
+          "val": "manual",
+          "count": 5
+        },
+        {
+          "val": "common-js",
+          "count": 4
+        },
+        {
+          "val": "common-py",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/design-spec/dependencies.json b/server/sonar-web/src/test/json/design-spec/dependencies.json
new file mode 100644 (file)
index 0000000..7f23c19
--- /dev/null
@@ -0,0 +1,80 @@
+[
+  {
+    "id": 14879226,
+    "fi": 8354,
+    "ti": 6955,
+    "u": "USES",
+    "w": 1,
+    "fk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
+    "fn": "src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
+    "fq": "FIL",
+    "tk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/metrics/BusinessRuleCounter.java",
+    "tn": "src/main/java/com/maif/sonar/cobol/metrics/BusinessRuleCounter.java",
+    "tq": "FIL"
+  },
+  {
+    "id": 14879225,
+    "fi": 8354,
+    "ti": 6956,
+    "u": "USES",
+    "w": 1,
+    "fk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
+    "fn": "src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
+    "fq": "FIL",
+    "tk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/metrics/ExternalizedRuleCallCounter.java",
+    "tn": "src/main/java/com/maif/sonar/cobol/metrics/ExternalizedRuleCallCounter.java",
+    "tq": "FIL"
+  },
+  {
+    "id": 14879228,
+    "fi": 8354,
+    "ti": 6957,
+    "u": "USES",
+    "w": 1,
+    "fk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
+    "fn": "src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
+    "fq": "FIL",
+    "tk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/metrics/IadUseDetector.java",
+    "tn": "src/main/java/com/maif/sonar/cobol/metrics/IadUseDetector.java",
+    "tq": "FIL"
+  },
+  {
+    "id": 14879229,
+    "fi": 8354,
+    "ti": 8356,
+    "u": "USES",
+    "w": 1,
+    "fk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
+    "fn": "src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
+    "fq": "FIL",
+    "tk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/metrics/Ids2AndIadMatrixDetector.java",
+    "tn": "src/main/java/com/maif/sonar/cobol/metrics/Ids2AndIadMatrixDetector.java",
+    "tq": "FIL"
+  },
+  {
+    "id": 14879227,
+    "fi": 8354,
+    "ti": 6958,
+    "u": "USES",
+    "w": 1,
+    "fk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
+    "fn": "src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
+    "fq": "FIL",
+    "tk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/metrics/Ids2UseDetector.java",
+    "tn": "src/main/java/com/maif/sonar/cobol/metrics/Ids2UseDetector.java",
+    "tq": "FIL"
+  },
+  {
+    "id": 14879224,
+    "fi": 8354,
+    "ti": 12194,
+    "u": "USES",
+    "w": 1,
+    "fk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
+    "fn": "src/main/java/com/maif/sonar/cobol/api/MaifCobolMeasureProvider.java",
+    "fq": "FIL",
+    "tk": "com.maif.sonar:maif-cobol-plugin:src/main/java/com/maif/sonar/cobol/metrics/TableMetricsVisitor.java",
+    "tn": "src/main/java/com/maif/sonar/cobol/metrics/TableMetricsVisitor.java",
+    "tq": "FIL"
+  }
+]
diff --git a/server/sonar-web/src/test/json/design-spec/resources.json b/server/sonar-web/src/test/json/design-spec/resources.json
new file mode 100644 (file)
index 0000000..3d06975
--- /dev/null
@@ -0,0 +1,20 @@
+[
+  {
+    "id": 6924,
+    "key": "com.maif.sonar:maif-cobol-plugin",
+    "name": "MAIF :: Cobol plugin",
+    "scope": "PRJ",
+    "qualifier": "TRK",
+    "date": "2014-07-21T23:04:05+0600",
+    "creationDate": null,
+    "lname": "MAIF :: Cobol plugin",
+    "version": "2.7-SNAPSHOT",
+    "description": "",
+    "msr": [
+      {
+        "key": "dsm",
+        "data": "[{\"i\":24815,\"n\":\"src/test/java/com/maif/sonar/cobol/metrics\",\"q\":\"DIR\",\"v\":[{},{},{},{\"i\":14879223,\"w\":6},{},{}]},{\"i\":26762,\"n\":\"src/main/java/com/maif/sonar/cobol/plugin\",\"q\":\"DIR\",\"v\":[{},{},{},{},{},{}]},{\"i\":26758,\"n\":\"src/main/java/com/maif/sonar/cobol\",\"q\":\"DIR\",\"v\":[{\"i\":14879242,\"w\":1},{\"i\":14879258,\"w\":114},{},{},{},{}]},{\"i\":33690,\"n\":\"src/test/java/com/maif/sonar/cobol/api\",\"q\":\"DIR\",\"v\":[{\"i\":14879244,\"w\":6},{\"i\":14879373,\"w\":2},{\"i\":14879221,\"w\":1},{},{},{}]},{\"i\":24814,\"n\":\"src/test/java/com/maif/sonar/cobol/ids2\",\"q\":\"DIR\",\"v\":[{\"i\":14879237,\"w\":2},{},{\"i\":14879139,\"w\":24},{},{},{}]},{\"i\":24816,\"n\":\"src/test/java/com/maif/sonar/cobol/repository\",\"q\":\"DIR\",\"v\":[{\"i\":14879240,\"w\":1},{\"i\":14879251,\"w\":6},{\"i\":14879164,\"w\":56},{\"i\":14879230,\"w\":1},{\"i\":14879232,\"w\":4},{}]}]"
+      }
+    ]
+  }
+]
diff --git a/server/sonar-web/src/test/json/issues-page-should-open-issue-permalink/app.json b/server/sonar-web/src/test/json/issues-page-should-open-issue-permalink/app.json
new file mode 100644 (file)
index 0000000..1006684
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "canManageFilters": false,
+  "canBulkChange": false,
+  "favorites": []
+}
diff --git a/server/sonar-web/src/test/json/issues-page-should-open-issue-permalink/components-app.json b/server/sonar-web/src/test/json/issues-page-should-open-issue-permalink/components-app.json
new file mode 100644 (file)
index 0000000..61afe8a
--- /dev/null
@@ -0,0 +1,21 @@
+{
+  "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin:src/main/java/org/sonar/issuesreport/ReportJob.java",
+  "uuid": "98662175-0f52-4f83-b0e9-1e9444320b5b",
+  "path": "src/main/java/org/sonar/issuesreport/ReportJob.java",
+  "name": "ReportJob.java",
+  "longName": "src/main/java/org/sonar/issuesreport/ReportJob.java",
+  "q": "FIL",
+  "project": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
+  "projectName": "Sonar :: Issues Report :: Plugin",
+  "fav": false,
+  "canMarkAsFavourite": true,
+  "canCreateManualIssue": true,
+  "measures": {
+    "lines": "53",
+    "coverage": "100.0%",
+    "issues": "1",
+    "debt": "5min",
+    "sqaleRating": "A",
+    "debtRatio": "0.6%"
+  }
+}
diff --git a/server/sonar-web/src/test/json/issues-page-should-open-issue-permalink/lines.json b/server/sonar-web/src/test/json/issues-page-should-open-issue-permalink/lines.json
new file mode 100644 (file)
index 0000000..cd2053d
--- /dev/null
@@ -0,0 +1,392 @@
+{
+  "sources": [
+    {
+      "line": 1,
+      "code": "<span class=\"cppd\">/*</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 2,
+      "code": "<span class=\"cppd\"> * Sonar :: Issues Report :: Plugin</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 3,
+      "code": "<span class=\"cppd\"> * Copyright (C) 2013 SonarSource</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 4,
+      "code": "<span class=\"cppd\"> * dev@sonar.codehaus.org</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 5,
+      "code": "<span class=\"cppd\"> *</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 6,
+      "code": "<span class=\"cppd\"> * This program is free software; you can redistribute it and/or</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 7,
+      "code": "<span class=\"cppd\"> * modify it under the terms of the GNU Lesser General Public</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 8,
+      "code": "<span class=\"cppd\"> * License as published by the Free Software Foundation; either</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 9,
+      "code": "<span class=\"cppd\"> * version 3 of the License, or (at your option) any later version.</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 10,
+      "code": "<span class=\"cppd\"> *</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 11,
+      "code": "<span class=\"cppd\"> * This program is distributed in the hope that it will be useful,</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 12,
+      "code": "<span class=\"cppd\"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 13,
+      "code": "<span class=\"cppd\"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 14,
+      "code": "<span class=\"cppd\"> * Lesser General Public License for more details.</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 15,
+      "code": "<span class=\"cppd\"> *</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 16,
+      "code": "<span class=\"cppd\"> * You should have received a copy of the GNU Lesser General Public</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 17,
+      "code": "<span class=\"cppd\"> * License along with this program; if not, write to the Free Software</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 18,
+      "code": "<span class=\"cppd\"> * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 19,
+      "code": "<span class=\"cppd\"> */</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 20,
+      "code": "<span class=\"k\">package</span> org.sonar.issuesreport;",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 21,
+      "code": "",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 22,
+      "code": "<span class=\"k\">import </span>org.sonar.api.batch.<span class=\"sym-1 sym\">PostJob</span>;",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 23,
+      "code": "<span class=\"k\">import </span>org.sonar.api.batch.<span class=\"sym-2 sym\">SensorContext</span>;",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 24,
+      "code": "<span class=\"k\">import </span>org.sonar.api.resources.<span class=\"sym-3 sym\">Project</span>;",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 25,
+      "code": "<span class=\"k\">import </span>org.sonar.issuesreport.printer.<span class=\"sym-4 sym\">ReportPrinter</span>;",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
+      "scmDate": "2013-09-19T19:06:45+0200"
+    },
+    {
+      "line": 26,
+      "code": "<span class=\"k\">import </span>org.sonar.issuesreport.report.<span class=\"sym-5 sym\">IssuesReport</span>;",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "ed1e45b9f01b4d6bc704595ff42e6ecd6fb80dbe",
+      "scmDate": "2013-02-20T17:18:48+0100"
+    },
+    {
+      "line": 27,
+      "code": "<span class=\"k\">import </span>org.sonar.issuesreport.report.<span class=\"sym-6 sym\">IssuesReportBuilder</span>;",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
+      "scmDate": "2013-09-19T19:06:45+0200"
+    },
+    {
+      "line": 28,
+      "code": "",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 29,
+      "code": "<span class=\"k\">public </span><span class=\"k\">class</span> <span class=\"sym-7 sym\">ReportJob</span> <span class=\"k\">implements</span> <span class=\"sym-1 sym\">PostJob</span> {",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 30,
+      "code": "",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 31,
+      "code": "  <span class=\"k\">private </span><span class=\"sym-6 sym\">IssuesReportBuilder</span> <span class=\"sym-8 sym\">builder</span>;",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
+      "scmDate": "2013-09-19T19:06:45+0200"
+    },
+    {
+      "line": 32,
+      "code": "  <span class=\"k\">private </span><span class=\"sym-4 sym\">ReportPrinter</span>[] <span class=\"sym-9 sym\">printers</span>;",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
+      "scmDate": "2013-09-19T19:06:45+0200"
+    },
+    {
+      "line": 33,
+      "code": "",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 34,
+      "code": "  <span class=\"k\">public </span><span class=\"sym-10 sym\">ReportJob</span>(<span class=\"sym-6 sym\">IssuesReportBuilder</span> <span class=\"sym-11 sym\">builder</span>, <span class=\"sym-4 sym\">ReportPrinter</span>[] <span class=\"sym-12 sym\">printers</span>) {",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
+      "scmDate": "2013-09-19T19:06:45+0200",
+      "lineHits": 1
+    },
+    {
+      "line": 35,
+      "code": "    <span class=\"k\">this</span>.<span class=\"sym-8 sym\">builder</span> = <span class=\"sym-11 sym\">builder</span>;",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
+      "scmDate": "2013-09-19T19:06:45+0200",
+      "lineHits": 1
+    },
+    {
+      "line": 36,
+      "code": "    <span class=\"k\">this</span>.<span class=\"sym-9 sym\">printers</span> = <span class=\"sym-12 sym\">printers</span>;",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
+      "scmDate": "2013-09-19T19:06:45+0200",
+      "lineHits": 1
+    },
+    {
+      "line": 37,
+      "code": "  }",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100",
+      "lineHits": 1
+    },
+    {
+      "line": 38,
+      "code": "",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 39,
+      "code": "  <span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-13 sym\">executeOn</span>(<span class=\"sym-3 sym\">Project</span> <span class=\"sym-14 sym\">project</span>, <span class=\"sym-2 sym\">SensorContext</span> <span class=\"sym-15 sym\">context</span>) {",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 40,
+      "code": "    <span class=\"cppd\">// For performance only initialize IssuesReport if there is on Printer enabled</span>",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
+      "scmDate": "2013-09-19T19:06:45+0200"
+    },
+    {
+      "line": 41,
+      "code": "    <span class=\"sym-5 sym\">IssuesReport</span> <span class=\"sym-16 sym\">report</span> = <span class=\"k\">null</span>;",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
+      "scmDate": "2013-09-19T19:06:45+0200",
+      "lineHits": 1
+    },
+    {
+      "line": 42,
+      "code": "    <span class=\"k\">for</span> (<span class=\"sym-4 sym\">ReportPrinter</span> <span class=\"sym-17 sym\">printer</span> : <span class=\"sym-9 sym\">printers</span>) {",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
+      "scmDate": "2013-09-19T19:06:45+0200",
+      "lineHits": 1,
+      "conditions": 2,
+      "coveredConditions": 2
+    },
+    {
+      "line": 43,
+      "code": "      <span class=\"k\">if </span>(<span class=\"sym-17 sym\">printer</span>.isEnabled()) {",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
+      "scmDate": "2013-09-19T19:06:45+0200",
+      "lineHits": 1,
+      "conditions": 2,
+      "coveredConditions": 2
+    },
+    {
+      "line": 44,
+      "code": "        <span class=\"k\">if </span>(<span class=\"sym-16 sym\">report</span> == <span class=\"k\">null</span>) {",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "ed1e45b9f01b4d6bc704595ff42e6ecd6fb80dbe",
+      "scmDate": "2013-02-20T17:18:48+0100",
+      "lineHits": 1,
+      "conditions": 2,
+      "coveredConditions": 2
+    },
+    {
+      "line": 45,
+      "code": "          <span class=\"sym-16 sym\">report</span> = <span class=\"sym-8 sym\">builder</span>.buildReport(<span class=\"sym-14 sym\">project</span>);",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
+      "scmDate": "2013-09-19T19:06:45+0200",
+      "lineHits": 1
+    },
+    {
+      "line": 46,
+      "code": "        }",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "ed1e45b9f01b4d6bc704595ff42e6ecd6fb80dbe",
+      "scmDate": "2013-02-20T17:18:48+0100"
+    },
+    {
+      "line": 47,
+      "code": "        <span class=\"sym-17 sym\">printer</span>.print(<span class=\"sym-16 sym\">report</span>);",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
+      "scmDate": "2013-09-19T19:06:45+0200",
+      "lineHits": 1
+    },
+    {
+      "line": 48,
+      "code": "      }",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
+      "scmDate": "2013-09-19T19:06:45+0200"
+    },
+    {
+      "line": 49,
+      "code": "    }",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "bbbf5a70655725bd960e41626bcda3b0f85c82d9",
+      "scmDate": "2013-09-19T19:06:45+0200"
+    },
+    {
+      "line": 50,
+      "code": "  }",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "ed1e45b9f01b4d6bc704595ff42e6ecd6fb80dbe",
+      "scmDate": "2013-02-20T17:18:48+0100",
+      "lineHits": 1
+    },
+    {
+      "line": 51,
+      "code": "",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "ed1e45b9f01b4d6bc704595ff42e6ecd6fb80dbe",
+      "scmDate": "2013-02-20T17:18:48+0100"
+    },
+    {
+      "line": 52,
+      "code": "}",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    },
+    {
+      "line": 53,
+      "code": "",
+      "scmAuthor": "julien.henry@sonarsource.com",
+      "scmRevision": "a0c83c815b2deeec585de6894a0b882db635410f",
+      "scmDate": "2013-02-19T18:45:35+0100"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/issues-page-should-open-issue-permalink/search.json b/server/sonar-web/src/test/json/issues-page-should-open-issue-permalink/search.json
new file mode 100644 (file)
index 0000000..655e749
--- /dev/null
@@ -0,0 +1,98 @@
+{
+  "total": 1,
+  "p": 1,
+  "ps": 1,
+  "projects": [
+    {
+      "uuid": "06a742ea-5c55-4c7e-a2b4-8747c163cb40",
+      "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
+      "id": 17637,
+      "qualifier": "TRK",
+      "name": "Sonar :: Issues Report :: Plugin",
+      "longName": "Sonar :: Issues Report :: Plugin"
+    }
+  ],
+  "components": [
+    {
+      "uuid": "0160edec-b7ca-49a1-93ca-a6ea2c38ed21",
+      "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin:src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
+      "id": 17639,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "IssuesReportPlugin.java",
+      "longName": "src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
+      "path": "src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
+      "projectId": 17637,
+      "subProjectId": 17637
+    },
+    {
+      "uuid": "06a742ea-5c55-4c7e-a2b4-8747c163cb40",
+      "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
+      "id": 17637,
+      "enabled": true,
+      "qualifier": "TRK",
+      "name": "Sonar :: Issues Report :: Plugin",
+      "longName": "Sonar :: Issues Report :: Plugin"
+    }
+  ],
+  "issues": [
+    {
+      "key": "some-issue-key",
+      "component": "org.codehaus.sonar-plugins:sonar-issues-report-plugin:src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
+      "componentId": 17639,
+      "project": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
+      "rule": "squid:S1161",
+      "status": "REOPENED",
+      "severity": "MINOR",
+      "message": "Add the \"@Override\" annotation above this method signature",
+      "line": 61,
+      "debt": "5min",
+      "author": "julien.henry@sonarsource.com",
+      "creationDate": "2014-10-09T23:03:12+0200",
+      "updateDate": "2014-12-15T17:40:45+0100",
+      "fUpdateAge": "a day"
+    }
+  ],
+  "rules": [
+    {
+      "key": "squid:S1161",
+      "name": "",
+      "lang": "java",
+      "desc": "",
+      "status": "READY",
+      "langName": "Java"
+    }
+  ],
+  "users": [
+    {
+      "login": "admin",
+      "name": "Admin Admin",
+      "active": true,
+      "email": "admin@sonarsource.com"
+    }
+  ],
+  "languages": [
+    {
+      "key": "js",
+      "name": "JavaScript"
+    },
+    {
+      "key": "java",
+      "name": "Java"
+    }
+  ],
+  "maxResultsReached": false,
+  "paging": {
+    "pageIndex": 1,
+    "pageSize": 1,
+    "total": 1,
+    "fTotal": "1",
+    "pages": 1
+  },
+  "facets": [
+    {
+      "property": "tags",
+      "values": []
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/issues-spec/app.json b/server/sonar-web/src/test/json/issues-spec/app.json
new file mode 100644 (file)
index 0000000..604ef7c
--- /dev/null
@@ -0,0 +1,14 @@
+{
+  "canManageFilters": true,
+  "canBulkChange": true,
+  "favorites": [
+    {
+      "id": 31,
+      "name": "Critical and Blocker Issues"
+    },
+    {
+      "id": 32,
+      "name": "Foo"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/issues-spec/file-level/components-app.json b/server/sonar-web/src/test/json/issues-spec/file-level/components-app.json
new file mode 100644 (file)
index 0000000..537dd07
--- /dev/null
@@ -0,0 +1,124 @@
+{
+  "key": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+  "path": "src/main/java/org/sonar/api/measures/Measure.java",
+  "name": "Measure.java",
+  "longName": "src/main/java/org/sonar/api/measures/Measure.java",
+  "q": "FIL",
+  "subProject": "org.codehaus.sonar:sonar-plugin-api",
+  "subProjectName": "SonarQube :: Plugin API",
+  "project": "org.codehaus.sonar:sonar",
+  "projectName": "SonarQube",
+  "fav": false,
+  "canMarkAsFavourite": false,
+  "canBulkChange": false,
+  "canCreateManualIssue": false,
+  "periods": [
+    [
+      1,
+      "since previous analysis (2014 Dec 01)",
+      "2014-12-01T18:51:13+0100"
+    ],
+    [
+      2,
+      "over 365 days (2013 Dec 01)",
+      "2013-12-01T00:40:31+0100"
+    ],
+    [
+      3,
+      "since previous version (4.5 - 2014 Sep 03)",
+      "2014-09-03T23:16:52+0200"
+    ]
+  ],
+  "severities": [
+    [
+      "MAJOR",
+      "Major",
+      10
+    ],
+    [
+      "INFO",
+      "Info",
+      3
+    ]
+  ],
+  "rules": [
+    [
+      "common-java:DuplicatedBlocks",
+      "Duplicated blocks",
+      1
+    ],
+    [
+      "squid:S1698",
+      "Objects should be compared with \"equals()\"",
+      1
+    ],
+    [
+      "squid:MethodCyclomaticComplexity",
+      "Methods should not be too complex",
+      3
+    ],
+    [
+      "squid:S1142",
+      "Methods should not contain too many return statements",
+      2
+    ],
+    [
+      "squid:S1067",
+      "Expressions should not be too complex",
+      1
+    ],
+    [
+      "squid:S1151",
+      "Switch cases should not have too many lines",
+      1
+    ],
+    [
+      "common-java:InsufficientBranchCoverage",
+      "Insufficient branch coverage by unit tests",
+      1
+    ],
+    [
+      "squid:S1133",
+      "Deprecated code should be removed eventually",
+      3
+    ]
+  ],
+  "measures": {
+    "fNcloc": "396",
+    "fCoverage": "65.0%",
+    "fDuplicationDensity": "2.6%",
+    "fDebt": "5h 42min",
+    "fSqaleRating": "A",
+    "fSqaleDebtRatio": "2.9%",
+    "fIssues": "13",
+    "fMajorIssues": "10",
+    "fInfoIssues": "3"
+  },
+  "tabs": [
+    "scm",
+    "coverage",
+    "duplications"
+  ],
+  "manual_rules": [
+    {
+      "key": "manual:api",
+      "name": "API"
+    },
+    {
+      "key": "manual:design",
+      "name": "Design"
+    },
+    {
+      "key": "manual:error_handling",
+      "name": "Error handling"
+    },
+    {
+      "key": "manual:performance",
+      "name": "Performance"
+    },
+    {
+      "key": "manual:sql_pitfalls",
+      "name": "SQL Pitfall"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/issues-spec/file-level/lines.json b/server/sonar-web/src/test/json/issues-spec/file-level/lines.json
new file mode 100644 (file)
index 0000000..18a670b
--- /dev/null
@@ -0,0 +1,11 @@
+{
+  "sources": [
+    {
+      "line": 1,
+      "code": "<span class=\"cppd\">/*</span>",
+      "scmAuthor": "simon.brandhof@gmail.com",
+      "scmRevision": "aeadc1f9129274949daaa57738c7c4550bdfbc7b",
+      "scmDate": "2010-09-06T16:08:06+0200"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/issues-spec/file-level/search.json b/server/sonar-web/src/test/json/issues-spec/file-level/search.json
new file mode 100644 (file)
index 0000000..5ea06f0
--- /dev/null
@@ -0,0 +1,494 @@
+{
+  "total": 10,
+  "p": 1,
+  "ps": 50,
+  "projects": [
+    {
+      "uuid": "69e57151-be0d-4157-adff-c06741d88879",
+      "key": "org.codehaus.sonar:sonar",
+      "id": 2865,
+      "qualifier": "TRK",
+      "name": "SonarQube",
+      "longName": "SonarQube"
+    }
+  ],
+  "components": [
+    {
+      "uuid": "7feef7c3-11b9-4175-b5a7-527ca3c75cb7",
+      "key": "org.codehaus.sonar:sonar-plugin-api",
+      "id": 16,
+      "enabled": true,
+      "qualifier": "BRC",
+      "name": "SonarQube :: Plugin API",
+      "longName": "SonarQube :: Plugin API",
+      "path": "sonar-plugin-api",
+      "projectId": 2865,
+      "subProjectId": 2865
+    },
+    {
+      "uuid": "e1b3c47e-e9a2-42ea-9cac-439ce2345d7e",
+      "key": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Metric.java",
+      "id": 3543,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "Metric.java",
+      "longName": "src/main/java/org/sonar/api/measures/Metric.java",
+      "path": "src/main/java/org/sonar/api/measures/Metric.java",
+      "projectId": 2865,
+      "subProjectId": 16
+    },
+    {
+      "uuid": "69e57151-be0d-4157-adff-c06741d88879",
+      "key": "org.codehaus.sonar:sonar",
+      "id": 2865,
+      "enabled": true,
+      "qualifier": "TRK",
+      "name": "SonarQube",
+      "longName": "SonarQube"
+    },
+    {
+      "uuid": "e2550527-3f86-4082-a9ae-e345f5a735aa",
+      "key": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+      "id": 3538,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "Measure.java",
+      "longName": "src/main/java/org/sonar/api/measures/Measure.java",
+      "path": "src/main/java/org/sonar/api/measures/Measure.java",
+      "projectId": 2865,
+      "subProjectId": 16
+    },
+    {
+      "uuid": "97606f40-f3ef-4922-aa37-f67485917e67",
+      "key": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/resources/File.java",
+      "id": 3592,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "File.java",
+      "longName": "src/main/java/org/sonar/api/resources/File.java",
+      "path": "src/main/java/org/sonar/api/resources/File.java",
+      "projectId": 2865,
+      "subProjectId": 16
+    },
+    {
+      "uuid": "69949290-cfe6-45b6-9dd0-53f1e467b810",
+      "key": "org.codehaus.sonar:sonar-duplications",
+      "id": 20,
+      "enabled": true,
+      "qualifier": "BRC",
+      "name": "SonarQube :: Duplications",
+      "longName": "SonarQube :: Duplications",
+      "path": "sonar-duplications",
+      "projectId": 2865,
+      "subProjectId": 2865
+    },
+    {
+      "uuid": "90dd5fda-5fce-4d76-bebf-132922abad95",
+      "key": "org.codehaus.sonar:sonar-duplications:src/main/java/org/sonar/duplications/index/PackedMemoryCloneIndex.java",
+      "id": 3308,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "PackedMemoryCloneIndex.java",
+      "longName": "src/main/java/org/sonar/duplications/index/PackedMemoryCloneIndex.java",
+      "path": "src/main/java/org/sonar/duplications/index/PackedMemoryCloneIndex.java",
+      "projectId": 2865,
+      "subProjectId": 20
+    },
+    {
+      "uuid": "1b915447-5aa8-4f59-9134-346a4e88c7b7",
+      "key": "org.codehaus.sonar.plugins:sonar-core-plugin",
+      "id": 2873,
+      "enabled": true,
+      "qualifier": "BRC",
+      "name": "SonarQube :: Plugins :: Core",
+      "longName": "SonarQube :: Plugins :: Core",
+      "path": "plugins/sonar-core-plugin",
+      "projectId": 2865,
+      "subProjectId": 2865
+    },
+    {
+      "uuid": "6c9c1986-59b3-4839-8dec-9499488f64d1",
+      "key": "org.codehaus.sonar.plugins:sonar-core-plugin:src/main/java/org/sonar/plugins/core/issue/tracking/StringTextComparator.java",
+      "id": 20777,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "StringTextComparator.java",
+      "longName": "src/main/java/org/sonar/plugins/core/issue/tracking/StringTextComparator.java",
+      "path": "src/main/java/org/sonar/plugins/core/issue/tracking/StringTextComparator.java",
+      "projectId": 2865,
+      "subProjectId": 2873
+    }
+  ],
+  "issues": [
+    {
+      "key": "200d4a8b-9666-4e70-9953-7bab57933f97",
+      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+      "componentId": 3538,
+      "project": "org.codehaus.sonar:sonar",
+      "subProject": "org.codehaus.sonar:sonar-plugin-api",
+      "rule": "common-java:DuplicatedBlocks",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "1 duplicated blocks of code.",
+      "debt": "1h",
+      "creationDate": "2014-06-06T23:38:06+0200",
+      "updateDate": "2014-07-01T17:51:37+0200",
+      "fUpdateAge": "5 months",
+      "actions": [],
+      "transitions": []
+    },
+    {
+      "key": "23c5a022-ab5b-4892-b676-a7fd58540f79",
+      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+      "componentId": 3538,
+      "project": "org.codehaus.sonar:sonar",
+      "subProject": "org.codehaus.sonar:sonar-plugin-api",
+      "rule": "common-java:InsufficientBranchCoverage",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "1 more branches need to be covered by unit tests to reach the minimum threshold of 65.0% branch coverage.",
+      "debt": "10min",
+      "creationDate": "2014-09-02T09:25:36+0200",
+      "updateDate": "2014-10-09T16:21:48+0200",
+      "fUpdateAge": "about a month",
+      "actions": [],
+      "transitions": []
+    },
+    {
+      "key": "23d6cd5e-83ba-4e65-abef-ff8592195638",
+      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+      "componentId": 3538,
+      "project": "org.codehaus.sonar:sonar",
+      "subProject": "org.codehaus.sonar:sonar-plugin-api",
+      "rule": "squid:S1142",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Reduce the number of returns of this method 7, down to the maximum allowed 5.",
+      "line": 248,
+      "debt": "20min",
+      "author": "julien.henry@sonarsource.com",
+      "creationDate": "2014-06-16T23:38:20+0200",
+      "updateDate": "2014-07-01T18:26:25+0200",
+      "fUpdateAge": "5 months",
+      "actions": [],
+      "transitions": []
+    },
+    {
+      "key": "8c5a4fca-57c9-44ad-89c0-6673c483e357",
+      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+      "componentId": 3538,
+      "project": "org.codehaus.sonar:sonar",
+      "subProject": "org.codehaus.sonar:sonar-plugin-api",
+      "rule": "squid:MethodCyclomaticComplexity",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "The Cyclomatic Complexity of this method \"value\" is 22 which is greater than 10 authorized.",
+      "line": 248,
+      "debt": "10min",
+      "author": "julien.henry@sonarsource.com",
+      "creationDate": "2014-06-16T23:38:20+0200",
+      "updateDate": "2014-07-01T16:20:08+0200",
+      "fUpdateAge": "5 months",
+      "actions": [],
+      "transitions": []
+    },
+    {
+      "key": "57303136-93b5-4d96-b1ca-654160aa5bdb",
+      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+      "componentId": 3538,
+      "project": "org.codehaus.sonar:sonar",
+      "subProject": "org.codehaus.sonar:sonar-plugin-api",
+      "rule": "squid:S1151",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Reduce this switch case number of lines from 8 to at most 5, for example by extracting code into methods.",
+      "line": 266,
+      "debt": "10min",
+      "author": "julien.henry@sonarsource.com",
+      "creationDate": "2014-06-16T23:38:20+0200",
+      "updateDate": "2014-06-30T16:41:24+0200",
+      "fUpdateAge": "5 months",
+      "actions": [],
+      "transitions": []
+    },
+    {
+      "key": "dbf052eb-f991-44db-a829-029d47b7fe2d",
+      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+      "componentId": 3538,
+      "project": "org.codehaus.sonar:sonar",
+      "subProject": "org.codehaus.sonar:sonar-plugin-api",
+      "rule": "squid:MethodCyclomaticComplexity",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "The Cyclomatic Complexity of this method \"getVariation\" is 12 which is greater than 10 authorized.",
+      "line": 562,
+      "debt": "10min",
+      "author": "Simon Brandhof",
+      "creationDate": "2011-10-25T12:27:40+0200",
+      "updateDate": "2013-12-18T23:54:49+0100",
+      "fUpdateAge": "11 months",
+      "actions": [],
+      "transitions": []
+    },
+    {
+      "key": "50db1415-bd3c-4c24-ab0a-763177059770",
+      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+      "componentId": 3538,
+      "project": "org.codehaus.sonar:sonar",
+      "subProject": "org.codehaus.sonar:sonar-plugin-api",
+      "rule": "squid:S1698",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Change this comparison to use the equals method.",
+      "line": 684,
+      "debt": "2min",
+      "author": "david@gageot.net",
+      "creationDate": "2014-06-26T23:17:10+0200",
+      "updateDate": "2014-07-01T16:13:48+0200",
+      "fUpdateAge": "5 months",
+      "actions": [],
+      "transitions": []
+    },
+    {
+      "key": "5fbdc597-0d83-4ea2-9d9d-ac192ec1eec1",
+      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+      "componentId": 3538,
+      "project": "org.codehaus.sonar:sonar",
+      "subProject": "org.codehaus.sonar:sonar-plugin-api",
+      "rule": "squid:S1067",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Reduce the number of conditional operators (5) used in the expression (maximum allowed 3).",
+      "line": 684,
+      "debt": "10min",
+      "author": "david@gageot.net",
+      "creationDate": "2013-08-28T12:19:16+0200",
+      "updateDate": "2013-12-10T14:28:37+0100",
+      "fUpdateAge": "12 months",
+      "actions": [],
+      "transitions": []
+    },
+    {
+      "key": "186d1419-f5e9-412f-8a8e-f8cd81920359",
+      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure.java",
+      "componentId": 3538,
+      "project": "org.codehaus.sonar:sonar",
+      "subProject": "org.codehaus.sonar:sonar-plugin-api",
+      "rule": "squid:MethodCyclomaticComplexity",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "The Cyclomatic Complexity of this method \"equals\" is 15 which is greater than 10 authorized.",
+      "line": 724,
+      "debt": "10min",
+      "author": "Simon Brandhof",
+      "creationDate": "2011-10-25T12:27:40+0200",
+      "updateDate": "2014-03-12T10:43:19+0100",
+      "fUpdateAge": "9 months",
+      "actions": [],
+      "transitions": []
+    },
+    {
+      "key": "225d3b74-8b61-46a1-aac2-68221d6cd933",
+      "component": "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/measures/Measure_2.java",
+      "componentId": 3538,
+      "project": "org.codehaus.sonar:sonar",
+      "subProject": "org.codehaus.sonar:sonar-plugin-api",
+      "rule": "squid:S1142",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Reduce the number of returns of this method 6, down to the maximum allowed 5.",
+      "line": 724,
+      "debt": "20min",
+      "author": "simon.brandhof@gmail.com",
+      "creationDate": "2013-08-09T16:04:33+0200",
+      "updateDate": "2014-03-12T10:43:19+0100",
+      "fUpdateAge": "9 months",
+      "actions": [],
+      "transitions": []
+    }
+  ],
+  "rules": [
+    {
+      "key": "squid:S1698",
+      "name": "Objects should be compared with \"equals()\"",
+      "lang": "java",
+      "desc": "<p>Using the equality (<code>==</code>) and inequality (<code>!=</code>) operators to compare two objects does not check to see if they have the same values. Rather it checks to see if both object references point to exactly the same object in memory. The vast majority of the time, this is not what you want to do. Use the .equals() method to compare the values of two objects or to compare a string object to a string literal.</p>\n\n<h2>Noncompliant Code Sample</h2>\n<pre>\nString str1 = \"blue\";\nString str2 = \"blue\";\nString str3 = str1;\n\nif (str1 == str2)\n{\n  System.out.println(\"they're both 'blue'\"); // this doesn't print because the objects are different\n}\n\nif (str1 == \"blue\")\n{\n  System.out.println(\"they're both 'blue'\"); // this doesn't print because the objects are different\n}\n\nif (str1 == str3)\n{\n  System.out.println(\"they're the same object\"); // this prints\n}\n</pre>\n\n<h2>Compliant Solution</h2>\n<pre>\nString str1 = \"blue\";\nString str2 = \"blue\";\nString str3 = str1;\n\nif (str1.equals(str2))\n{\n  System.out.println(\"they're both 'blue'\"); // this prints\n}\n\nif (str1.equals(\"blue\"))\n{\n  System.out.println(\"they're both 'blue'\"); // this prints\n}\n\nif (str1 == str3)\n{\n  System.out.println(\"they're the same object\"); // this still prints, but it's probably not what you meant to do\n}\n</pre>",
+      "status": "READY",
+      "langName": "Java"
+    },
+    {
+      "key": "common-java:DuplicatedBlocks",
+      "name": "Duplicated blocks",
+      "lang": "java",
+      "desc": "<p>An issue is created on a file as soon as there is a block of duplicated code on this file. It gives the number of blocks in the file.</p>",
+      "status": "READY",
+      "langName": "Java"
+    },
+    {
+      "key": "squid:MethodCyclomaticComplexity",
+      "name": "Methods should not be too complex",
+      "lang": "java",
+      "desc": "<p>The Cyclomatic Complexity is measured by the number of\n\t(&amp;&amp;, ||) operators and (if, while, do, for, ?:, catch, switch,\n\tcase, return, throw) statements in the body of a class plus one for\n\teach constructor, method (but not getter/setter), static initializer,\n\tor instance initializer in the class. The last return stament in\n\tmethod, if exists, is not taken into account.</p>\n<p>\n\tEven when the Cyclomatic Complexity of a class is very high, this\n\tcomplexity might be well distributed among all methods. Nevertheless,\n\tmost of the time, a very complex class is a class which breaks the <a\n\t\thref=\"http://en.wikipedia.org/wiki/Single_responsibility_principle\">Single\n\t\tResponsibility Principle</a> and which should be re-factored to be split\n\tin several classes.\n</p>",
+      "status": "READY",
+      "langName": "Java"
+    },
+    {
+      "key": "squid:S1142",
+      "name": "Methods should not contain too many return statements",
+      "lang": "java",
+      "desc": "<p>\nHaving too many return statements in a method increases the method's essential complexity because the flow of execution is broken each time a return statement is encountered.\nThis makes it harder to read and understand the logic of the method.\n</p>\n\n<p>\nThe following code snippet illustrates this rule with the default threshold of 3:\n</p>\n\n<pre>\npublic boolean myMethod() { // Non-Compliant as there are 4 return statements\n  if (condition1) {\n    return true;\n  } else {\n    if (condition2) {\n      return false;\n    } else {\n      return true;\n    }\n  }\n  return false;\n}\n</pre>",
+      "status": "READY",
+      "langName": "Java"
+    },
+    {
+      "key": "squid:S1067",
+      "name": "Expressions should not be too complex",
+      "lang": "java",
+      "desc": "<p>\nThe complexity of an expression is defined by the number of <code>&&</code>, <code>||</code> and <code>condition ? ifTrue : ifFalse</code> operators it contains.\nA single expression's complexity should not become too high to keep the code readable.\n</p>\n\n<p>The following code, with a maximum complexity of 3:</p>\n\n<pre>\nif (condition1 && condition2 && condition3 && condition4) { /* ... */ }  // Non-Compliant\n</pre>\n\n<p>could be refactored into something like:</p>\n\n<pre>\nif (relevantMethodName1() && relevantMethodName2()) { /* ... */ }        // Compliant\n\n/* ... */\n\nprivate boolean relevantMethodName1() {\n  return condition1 && condition2;\n}\n\nprivate boolean relevantMethodName2() {\n  return condition3 && condition4;\n}\n</pre>",
+      "status": "READY",
+      "langName": "Java"
+    },
+    {
+      "key": "squid:S1151",
+      "name": "Switch cases should not have too many lines",
+      "lang": "java",
+      "desc": "<p>Switch cases should remain small to keep the overall switch compact and readable.</p>\n\n<p>The following code snippet illustrates this rule with the default threshold of 5:</p>\n\n<pre>\nswitch (myVariable) {\n  case 0:                     // Compliant - 5 lines till following case\n    System.out.println(\"\");\n    System.out.println(\"\");\n    System.out.println(\"\");\n    break;\n  default:                    // Non-Compliant - 6 lines till switch end\n    System.out.println(\"\");\n    System.out.println(\"\");\n    System.out.println(\"\");\n    System.out.println(\"\");\n    break;\n}\n</pre>",
+      "status": "READY",
+      "langName": "Java"
+    },
+    {
+      "key": "common-java:InsufficientBranchCoverage",
+      "name": "Insufficient branch coverage by unit tests",
+      "lang": "java",
+      "desc": "<p>An issue is created on a file as soon as the branch coverage on this file is less than the required threshold.It gives the number of branches to be covered in order to reach the required threshold.</p>",
+      "status": "READY",
+      "langName": "Java"
+    }
+  ],
+  "users": [],
+  "languages": [
+    {
+      "key": "js",
+      "name": "JavaScript"
+    },
+    {
+      "key": "java",
+      "name": "Java"
+    }
+  ],
+  "maxResultsReached": false,
+  "paging": {
+    "pageIndex": 1,
+    "pageSize": 50,
+    "total": 10,
+    "fTotal": "10",
+    "pages": 1
+  },
+  "facets": [
+    {
+      "property": "severities",
+      "values": [
+        {
+          "val": "MAJOR",
+          "count": 10
+        },
+        {
+          "val": "INFO",
+          "count": 3
+        },
+        {
+          "val": "MINOR",
+          "count": 0
+        },
+        {
+          "val": "CRITICAL",
+          "count": 0
+        },
+        {
+          "val": "BLOCKER",
+          "count": 0
+        }
+      ]
+    },
+    {
+      "property": "statuses",
+      "values": [
+        {
+          "val": "CONFIRMED",
+          "count": 10
+        },
+        {
+          "val": "OPEN",
+          "count": 0
+        },
+        {
+          "val": "REOPENED",
+          "count": 0
+        },
+        {
+          "val": "RESOLVED",
+          "count": 0
+        },
+        {
+          "val": "CLOSED",
+          "count": 0
+        }
+      ]
+    },
+    {
+      "property": "resolutions",
+      "values": [
+        {
+          "val": "REMOVED",
+          "count": 43
+        },
+        {
+          "val": "FIXED",
+          "count": 4
+        },
+        {
+          "val": "",
+          "count": 10
+        },
+        {
+          "val": "FALSE-POSITIVE",
+          "count": 0
+        }
+      ]
+    },
+    {
+      "property": "projectUuids",
+      "values": [
+        {
+          "val": "69e57151-be0d-4157-adff-c06741d88879",
+          "count": 10
+        }
+      ]
+    },
+    {
+      "property": "componentUuids",
+      "values": [
+        {
+          "val": "90dd5fda-5fce-4d76-bebf-132922abad95",
+          "count": 20
+        },
+        {
+          "val": "e2550527-3f86-4082-a9ae-e345f5a735aa",
+          "count": 10
+        },
+        {
+          "val": "97606f40-f3ef-4922-aa37-f67485917e67",
+          "count": 8
+        },
+        {
+          "val": "6c9c1986-59b3-4839-8dec-9499488f64d1",
+          "count": 7
+        },
+        {
+          "val": "e1b3c47e-e9a2-42ea-9cac-439ce2345d7e",
+          "count": 6
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/issues-spec/search-reopened.json b/server/sonar-web/src/test/json/issues-spec/search-reopened.json
new file mode 100644 (file)
index 0000000..efd73bc
--- /dev/null
@@ -0,0 +1,485 @@
+{
+  "total": 4,
+  "p": 1,
+  "ps": 50,
+  "projects": [
+    {
+      "uuid": "06a742ea-5c55-4c7e-a2b4-8747c163cb40",
+      "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
+      "id": 17637,
+      "qualifier": "TRK",
+      "name": "Sonar :: Issues Report :: Plugin",
+      "longName": "Sonar :: Issues Report :: Plugin"
+    },
+    {
+      "uuid": "69e57151-be0d-4157-adff-c06741d88879",
+      "key": "org.codehaus.sonar:sonar",
+      "id": 2865,
+      "qualifier": "TRK",
+      "name": "SonarQube",
+      "longName": "SonarQube"
+    },
+    {
+      "uuid": "963cefe8-9128-475f-8d39-636685195e43",
+      "key": "com.sonarsource.rpg:rpg",
+      "id": 27165,
+      "qualifier": "TRK",
+      "name": "SonarSource :: RPG",
+      "longName": "SonarSource :: RPG"
+    }
+  ],
+  "components": [
+    {
+      "uuid": "f62c3080-6e75-4940-ae95-7dae743bcac3",
+      "key": "org.codehaus.sonar:sonar-server:src/main/java/org/sonar/server/search/request/ProxySearchScrollRequestBuilder.java",
+      "id": 35659,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "ProxySearchScrollRequestBuilder.java",
+      "longName": "src/main/java/org/sonar/server/search/request/ProxySearchScrollRequestBuilder.java",
+      "path": "src/main/java/org/sonar/server/search/request/ProxySearchScrollRequestBuilder.java",
+      "projectId": 2865,
+      "subProjectId": 2872
+    },
+    {
+      "uuid": "69e57151-be0d-4157-adff-c06741d88879",
+      "key": "org.codehaus.sonar:sonar",
+      "id": 2865,
+      "enabled": true,
+      "qualifier": "TRK",
+      "name": "SonarQube",
+      "longName": "SonarQube"
+    },
+    {
+      "uuid": "0160edec-b7ca-49a1-93ca-a6ea2c38ed21",
+      "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin:src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
+      "id": 17639,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "IssuesReportPlugin.java",
+      "longName": "src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
+      "path": "src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
+      "projectId": 17637,
+      "subProjectId": 17637
+    },
+    {
+      "uuid": "6acccd14-18f8-436e-9a20-1d2d1f91295b",
+      "key": "com.sonarsource.rpg:rpg-analyzer:src/main/java/com/sonar/rpg/parser/Parser.java",
+      "id": 27173,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "Parser.java",
+      "longName": "src/main/java/com/sonar/rpg/parser/Parser.java",
+      "path": "src/main/java/com/sonar/rpg/parser/Parser.java",
+      "projectId": 27165,
+      "subProjectId": 27166
+    },
+    {
+      "uuid": "06a742ea-5c55-4c7e-a2b4-8747c163cb40",
+      "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
+      "id": 17637,
+      "enabled": true,
+      "qualifier": "TRK",
+      "name": "Sonar :: Issues Report :: Plugin",
+      "longName": "Sonar :: Issues Report :: Plugin"
+    },
+    {
+      "uuid": "98662175-0f52-4f83-b0e9-1e9444320b5b",
+      "key": "org.codehaus.sonar-plugins:sonar-issues-report-plugin:src/main/java/org/sonar/issuesreport/ReportJob.java",
+      "id": 17640,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "ReportJob.java",
+      "longName": "src/main/java/org/sonar/issuesreport/ReportJob.java",
+      "path": "src/main/java/org/sonar/issuesreport/ReportJob.java",
+      "projectId": 17637,
+      "subProjectId": 17637
+    },
+    {
+      "uuid": "a6b74bc6-94b9-431f-b7fd-524553d42405",
+      "key": "com.sonarsource.rpg:rpg-analyzer",
+      "id": 27166,
+      "enabled": true,
+      "qualifier": "BRC",
+      "name": "SonarSource :: RPG :: Analyzer",
+      "longName": "SonarSource :: RPG :: Analyzer",
+      "path": "rpg-analyzer",
+      "projectId": 27165,
+      "subProjectId": 27165
+    },
+    {
+      "uuid": "e1f6f8bd-6b5f-4e2d-b936-4abffc9e4264",
+      "key": "org.codehaus.sonar:sonar-server",
+      "id": 2872,
+      "enabled": true,
+      "qualifier": "BRC",
+      "name": "SonarQube :: Server",
+      "longName": "SonarQube :: Server",
+      "path": "sonar-server",
+      "projectId": 2865,
+      "subProjectId": 2865
+    },
+    {
+      "uuid": "963cefe8-9128-475f-8d39-636685195e43",
+      "key": "com.sonarsource.rpg:rpg",
+      "id": 27165,
+      "enabled": true,
+      "qualifier": "TRK",
+      "name": "SonarSource :: RPG",
+      "longName": "SonarSource :: RPG"
+    }
+  ],
+  "issues": [
+    {
+      "key": "80f1562f-9f64-48a9-a6bb-1dcd2ebf444a",
+      "component": "org.codehaus.sonar-plugins:sonar-issues-report-plugin:src/main/java/org/sonar/issuesreport/IssuesReportPlugin.java",
+      "componentId": 17639,
+      "project": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
+      "rule": "squid:S1161",
+      "status": "REOPENED",
+      "severity": "MINOR",
+      "message": "Add the \"@Override\" annotation above this method signature",
+      "line": 61,
+      "debt": "5min",
+      "assignee": "julien.henry",
+      "author": "julien.henry@sonarsource.com",
+      "creationDate": "2014-10-09T23:03:12+0200",
+      "updateDate": "2014-11-24T08:11:19+0100",
+      "fUpdateAge": "14 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ],
+      "assigneeName": "Julien Henry"
+    },
+    {
+      "key": "9eae5201-96c7-4e78-a407-8d58479c98a3",
+      "component": "org.codehaus.sonar-plugins:sonar-issues-report-plugin:src/main/java/org/sonar/issuesreport/ReportJob.java",
+      "componentId": 17640,
+      "project": "org.codehaus.sonar-plugins:sonar-issues-report-plugin",
+      "rule": "squid:S1161",
+      "status": "REOPENED",
+      "severity": "MAJOR",
+      "message": "Add the \"@Override\" annotation above this method signature",
+      "line": 39,
+      "debt": "5min",
+      "assignee": "julien.henry",
+      "author": "julien.henry@sonarsource.com",
+      "creationDate": "2014-10-09T23:03:12+0200",
+      "updateDate": "2014-11-18T08:25:31+0100",
+      "fUpdateAge": "20 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ],
+      "assigneeName": "Julien Henry"
+    },
+    {
+      "key": "50bfc04f-6137-457a-a967-f6b1b7345365",
+      "component": "org.codehaus.sonar:sonar-server:src/main/java/org/sonar/server/search/request/ProxySearchScrollRequestBuilder.java",
+      "componentId": 35659,
+      "project": "org.codehaus.sonar:sonar",
+      "subProject": "org.codehaus.sonar:sonar-server",
+      "rule": "common-java:InsufficientBranchCoverage",
+      "status": "REOPENED",
+      "severity": "MAJOR",
+      "message": "1 more branches need to be covered by unit tests to reach the minimum threshold of 65.0% branch coverage.",
+      "debt": "10min",
+      "assignee": "julien.lancelot",
+      "creationDate": "2014-11-04T14:51:27+0100",
+      "updateDate": "2014-11-10T23:29:27+0100",
+      "fUpdateAge": "27 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ],
+      "assigneeName": "Julien Lancelot"
+    },
+    {
+      "key": "7012d6fc-e663-4032-aba6-70c4522453b4",
+      "component": "com.sonarsource.rpg:rpg-analyzer:src/main/java/com/sonar/rpg/parser/Parser.java",
+      "componentId": 27173,
+      "project": "com.sonarsource.rpg:rpg",
+      "subProject": "com.sonarsource.rpg:rpg-analyzer",
+      "rule": "squid:S1994",
+      "status": "REOPENED",
+      "severity": "MAJOR",
+      "message": "This loop's stop condition tests \"isEndOfFile()\" but the incrementer updates \"lineNumber\".",
+      "line": 69,
+      "debt": "20min",
+      "assignee": "pierre-yves.nicolas",
+      "author": "pierre-yves.nicolas@sonarsource.com",
+      "creationDate": "2014-10-09T23:05:10+0200",
+      "updateDate": "2014-10-31T10:33:08+0100",
+      "fUpdateAge": "about a month",
+      "comments": [
+        {
+          "key": "9d2b1d6e-9c9c-4ff2-bc55-af622922c4f0",
+          "login": "evgeny.mandrikov",
+          "userName": "Evgeny Mandrikov",
+          "htmlText": "Severity changed from &quot;critical&quot; to &quot;major&quot;, because this is a new Java rule.<br/>Also message looks suspicious. Nico, could you please take a look?",
+          "markdown": "Severity changed from \"critical\" to \"major\", because this is a new Java rule.\nAlso message looks suspicious. Nico, could you please take a look?",
+          "updatable": false,
+          "createdAt": "2014-10-10T15:49:23+0200"
+        },
+        {
+          "key": "583033bd-c0be-4865-ba86-f1773c712bba",
+          "login": "nicolas.peru",
+          "userName": "Nicolas Peru",
+          "htmlText": "message has been improved in <a href=\"https://github.com/SonarSource/sonar-java/commit/d1e4fa74ada69039958dbff8a94c776fd6be6639\" target=\"_blank\">https://github.com/SonarSource/sonar-java/commit/d1e4fa74ada69039958dbff8a94c776fd6be6639</a>",
+          "markdown": "message has been improved in https://github.com/SonarSource/sonar-java/commit/d1e4fa74ada69039958dbff8a94c776fd6be6639",
+          "updatable": false,
+          "createdAt": "2014-10-13T17:38:52+0200"
+        }
+      ],
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ],
+      "assigneeName": "Pierre-Yves Nicolas"
+    }
+  ],
+  "rules": [
+    {
+      "key": "squid:S1994",
+      "name": "\"for\" loop incrementers should modify the variable being tested in the loop's stop condition",
+      "lang": "java",
+      "desc": "<p>It is almost always an error when a <code>for</code> loop's stop condition and incrementer don't act on the same variable. Even when it is not, it could confuse future maintainers of the code, and should be avoided.</p>\n\n<h2>Noncompliant Code Example</h2>\n<pre>\nfor (i = 0; i < 10; j++) {  // Noncompliant\n  // ...\n}\n</pre>\n\n<h2>Compliant Solution</h2>\n<pre>\nfor (i = 0; i < 10; i++) {\n  // ...\n}\n</pre>",
+      "status": "REMOVED",
+      "langName": "Java"
+    },
+    {
+      "key": "common-java:InsufficientBranchCoverage",
+      "name": "Insufficient branch coverage by unit tests",
+      "lang": "java",
+      "desc": "<p>An issue is created on a file as soon as the branch coverage on this file is less than the required threshold.It gives the number of branches to be covered in order to reach the required threshold.</p>",
+      "status": "READY",
+      "langName": "Java"
+    },
+    {
+      "key": "squid:S1161",
+      "name": "\"@Override\" annotation should be used on any method overriding (since Java 5) or implementing (since Java 6) another one",
+      "lang": "java",
+      "desc": "<p>Using the <code>@Override</code> annotation is useful for two reasons :</p>\n<ul>\n  <li>It elicits a warning from the compiler if the annotated method doesn't actually override anything, as in the case of a misspelling.</li>\n  <li>It improves the readability of the source code by making it obvious that methods are overridden.</li>\n</ul>\n<h2>Noncompliant Code Example</h2>\n<pre>\nclass ParentClass {\n  public boolean doSomething(){...}\n}\nclass FirstChildClass extends ParentClass {\n  public boolean doSomething(){...}  //Non-Compliant\n}\n</pre>\n\n<h2>Compliant Solution</h2>\n<pre>\nclass ParentClass {\n  public boolean doSomething(){...}\n}\nclass FirstChildClass extends ParentClass {\n  @Override\n  public boolean doSomething(){...}  //Compliant\n}\n</pre>",
+      "status": "REMOVED",
+      "langName": "Java"
+    }
+  ],
+  "users": [
+    {
+      "login": "julien.lancelot",
+      "name": "Julien Lancelot",
+      "active": true,
+      "email": "julien.lancelot@sonarsource.com"
+    },
+    {
+      "login": "pierre-yves.nicolas",
+      "name": "Pierre-Yves Nicolas",
+      "active": true,
+      "email": "pierre-yves.nicolas@sonarsource.com"
+    },
+    {
+      "login": "admin",
+      "name": "Admin Admin",
+      "active": true,
+      "email": "admin@sonarsource.com"
+    },
+    {
+      "login": "nicolas.peru",
+      "name": "Nicolas Peru",
+      "active": true,
+      "email": "nicolas.peru@sonarsource.com"
+    },
+    {
+      "login": "julien.henry",
+      "name": "Julien Henry",
+      "active": true,
+      "email": "julien.henry@sonarsource.com"
+    },
+    {
+      "login": "evgeny.mandrikov",
+      "name": "Evgeny Mandrikov",
+      "active": true,
+      "email": "evgeny.mandrikov@sonarsource.com"
+    }
+  ],
+  "actionPlans": [
+    {
+      "key": "1b9e7e52-ff58-40c1-80bf-f68429a3275e",
+      "name": "5.0",
+      "status": "OPEN",
+      "project": "org.codehaus.sonar:sonar",
+      "userLogin": "fabrice.bellingard",
+      "createdAt": "2014-09-01T17:14:55+0200",
+      "fCreatedAt": "Sep 1, 2014 5:14 PM",
+      "updatedAt": "2014-09-01T17:14:55+0200",
+      "fUpdatedAt": "Sep 1, 2014 5:14 PM"
+    },
+    {
+      "key": "151b796f-c5e1-40c9-89c0-ca391e8a31c0",
+      "name": "CPP 3.3",
+      "status": "OPEN",
+      "project": "com.sonarsource.cpp:cpp",
+      "userLogin": "eric.hartmann",
+      "createdAt": "2014-10-27T15:15:34+0100",
+      "fCreatedAt": "Oct 27, 2014 3:15 PM",
+      "updatedAt": "2014-10-27T15:15:34+0100",
+      "fUpdatedAt": "Oct 27, 2014 3:15 PM"
+    },
+    {
+      "key": "6f967cd5-687b-49ac-b4e3-b8d392374557",
+      "name": "4.5",
+      "status": "CLOSED",
+      "project": "org.codehaus.sonar:sonar",
+      "userLogin": "freddy.mallet",
+      "createdAt": "2014-07-01T21:22:52+0200",
+      "fCreatedAt": "Jul 1, 2014 9:22 PM",
+      "updatedAt": "2014-09-10T15:44:24+0200",
+      "fUpdatedAt": "Sep 10, 2014 3:44 PM"
+    }
+  ],
+  "languages": [
+    {
+      "key": "js",
+      "name": "JavaScript"
+    },
+    {
+      "key": "java",
+      "name": "Java"
+    }
+  ],
+  "maxResultsReached": false,
+  "paging": {
+    "pageIndex": 1,
+    "pageSize": 50,
+    "total": 4,
+    "fTotal": "4",
+    "pages": 1
+  },
+  "facets": [
+    {
+      "property": "severities",
+      "values": [
+        {
+          "val": "MAJOR",
+          "count": 3
+        },
+        {
+          "val": "MINOR",
+          "count": 1
+        },
+        {
+          "val": "INFO",
+          "count": 0
+        },
+        {
+          "val": "CRITICAL",
+          "count": 0
+        },
+        {
+          "val": "BLOCKER",
+          "count": 0
+        }
+      ]
+    },
+    {
+      "property": "statuses",
+      "values": [
+        {
+          "val": "CONFIRMED",
+          "count": 4583
+        },
+        {
+          "val": "OPEN",
+          "count": 324
+        },
+        {
+          "val": "REOPENED",
+          "count": 4
+        },
+        {
+          "val": "RESOLVED",
+          "count": 0
+        },
+        {
+          "val": "CLOSED",
+          "count": 0
+        }
+      ]
+    },
+    {
+      "property": "resolutions",
+      "values": [
+        {
+          "val": "",
+          "count": 4
+        },
+        {
+          "val": "FALSE-POSITIVE",
+          "count": 0
+        },
+        {
+          "val": "FIXED",
+          "count": 0
+        },
+        {
+          "val": "REMOVED",
+          "count": 0
+        }
+      ]
+    },
+    {
+      "property": "actionPlans",
+      "values": [
+        {
+          "val": "1b9e7e52-ff58-40c1-80bf-f68429a3275e",
+          "count": 4
+        },
+        {
+          "val": "151b796f-c5e1-40c9-89c0-ca391e8a31c0",
+          "count": 2
+        },
+        {
+          "val": "6f967cd5-687b-49ac-b4e3-b8d392374557",
+          "count": 1
+        },
+        {
+          "val": "",
+          "count": 4
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/issues-spec/search-with-tags.json b/server/sonar-web/src/test/json/issues-spec/search-with-tags.json
new file mode 100644 (file)
index 0000000..442b1de
--- /dev/null
@@ -0,0 +1,172 @@
+{
+  "total": 1,
+  "p": 1,
+  "ps": 50,
+  "projects": [
+    {
+      "uuid": "015c6451-1709-4360-b4fa-e4508e13082d",
+      "key": "org.codehaus.sonar-plugins.xml:xml",
+      "id": 17156,
+      "qualifier": "TRK",
+      "name": "XML",
+      "longName": "XML"
+    }
+  ],
+  "components": [
+    {
+      "uuid": "639e257b-d3fb-4d10-b94a-31079b71532d",
+      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml",
+      "id": 26177,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/org/sonar/plugins/xml",
+      "longName": "src/main/java/org/sonar/plugins/xml",
+      "path": "src/main/java/org/sonar/plugins/xml",
+      "projectId": 17156,
+      "subProjectId": 17158
+    },
+    {
+      "uuid": "015c6451-1709-4360-b4fa-e4508e13082d",
+      "key": "org.codehaus.sonar-plugins.xml:xml",
+      "id": 17156,
+      "enabled": true,
+      "qualifier": "TRK",
+      "name": "XML",
+      "longName": "XML"
+    }
+
+  ],
+  "issues": [
+    {
+      "key": "94357807-fcb4-40cc-9598-9a715f1eee6e",
+      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml",
+      "componentId": 26177,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:26:37+0200",
+      "updateDate": "2014-10-09T06:32:55+0200",
+      "fUpdateAge": "26 days",
+      "tags": [
+        "security",
+        "cwe"
+      ],
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity",
+        "set_tags"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    }
+  ],
+  "rules": [
+    {
+      "key": "squid:S1228",
+      "name": "Packages should have a javadoc file 'package-info.java'",
+      "desc": "<p>Each package in a Java project should include a <code>package-info.java</code> file. The purpose of this file is to document the Java package using javadoc and declare package annotations.</p>\n\n<h2>Compliant Solution</h2>\n<pre>\n/**\n* This package has non null parameters and is documented.\n**/\n@ParametersAreNonnullByDefault\npackage org.foo.bar;\n</pre>",
+      "status": "REMOVED"
+    }
+  ],
+  "users": [],
+  "languages": [
+    {
+      "key": "js",
+      "name": "JavaScript"
+    },
+    {
+      "key": "java",
+      "name": "Java"
+    }
+  ],
+  "maxResultsReached": false,
+  "paging": {
+    "pageIndex": 1,
+    "pageSize": 50,
+    "total": 1,
+    "fTotal": "1",
+    "pages": 1
+  },
+  "facets": [
+    {
+      "property": "severities",
+      "values": [
+        {
+          "val": "MAJOR",
+          "count": 1
+        },
+        {
+          "val": "INFO",
+          "count": 0
+        },
+        {
+          "val": "MINOR",
+          "count": 0
+        },
+        {
+          "val": "CRITICAL",
+          "count": 0
+        },
+        {
+          "val": "BLOCKER",
+          "count": 0
+        }
+      ]
+    },
+    {
+      "property": "statuses",
+      "values": [
+        {
+          "val": "CONFIRMED",
+          "count": 1
+        },
+        {
+          "val": "OPEN",
+          "count": 0
+        },
+        {
+          "val": "REOPENED",
+          "count": 0
+        },
+        {
+          "val": "CLOSED",
+          "count": 0
+        },
+        {
+          "val": "RESOLVED",
+          "count": 0
+        }
+      ]
+    },
+    {
+      "property": "resolutions",
+      "values": [
+        {
+          "val": "",
+          "count": 1
+        },
+        {
+          "val": "FIXED",
+          "count": 0
+        },
+        {
+          "val": "REMOVED",
+          "count": 0
+        },
+        {
+          "val": "FALSE-POSITIVE",
+          "count": 0
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/issues-spec/search.json b/server/sonar-web/src/test/json/issues-spec/search.json
new file mode 100644 (file)
index 0000000..3dbc631
--- /dev/null
@@ -0,0 +1,2103 @@
+{
+  "total": 4623,
+  "p": 1,
+  "ps": 50,
+  "projects": [
+    {
+      "uuid": "015c6451-1709-4360-b4fa-e4508e13082d",
+      "key": "org.codehaus.sonar-plugins.xml:xml",
+      "id": 17156,
+      "qualifier": "TRK",
+      "name": "XML",
+      "longName": "XML"
+    },
+    {
+      "uuid": "071bdfec-a244-444d-877e-772a68973e18",
+      "key": "com.sonarsource.plugins.vb:vb",
+      "id": 28554,
+      "qualifier": "TRK",
+      "name": "SonarSource :: Visual Basic",
+      "longName": "SonarSource :: Visual Basic"
+    }
+  ],
+  "components": [
+    {
+      "uuid": "367350ce-00c7-461b-8348-c64138515ef9",
+      "key": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks/UnusedPrivateVariableCheck.java",
+      "id": 29801,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "UnusedPrivateVariableCheck.java",
+      "longName": "src/main/java/com/sonar/vb/checks/UnusedPrivateVariableCheck.java",
+      "path": "src/main/java/com/sonar/vb/checks/UnusedPrivateVariableCheck.java",
+      "projectId": 28554,
+      "subProjectId": 29689
+    },
+    {
+      "uuid": "2c39c99e-6c3e-4635-a673-fbd876eb2107",
+      "key": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/CDataDocTokenizer.java",
+      "id": 19130,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "CDataDocTokenizer.java",
+      "longName": "src/main/java/org/sonar/xml/CDataDocTokenizer.java",
+      "path": "src/main/java/org/sonar/xml/CDataDocTokenizer.java",
+      "projectId": 17156,
+      "subProjectId": 17157
+    },
+    {
+      "uuid": "729bcb00-97b2-432d-b36e-06174e0bea26",
+      "key": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/XmlStartElementTokenizer.java",
+      "id": 19132,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "XmlStartElementTokenizer.java",
+      "longName": "src/main/java/org/sonar/xml/XmlStartElementTokenizer.java",
+      "path": "src/main/java/org/sonar/xml/XmlStartElementTokenizer.java",
+      "projectId": 17156,
+      "subProjectId": 17157
+    },
+    {
+      "uuid": "e1cf7541-9f52-4c9c-864e-85257b6126da",
+      "key": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/api",
+      "id": 26175,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/org/sonar/xml/api",
+      "longName": "src/main/java/org/sonar/xml/api",
+      "path": "src/main/java/org/sonar/xml/api",
+      "projectId": 17156,
+      "subProjectId": 17157
+    },
+    {
+      "uuid": "23eaa59a-36dd-484d-9cb3-af9ddac0943f",
+      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/parsers/AbstractParser.java",
+      "id": 17191,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "AbstractParser.java",
+      "longName": "src/main/java/org/sonar/plugins/xml/parsers/AbstractParser.java",
+      "path": "src/main/java/org/sonar/plugins/xml/parsers/AbstractParser.java",
+      "projectId": 17156,
+      "subProjectId": 17158
+    },
+    {
+      "uuid": "730a7d9f-f280-48dd-9a09-de210f5db607",
+      "key": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml",
+      "id": 26174,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/org/sonar/xml",
+      "longName": "src/main/java/org/sonar/xml",
+      "path": "src/main/java/org/sonar/xml",
+      "projectId": 17156,
+      "subProjectId": 17157
+    },
+    {
+      "uuid": "45d36e11-d9ed-4157-8a2c-916d2e131af7",
+      "key": "org.codehaus.sonar-plugins.xml:sslr-xml-toolkit",
+      "id": 17257,
+      "enabled": true,
+      "qualifier": "BRC",
+      "name": "XML :: SSLR Toolkit",
+      "longName": "XML :: SSLR Toolkit",
+      "path": "sslr-xml-toolkit",
+      "projectId": 17156,
+      "subProjectId": 17156
+    },
+    {
+      "uuid": "e3ac3a3e-ac1b-4e3a-8e38-039e06a2ca38",
+      "key": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/LineContinuationChannel.java",
+      "id": 28613,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "LineContinuationChannel.java",
+      "longName": "src/main/java/com/sonar/vb/LineContinuationChannel.java",
+      "path": "src/main/java/com/sonar/vb/LineContinuationChannel.java",
+      "projectId": 28554,
+      "subProjectId": 28555
+    },
+    {
+      "uuid": "7428200d-ce03-464d-a099-593092cd0291",
+      "key": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks/TrailingCommentCheck.java",
+      "id": 29769,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "TrailingCommentCheck.java",
+      "longName": "src/main/java/com/sonar/vb/checks/TrailingCommentCheck.java",
+      "path": "src/main/java/com/sonar/vb/checks/TrailingCommentCheck.java",
+      "projectId": 28554,
+      "subProjectId": 29689
+    },
+    {
+      "uuid": "966aa6fd-9463-422c-b785-208ad519e4ea",
+      "key": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/ProgressAstScanner.java",
+      "id": 28614,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "ProgressAstScanner.java",
+      "longName": "src/main/java/com/sonar/vb/ProgressAstScanner.java",
+      "path": "src/main/java/com/sonar/vb/ProgressAstScanner.java",
+      "projectId": 28554,
+      "subProjectId": 28555
+    },
+    {
+      "uuid": "c236560b-b257-4f34-bb7b-3977d178e1ff",
+      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/AbstractXmlCheck.java",
+      "id": 17168,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "AbstractXmlCheck.java",
+      "longName": "src/main/java/org/sonar/plugins/xml/checks/AbstractXmlCheck.java",
+      "path": "src/main/java/org/sonar/plugins/xml/checks/AbstractXmlCheck.java",
+      "projectId": 17156,
+      "subProjectId": 17158
+    },
+    {
+      "uuid": "26f2099c-664b-424a-b815-c017eb2165b1",
+      "key": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks",
+      "id": 29690,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/com/sonar/vb/checks",
+      "longName": "src/main/java/com/sonar/vb/checks",
+      "path": "src/main/java/com/sonar/vb/checks",
+      "projectId": 28554,
+      "subProjectId": 29689
+    },
+    {
+      "uuid": "4adacc63-7447-4bb1-95ae-1cc5102e8335",
+      "key": "com.sonarsource.plugins.vb:vb-checks",
+      "id": 29689,
+      "enabled": true,
+      "qualifier": "BRC",
+      "name": "SonarSource :: Visual Basic :: Checks",
+      "longName": "SonarSource :: Visual Basic :: Checks",
+      "path": "vb-checks",
+      "projectId": 28554,
+      "subProjectId": 28554
+    },
+    {
+      "uuid": "fa92c266-befe-460c-8bad-1ff13b918ec5",
+      "key": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb",
+      "id": 28611,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/com/sonar/vb",
+      "longName": "src/main/java/com/sonar/vb",
+      "path": "src/main/java/com/sonar/vb",
+      "projectId": 28554,
+      "subProjectId": 28555
+    },
+    {
+      "uuid": "e92b1510-91c3-4479-8714-44fa3a139f7c",
+      "key": "com.sonarsource.plugins.vb:sonar-vb-plugin",
+      "id": 28610,
+      "enabled": true,
+      "qualifier": "BRC",
+      "name": "SonarSource :: Visual Basic :: Sonar Plugin",
+      "longName": "SonarSource :: Visual Basic :: Sonar Plugin",
+      "path": "sonar-vb-plugin",
+      "projectId": 28554,
+      "subProjectId": 28554
+    },
+    {
+      "uuid": "1f609143-c6a4-4f76-ac38-370d349feaf7",
+      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/schemas",
+      "id": 26182,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/org/sonar/plugins/xml/schemas",
+      "longName": "src/main/java/org/sonar/plugins/xml/schemas",
+      "path": "src/main/java/org/sonar/plugins/xml/schemas",
+      "projectId": 17156,
+      "subProjectId": 17158
+    },
+    {
+      "uuid": "7abb4d57-160a-41ba-927f-b53603e843b8",
+      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/schemas/SchemaResolver.java",
+      "id": 17178,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "SchemaResolver.java",
+      "longName": "src/main/java/org/sonar/plugins/xml/schemas/SchemaResolver.java",
+      "path": "src/main/java/org/sonar/plugins/xml/schemas/SchemaResolver.java",
+      "projectId": 17156,
+      "subProjectId": 17158
+    },
+    {
+      "uuid": "c960a7a1-e078-47de-8a31-167b0f774002",
+      "key": "org.codehaus.sonar-plugins.xml:sslr-xml-toolkit:src/main/java/org/sonar/xml/toolkit",
+      "id": 26183,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/org/sonar/xml/toolkit",
+      "longName": "src/main/java/org/sonar/xml/toolkit",
+      "path": "src/main/java/org/sonar/xml/toolkit",
+      "projectId": 17156,
+      "subProjectId": 17257
+    },
+    {
+      "uuid": "7d14bd3e-33b7-4b0f-ade5-cf6cef0085b9",
+      "key": "com.sonarsource.plugins.vb:vb-squid",
+      "id": 28555,
+      "enabled": true,
+      "qualifier": "BRC",
+      "name": "SonarSource :: Visual Basic :: Squid",
+      "longName": "SonarSource :: Visual Basic :: Squid",
+      "path": "vb-squid",
+      "projectId": 28554,
+      "subProjectId": 28554
+    },
+    {
+      "uuid": "d9716626-0952-4ec7-a8fb-2760ba3256a3",
+      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/parsers",
+      "id": 26180,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/org/sonar/plugins/xml/parsers",
+      "longName": "src/main/java/org/sonar/plugins/xml/parsers",
+      "path": "src/main/java/org/sonar/plugins/xml/parsers",
+      "projectId": 17156,
+      "subProjectId": 17158
+    },
+    {
+      "uuid": "071bdfec-a244-444d-877e-772a68973e18",
+      "key": "com.sonarsource.plugins.vb:vb",
+      "id": 28554,
+      "enabled": true,
+      "qualifier": "TRK",
+      "name": "SonarSource :: Visual Basic",
+      "longName": "SonarSource :: Visual Basic"
+    },
+    {
+      "uuid": "99d31cea-6b8f-4fb6-ba87-c86ce8d339cf",
+      "key": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/api",
+      "id": 28622,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/com/sonar/vb/api",
+      "longName": "src/main/java/com/sonar/vb/api",
+      "path": "src/main/java/com/sonar/vb/api",
+      "projectId": 28554,
+      "subProjectId": 28555
+    },
+    {
+      "uuid": "26facc1b-fd2b-4fe4-a543-65e9ec692360",
+      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/rules",
+      "id": 26181,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/org/sonar/plugins/xml/rules",
+      "longName": "src/main/java/org/sonar/plugins/xml/rules",
+      "path": "src/main/java/org/sonar/plugins/xml/rules",
+      "projectId": 17156,
+      "subProjectId": 17158
+    },
+    {
+      "uuid": "d789993b-c5fe-414b-9164-33871fd3c3c2",
+      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks",
+      "id": 26178,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/org/sonar/plugins/xml/checks",
+      "longName": "src/main/java/org/sonar/plugins/xml/checks",
+      "path": "src/main/java/org/sonar/plugins/xml/checks",
+      "projectId": 17156,
+      "subProjectId": 17158
+    },
+    {
+      "uuid": "91715de9-47ed-4837-a51b-4dcead30a71c",
+      "key": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/plugin",
+      "id": 28952,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/com/sonar/vb/plugin",
+      "longName": "src/main/java/com/sonar/vb/plugin",
+      "path": "src/main/java/com/sonar/vb/plugin",
+      "projectId": 28554,
+      "subProjectId": 28610
+    },
+    {
+      "uuid": "3c338bdb-39c9-4cb8-9b13-2e08358047d6",
+      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/language",
+      "id": 26179,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/org/sonar/plugins/xml/language",
+      "longName": "src/main/java/org/sonar/plugins/xml/language",
+      "path": "src/main/java/org/sonar/plugins/xml/language",
+      "projectId": 17156,
+      "subProjectId": 17158
+    },
+    {
+      "uuid": "639e257b-d3fb-4d10-b94a-31079b71532d",
+      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml",
+      "id": 26177,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/org/sonar/plugins/xml",
+      "longName": "src/main/java/org/sonar/plugins/xml",
+      "path": "src/main/java/org/sonar/plugins/xml",
+      "projectId": 17156,
+      "subProjectId": 17158
+    },
+    {
+      "uuid": "08bafb36-5990-4f10-821c-534dc451d297",
+      "key": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks/NumberedLineProcessor.java",
+      "id": 29907,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "NumberedLineProcessor.java",
+      "longName": "src/main/java/com/sonar/vb/checks/NumberedLineProcessor.java",
+      "path": "src/main/java/com/sonar/vb/checks/NumberedLineProcessor.java",
+      "projectId": 28554,
+      "subProjectId": 29689
+    },
+    {
+      "uuid": "e3bb947b-9385-4972-8367-f69beb488d21",
+      "key": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/metrics/LinesOfCodeVisitor.java",
+      "id": 28629,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "LinesOfCodeVisitor.java",
+      "longName": "src/main/java/com/sonar/vb/metrics/LinesOfCodeVisitor.java",
+      "path": "src/main/java/com/sonar/vb/metrics/LinesOfCodeVisitor.java",
+      "projectId": 28554,
+      "subProjectId": 28555
+    },
+    {
+      "uuid": "dd9c314f-0c19-498d-9e16-67ef0b49486e",
+      "key": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/colorizer",
+      "id": 28932,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/com/sonar/vb/colorizer",
+      "longName": "src/main/java/com/sonar/vb/colorizer",
+      "path": "src/main/java/com/sonar/vb/colorizer",
+      "projectId": 28554,
+      "subProjectId": 28610
+    },
+    {
+      "uuid": "9d771010-5d4f-49ed-9f70-ff131189610d",
+      "key": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/pp",
+      "id": 28630,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/com/sonar/vb/pp",
+      "longName": "src/main/java/com/sonar/vb/pp",
+      "path": "src/main/java/com/sonar/vb/pp",
+      "projectId": 28554,
+      "subProjectId": 28555
+    },
+    {
+      "uuid": "8597e351-39d2-4b17-8422-00409d21bccd",
+      "key": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/cpd",
+      "id": 28935,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/com/sonar/vb/cpd",
+      "longName": "src/main/java/com/sonar/vb/cpd",
+      "path": "src/main/java/com/sonar/vb/cpd",
+      "projectId": 28554,
+      "subProjectId": 28610
+    },
+    {
+      "uuid": "9d44133a-d633-48b4-a54b-800df905a1fd",
+      "key": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/pp/EmptyLinesRemovalPreprocessor.java",
+      "id": 28631,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "EmptyLinesRemovalPreprocessor.java",
+      "longName": "src/main/java/com/sonar/vb/pp/EmptyLinesRemovalPreprocessor.java",
+      "path": "src/main/java/com/sonar/vb/pp/EmptyLinesRemovalPreprocessor.java",
+      "projectId": 28554,
+      "subProjectId": 28555
+    },
+    {
+      "uuid": "b6d552ca-aabe-499b-9c72-18247177ae68",
+      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin",
+      "id": 17158,
+      "enabled": true,
+      "qualifier": "BRC",
+      "name": "XML :: SonarQube Plugin",
+      "longName": "XML :: SonarQube Plugin",
+      "path": "sonar-xml-plugin",
+      "projectId": 17156,
+      "subProjectId": 17156
+    },
+    {
+      "uuid": "2e9ae8fd-fa5c-48a4-a0f6-1eaba1c38a2f",
+      "key": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/batch",
+      "id": 28928,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/com/sonar/vb/batch",
+      "longName": "src/main/java/com/sonar/vb/batch",
+      "path": "src/main/java/com/sonar/vb/batch",
+      "projectId": 28554,
+      "subProjectId": 28610
+    },
+    {
+      "uuid": "015c6451-1709-4360-b4fa-e4508e13082d",
+      "key": "org.codehaus.sonar-plugins.xml:xml",
+      "id": 17156,
+      "enabled": true,
+      "qualifier": "TRK",
+      "name": "XML",
+      "longName": "XML"
+    },
+    {
+      "uuid": "1bb3f177-d173-469e-a178-6ae8078bd765",
+      "key": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/metrics",
+      "id": 28626,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/com/sonar/vb/metrics",
+      "longName": "src/main/java/com/sonar/vb/metrics",
+      "path": "src/main/java/com/sonar/vb/metrics",
+      "projectId": 28554,
+      "subProjectId": 28555
+    },
+    {
+      "uuid": "216ebdfc-9fc9-4c06-9f14-859d051fae69",
+      "key": "org.codehaus.sonar-plugins.xml:xml-squid",
+      "id": 17157,
+      "enabled": true,
+      "qualifier": "BRC",
+      "name": "XML :: Squid",
+      "longName": "XML :: Squid",
+      "path": "xml-squid",
+      "projectId": 17156,
+      "subProjectId": 17156
+    },
+    {
+      "uuid": "aad717d1-12f5-48c0-9273-0c9aac102467",
+      "key": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/metrics/CommentsVisitor.java",
+      "id": 28627,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "CommentsVisitor.java",
+      "longName": "src/main/java/com/sonar/vb/metrics/CommentsVisitor.java",
+      "path": "src/main/java/com/sonar/vb/metrics/CommentsVisitor.java",
+      "projectId": 28554,
+      "subProjectId": 28555
+    },
+    {
+      "uuid": "53ecdff7-a6af-4cc9-b30c-7656a33cf732",
+      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/XPathCheck.java",
+      "id": 17162,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "XPathCheck.java",
+      "longName": "src/main/java/org/sonar/plugins/xml/checks/XPathCheck.java",
+      "path": "src/main/java/org/sonar/plugins/xml/checks/XPathCheck.java",
+      "projectId": 17156,
+      "subProjectId": 17158
+    },
+    {
+      "uuid": "d8f590fb-5a56-49a9-991c-4c9d4ec5a7fe",
+      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/IndentCheck.java",
+      "id": 17163,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "IndentCheck.java",
+      "longName": "src/main/java/org/sonar/plugins/xml/checks/IndentCheck.java",
+      "path": "src/main/java/org/sonar/plugins/xml/checks/IndentCheck.java",
+      "projectId": 17156,
+      "subProjectId": 17158
+    },
+    {
+      "uuid": "7d79ad61-0f0a-449a-bdce-fd544c8d8d27",
+      "key": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/api/XmlGrammar.java",
+      "id": 17160,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "XmlGrammar.java",
+      "longName": "src/main/java/org/sonar/xml/api/XmlGrammar.java",
+      "path": "src/main/java/org/sonar/xml/api/XmlGrammar.java",
+      "projectId": 17156,
+      "subProjectId": 17157
+    },
+    {
+      "uuid": "be763c66-8400-432d-9e84-bc2e9d6e164c",
+      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/NewlineCheck.java",
+      "id": 17166,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "NewlineCheck.java",
+      "longName": "src/main/java/org/sonar/plugins/xml/checks/NewlineCheck.java",
+      "path": "src/main/java/org/sonar/plugins/xml/checks/NewlineCheck.java",
+      "projectId": 17156,
+      "subProjectId": 17158
+    },
+    {
+      "uuid": "c2c82fc7-073f-449e-bb18-ebbf60ceb1d9",
+      "key": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/cpd/VbCpdTokenizer.java",
+      "id": 28937,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "VbCpdTokenizer.java",
+      "longName": "src/main/java/com/sonar/vb/cpd/VbCpdTokenizer.java",
+      "path": "src/main/java/com/sonar/vb/cpd/VbCpdTokenizer.java",
+      "projectId": 28554,
+      "subProjectId": 28610
+    },
+    {
+      "uuid": "bc2e055a-eb0a-4ba6-8c06-8390bdb2c08a",
+      "key": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks/ExpressionComplexityCheck.java",
+      "id": 29783,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "ExpressionComplexityCheck.java",
+      "longName": "src/main/java/com/sonar/vb/checks/ExpressionComplexityCheck.java",
+      "path": "src/main/java/com/sonar/vb/checks/ExpressionComplexityCheck.java",
+      "projectId": 28554,
+      "subProjectId": 29689
+    },
+    {
+      "uuid": "7bbe651e-5b83-4002-9fa9-79397693d529",
+      "key": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/XmlSchemaCheck.java",
+      "id": 17164,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "XmlSchemaCheck.java",
+      "longName": "src/main/java/org/sonar/plugins/xml/checks/XmlSchemaCheck.java",
+      "path": "src/main/java/org/sonar/plugins/xml/checks/XmlSchemaCheck.java",
+      "projectId": 17156,
+      "subProjectId": 17158
+    },
+    {
+      "uuid": "2dc0e6d7-09b9-4f99-a25e-acf288b26581",
+      "key": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/foundation",
+      "id": 28938,
+      "enabled": true,
+      "qualifier": "DIR",
+      "name": "src/main/java/com/sonar/vb/foundation",
+      "longName": "src/main/java/com/sonar/vb/foundation",
+      "path": "src/main/java/com/sonar/vb/foundation",
+      "projectId": 28554,
+      "subProjectId": 28610
+    }
+  ],
+  "issues": [
+    {
+      "key": "94357807-fcb4-40cc-9598-9a715f1eee6e",
+      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml",
+      "componentId": 26177,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:26:37+0200",
+      "updateDate": "2014-10-09T06:32:55+0200",
+      "fUpdateAge": "26 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "c24088ec-b204-4744-827e-7509fd34c2a7",
+      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks",
+      "componentId": 26178,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml/checks' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:26:37+0200",
+      "updateDate": "2014-10-09T06:33:02+0200",
+      "fUpdateAge": "26 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "e5f8e82a-2765-4084-ba57-4a81ee8da1df",
+      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/AbstractXmlCheck.java",
+      "componentId": 17168,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "common-java:InsufficientBranchCoverage",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "1 more branches need to be covered by unit tests to reach the minimum threshold of 65.0% branch coverage.",
+      "debt": "10min",
+      "creationDate": "2013-02-05T00:47:29+0100",
+      "updateDate": "2014-02-14T23:34:11+0100",
+      "fUpdateAge": "8 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "56f021c3-b717-4cc8-9fad-5f1911a8d66f",
+      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/IndentCheck.java",
+      "componentId": 17163,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:MethodCyclomaticComplexity",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "The Cyclomatic Complexity of this method \"collectIndent\" is 13 which is greater than 10 authorized.",
+      "line": 47,
+      "debt": "10min",
+      "author": "Evgeny Mandrikov",
+      "creationDate": "2013-02-05T00:47:29+0100",
+      "updateDate": "2013-12-18T23:52:20+0100",
+      "fUpdateAge": "10 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "b32333fe-7efd-4bc8-a72b-bad90361af1a",
+      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/IndentCheck.java",
+      "componentId": 17163,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1151",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Reduce this switch case number of lines from 26 to at most 5, for example by extracting code into methods.",
+      "line": 54,
+      "debt": "10min",
+      "author": "Evgeny Mandrikov",
+      "creationDate": "2013-08-11T00:06:49+0200",
+      "updateDate": "2013-10-23T15:15:05+0200",
+      "fUpdateAge": "about a year",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "2174148b-6be9-4213-8f57-c63576904e9e",
+      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/IndentCheck.java",
+      "componentId": 17163,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S134",
+      "status": "CONFIRMED",
+      "severity": "MINOR",
+      "message": "Refactor this code to not nest more than 4 if/for/while/switch/try statements.",
+      "line": 59,
+      "debt": "20min",
+      "author": "mandrikov@gmail.com",
+      "creationDate": "2013-10-18T23:46:56+0200",
+      "updateDate": "2013-12-18T23:52:20+0100",
+      "fUpdateAge": "10 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "633c9ba7-b757-4bdf-9e91-ff2ccbc9dd74",
+      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/NewlineCheck.java",
+      "componentId": 17166,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1151",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Reduce this switch case number of lines from 9 to at most 5, for example by extracting code into methods.",
+      "line": 49,
+      "debt": "10min",
+      "author": "Evgeny Mandrikov",
+      "creationDate": "2013-08-11T00:06:49+0200",
+      "updateDate": "2013-10-23T15:15:05+0200",
+      "fUpdateAge": "about a year",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "63f5037f-a060-4cec-820a-25221a4cc313",
+      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/NewlineCheck.java",
+      "componentId": 17166,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1151",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Reduce this switch case number of lines from 6 to at most 5, for example by extracting code into methods.",
+      "line": 58,
+      "debt": "10min",
+      "author": "Evgeny Mandrikov",
+      "creationDate": "2013-08-13T23:58:09+0200",
+      "updateDate": "2013-10-23T15:15:05+0200",
+      "fUpdateAge": "about a year",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "bf75fe08-7ddc-4c69-989d-7e5b83cee043",
+      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/XmlSchemaCheck.java",
+      "componentId": 17164,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:RightCurlyBraceSameLineAsNextBlockCheck",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Move this \"else\" on the same line that the previous closing curly brace.",
+      "line": 167,
+      "debt": "1min",
+      "author": "Evgeny Mandrikov",
+      "creationDate": "2013-08-07T23:58:51+0200",
+      "updateDate": "2013-10-23T15:15:05+0200",
+      "fUpdateAge": "about a year",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "6d6e64ae-94cd-4367-a9bc-df51093a6468",
+      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/XmlSchemaCheck.java",
+      "componentId": 17164,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "common-java:InsufficientBranchCoverage",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "5 more branches need to be covered by unit tests to reach the minimum threshold of 65.0% branch coverage.",
+      "debt": "50min",
+      "creationDate": "2013-02-05T00:47:29+0100",
+      "updateDate": "2014-06-06T15:53:08+0200",
+      "fUpdateAge": "5 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "5ddc1783-3c72-4f68-bbd1-d2d1fad425eb",
+      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/checks/XPathCheck.java",
+      "componentId": 17162,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "common-java:InsufficientBranchCoverage",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "1 more branches need to be covered by unit tests to reach the minimum threshold of 65.0% branch coverage.",
+      "debt": "10min",
+      "creationDate": "2014-06-06T15:53:08+0200",
+      "updateDate": "2014-06-06T16:53:27+0200",
+      "fUpdateAge": "5 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "f0853649-fe5e-4c6c-92b9-42ad460fcc0f",
+      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/language",
+      "componentId": 26179,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml/language' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:26:37+0200",
+      "updateDate": "2014-10-09T06:32:43+0200",
+      "fUpdateAge": "26 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "24f4c570-a96d-42ea-a99e-60aded51d69c",
+      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/parsers",
+      "componentId": 26180,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml/parsers' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:26:37+0200",
+      "updateDate": "2014-10-09T06:32:48+0200",
+      "fUpdateAge": "26 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "aeeb9e4e-fd39-4b7e-a482-36d9da710127",
+      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/parsers/AbstractParser.java",
+      "componentId": 17191,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1694",
+      "status": "OPEN",
+      "severity": "MAJOR",
+      "message": "Convert this \"AbstractParser\" class to a concrete class with a private constructor",
+      "line": 33,
+      "debt": "5min",
+      "author": "matthijs.galesloot@gmail.com",
+      "creationDate": "2014-06-26T23:08:13+0200",
+      "updateDate": "2014-07-23T23:07:58+0200",
+      "fUpdateAge": "3 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "66a25a73-b555-4c35-8bc5-536da40a3493",
+      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/rules",
+      "componentId": 26181,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml/rules' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:26:37+0200",
+      "updateDate": "2014-10-09T06:33:03+0200",
+      "fUpdateAge": "26 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "89695ec6-63c2-457f-966b-b2cfd7ad8489",
+      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/schemas",
+      "componentId": 26182,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml/schemas' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:26:37+0200",
+      "updateDate": "2014-10-09T06:32:50+0200",
+      "fUpdateAge": "26 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "3ac6d2e6-6af2-435f-abc7-b281f3676d34",
+      "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml/schemas/SchemaResolver.java",
+      "componentId": 17178,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1192",
+      "status": "CONFIRMED",
+      "severity": "MINOR",
+      "message": "Define a constant instead of duplicating this literal \"xhtml1/xhtml1-strict.xsd\" 3 times.",
+      "line": 58,
+      "debt": "10min",
+      "author": "Evgeny Mandrikov",
+      "creationDate": "2013-08-22T23:52:06+0200",
+      "updateDate": "2014-04-24T23:32:18+0200",
+      "fUpdateAge": "6 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "39942422-fbc2-4383-81fe-82777eb3ce7f",
+      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml",
+      "componentId": 26174,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/xml' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:26:37+0200",
+      "updateDate": "2014-10-09T06:33:07+0200",
+      "fUpdateAge": "26 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "e44fb44e-df1c-460a-b807-66ff79e21194",
+      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/api",
+      "componentId": 26175,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/xml/api' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:26:37+0200",
+      "updateDate": "2014-10-09T06:32:52+0200",
+      "fUpdateAge": "26 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "08f9aedf-5119-4875-8e58-260bfc2e3f69",
+      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/api/XmlGrammar.java",
+      "componentId": 17160,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S138",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "This method has 233 lines, which is greater than the 100 lines authorized. Split it into smaller methods.",
+      "line": 134,
+      "debt": "1h",
+      "author": "Dinesh Bolkensteyn",
+      "creationDate": "2013-08-22T23:52:06+0200",
+      "updateDate": "2013-10-23T15:15:05+0200",
+      "fUpdateAge": "about a year",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "f781c518-83bd-4bd9-8806-c889d0711a39",
+      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/CDataDocTokenizer.java",
+      "componentId": 19130,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1067",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Reduce the number of conditional operators (4) used in the expression (maximum allowed 3).",
+      "line": 47,
+      "debt": "10min",
+      "author": "Dinesh Bolkensteyn",
+      "creationDate": "2013-08-28T23:50:16+0200",
+      "updateDate": "2013-10-23T15:15:05+0200",
+      "fUpdateAge": "about a year",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "cdde8bbf-9d13-4832-8faa-4d189d79fb6b",
+      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/CDataDocTokenizer.java",
+      "componentId": 19130,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1698",
+      "status": "OPEN",
+      "severity": "MAJOR",
+      "message": "Change this comparison to use the equals method.",
+      "line": 82,
+      "debt": "2min",
+      "author": "dinesh.bolkensteyn@sonarsource.com",
+      "creationDate": "2014-06-26T23:08:13+0200",
+      "updateDate": "2014-06-26T23:08:13+0200",
+      "fUpdateAge": "4 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "f9eae4c0-ca44-440f-aeb7-327dca040f57",
+      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/CDataDocTokenizer.java",
+      "componentId": 19130,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "common-java:InsufficientBranchCoverage",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "3 more branches need to be covered by unit tests to reach the minimum threshold of 65.0% branch coverage.",
+      "debt": "30min",
+      "creationDate": "2013-04-04T15:37:48+0200",
+      "updateDate": "2014-02-14T23:34:11+0100",
+      "fUpdateAge": "8 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "19516152-0ad2-485a-bc5f-576d19f5dea4",
+      "component": "org.codehaus.sonar-plugins.xml:sslr-xml-toolkit:src/main/java/org/sonar/xml/toolkit",
+      "componentId": 26183,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/xml/toolkit' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:26:37+0200",
+      "updateDate": "2014-10-09T06:33:05+0200",
+      "fUpdateAge": "26 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "2c767e87-dd31-4803-b8da-581dddb8b73b",
+      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/XmlStartElementTokenizer.java",
+      "componentId": 19132,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1142",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Reduce the number of returns of this method 7, down to the maximum allowed 5.",
+      "line": 74,
+      "debt": "20min",
+      "author": "Dinesh Bolkensteyn",
+      "creationDate": "2013-08-11T00:06:49+0200",
+      "updateDate": "2013-10-23T15:15:05+0200",
+      "fUpdateAge": "about a year",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "f8665ff6-6f1b-4014-acb9-2d8cbcd9bd8b",
+      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/XmlStartElementTokenizer.java",
+      "componentId": 19132,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:MethodCyclomaticComplexity",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "The Cyclomatic Complexity of this method \"consumeStartElement\" is 15 which is greater than 10 authorized.",
+      "line": 74,
+      "debt": "10min",
+      "author": "Dinesh Bolkensteyn",
+      "creationDate": "2013-04-04T15:37:48+0200",
+      "updateDate": "2013-12-18T23:52:20+0100",
+      "fUpdateAge": "10 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "5f039a47-9dcc-474e-894c-5598720cb4e0",
+      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/XmlStartElementTokenizer.java",
+      "componentId": 19132,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1698",
+      "status": "OPEN",
+      "severity": "MAJOR",
+      "message": "Change this comparison to use the equals method.",
+      "line": 155,
+      "debt": "2min",
+      "author": "dinesh.bolkensteyn@sonarsource.com",
+      "creationDate": "2014-06-26T23:08:13+0200",
+      "updateDate": "2014-06-26T23:08:13+0200",
+      "fUpdateAge": "4 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "7985c68b-2a1d-4aa7-af55-bb6236a01450",
+      "component": "org.codehaus.sonar-plugins.xml:xml-squid:src/main/java/org/sonar/xml/XmlStartElementTokenizer.java",
+      "componentId": 19132,
+      "project": "org.codehaus.sonar-plugins.xml:xml",
+      "rule": "squid:S1698",
+      "status": "OPEN",
+      "severity": "MAJOR",
+      "message": "Change this comparison to use the equals method.",
+      "line": 160,
+      "debt": "2min",
+      "author": "dinesh.bolkensteyn@sonarsource.com",
+      "creationDate": "2014-06-26T23:08:13+0200",
+      "updateDate": "2014-06-26T23:08:13+0200",
+      "fUpdateAge": "4 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "d0dba7cd-e31d-4577-a047-644cdc7e2172",
+      "component": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb",
+      "componentId": 28611,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:05:55+0200",
+      "updateDate": "2014-10-09T06:37:50+0200",
+      "fUpdateAge": "26 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "6d77a59b-53c2-444c-b288-a803d1f7f18d",
+      "component": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/api",
+      "componentId": 28622,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb/api' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:05:55+0200",
+      "updateDate": "2014-10-09T06:38:38+0200",
+      "fUpdateAge": "26 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "bda16272-3785-47af-a0cd-c3fd3c581887",
+      "component": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/batch",
+      "componentId": 28928,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb/batch' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:05:55+0200",
+      "updateDate": "2014-10-09T06:38:06+0200",
+      "fUpdateAge": "26 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "4ea78cde-76c0-41ad-8809-a4e406168a00",
+      "component": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks",
+      "componentId": 29690,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb/checks' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:05:55+0200",
+      "updateDate": "2014-10-09T06:38:04+0200",
+      "fUpdateAge": "26 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "459f9f04-0901-4250-9e9b-946d505455ac",
+      "component": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks/ExpressionComplexityCheck.java",
+      "componentId": 29783,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "squid:S1698",
+      "status": "OPEN",
+      "severity": "MAJOR",
+      "message": "Change this comparison to use the equals method.",
+      "line": 54,
+      "debt": "2min",
+      "author": "pierre-yves.nicolas@sonarsource.com",
+      "creationDate": "2014-06-26T23:07:23+0200",
+      "updateDate": "2014-06-26T23:07:23+0200",
+      "fUpdateAge": "4 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "47ec8d6b-b7df-4e8c-a254-f9ccf7c0b90a",
+      "component": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks/NumberedLineProcessor.java",
+      "componentId": 29907,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "common-java:DuplicatedBlocks",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "1 duplicated blocks of code.",
+      "debt": "1h",
+      "creationDate": "2014-05-01T23:14:46+0200",
+      "updateDate": "2014-05-02T09:05:22+0200",
+      "fUpdateAge": "6 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "84f34eb4-5aec-419b-8a2d-094d79d7969a",
+      "component": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks/TrailingCommentCheck.java",
+      "componentId": 29769,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "common-java:DuplicatedBlocks",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "4 duplicated blocks of code.",
+      "debt": "4h",
+      "creationDate": "2014-04-14T23:14:16+0200",
+      "updateDate": "2014-05-23T23:13:54+0200",
+      "fUpdateAge": "5 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "bd85131c-2bac-474d-ac0f-2cf3c8848d40",
+      "component": "com.sonarsource.plugins.vb:vb-checks:src/main/java/com/sonar/vb/checks/UnusedPrivateVariableCheck.java",
+      "componentId": 29801,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "squid:S1643",
+      "status": "REOPENED",
+      "severity": "MAJOR",
+      "message": "Use a StringBuilder instead.",
+      "line": 57,
+      "debt": "10min",
+      "author": "pierre-yves.nicolas@sonarsource.com",
+      "creationDate": "2014-06-26T23:07:23+0200",
+      "updateDate": "2014-11-03T09:50:23+0100",
+      "fUpdateAge": "a day",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "0f81cd62-e82d-44b1-8773-a7a61536a516",
+      "component": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/colorizer",
+      "componentId": 28932,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb/colorizer' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:05:55+0200",
+      "updateDate": "2014-10-09T06:38:03+0200",
+      "fUpdateAge": "26 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "c7d665b1-0d77-4f7b-b893-8678c5324a70",
+      "component": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/cpd",
+      "componentId": 28935,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb/cpd' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:05:55+0200",
+      "updateDate": "2014-10-09T06:38:30+0200",
+      "fUpdateAge": "26 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "47780a07-2b00-47bb-a5e0-91af1ab53b49",
+      "component": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/cpd/VbCpdTokenizer.java",
+      "componentId": 28937,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "squid:S1698",
+      "status": "OPEN",
+      "severity": "MAJOR",
+      "message": "Change this comparison to use the equals method.",
+      "line": 55,
+      "debt": "2min",
+      "author": "julien.henry@sonarsource.com",
+      "creationDate": "2014-06-26T23:07:23+0200",
+      "updateDate": "2014-06-26T23:07:23+0200",
+      "fUpdateAge": "4 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "4882c235-98a2-4ac8-8131-acbe30010be5",
+      "component": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/cpd/VbCpdTokenizer.java",
+      "componentId": 28937,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "squid:S1698",
+      "status": "OPEN",
+      "severity": "MAJOR",
+      "message": "Change this comparison to use the equals method.",
+      "line": 55,
+      "debt": "2min",
+      "author": "julien.henry@sonarsource.com",
+      "creationDate": "2014-06-26T23:07:23+0200",
+      "updateDate": "2014-06-26T23:07:23+0200",
+      "fUpdateAge": "4 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "a7816c2c-4a24-4edc-955b-4bf064c8da6c",
+      "component": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/cpd/VbCpdTokenizer.java",
+      "componentId": 28937,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "squid:S1698",
+      "status": "OPEN",
+      "severity": "MAJOR",
+      "message": "Change this comparison to use the equals method.",
+      "line": 55,
+      "debt": "2min",
+      "author": "julien.henry@sonarsource.com",
+      "creationDate": "2014-06-26T23:07:23+0200",
+      "updateDate": "2014-06-26T23:07:23+0200",
+      "fUpdateAge": "4 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "5c6bc4d6-560f-47c7-9170-873c7ec51243",
+      "component": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/foundation",
+      "componentId": 28938,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb/foundation' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:05:55+0200",
+      "updateDate": "2014-10-09T06:38:32+0200",
+      "fUpdateAge": "26 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "4df1a07e-1961-4b7c-bd9d-f08670b7dc53",
+      "component": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/LineContinuationChannel.java",
+      "componentId": 28613,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "common-java:DuplicatedBlocks",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "1 duplicated blocks of code.",
+      "debt": "1h",
+      "creationDate": "2014-03-24T23:14:21+0100",
+      "updateDate": "2014-04-28T16:56:33+0200",
+      "fUpdateAge": "6 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "8d505c3e-e944-40a7-bdc4-3e55a6d80ddf",
+      "component": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/metrics",
+      "componentId": 28626,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb/metrics' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:05:55+0200",
+      "updateDate": "2014-10-09T06:37:59+0200",
+      "fUpdateAge": "26 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "5420d272-a363-44a5-9a8d-4ed9236aee6c",
+      "component": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/metrics/CommentsVisitor.java",
+      "componentId": 28627,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "common-java:DuplicatedBlocks",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "2 duplicated blocks of code.",
+      "debt": "2h",
+      "creationDate": "2014-03-24T23:14:21+0100",
+      "updateDate": "2014-04-28T16:56:15+0200",
+      "fUpdateAge": "6 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "eaff60ef-0e3f-4744-9ada-a701eb92fc38",
+      "component": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/metrics/LinesOfCodeVisitor.java",
+      "componentId": 28629,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "common-java:DuplicatedBlocks",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "2 duplicated blocks of code.",
+      "debt": "2h",
+      "creationDate": "2014-03-24T23:14:21+0100",
+      "updateDate": "2014-04-28T16:56:13+0200",
+      "fUpdateAge": "6 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "4b6e0ff7-8343-4389-bfee-74fb06ae1a4c",
+      "component": "com.sonarsource.plugins.vb:sonar-vb-plugin:src/main/java/com/sonar/vb/plugin",
+      "componentId": 28952,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb/plugin' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:05:55+0200",
+      "updateDate": "2014-10-09T06:37:48+0200",
+      "fUpdateAge": "26 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "86a0cb1a-c36b-442e-aac0-5d29efc8b0f0",
+      "component": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/pp",
+      "componentId": 28630,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "squid:S1228",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "Add a 'package-info.java' file to document the 'src/main/java/com/sonar/vb/pp' package",
+      "debt": "20min",
+      "creationDate": "2014-10-03T23:05:55+0200",
+      "updateDate": "2014-10-09T06:38:40+0200",
+      "fUpdateAge": "26 days",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "8d5d8cb6-2f92-4cdd-858e-6d551b6507a3",
+      "component": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/pp/EmptyLinesRemovalPreprocessor.java",
+      "componentId": 28631,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "common-java:DuplicatedBlocks",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "1 duplicated blocks of code.",
+      "debt": "1h",
+      "creationDate": "2014-03-24T23:14:21+0100",
+      "updateDate": "2014-04-28T16:56:10+0200",
+      "fUpdateAge": "6 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "dd34e8a9-7c6a-4a66-8b02-7bf5d9daa4f9",
+      "component": "com.sonarsource.plugins.vb:vb-squid:src/main/java/com/sonar/vb/ProgressAstScanner.java",
+      "componentId": 28614,
+      "project": "com.sonarsource.plugins.vb:vb",
+      "rule": "common-java:DuplicatedBlocks",
+      "status": "CONFIRMED",
+      "severity": "MAJOR",
+      "message": "1 duplicated blocks of code.",
+      "debt": "1h",
+      "creationDate": "2014-03-24T23:14:21+0100",
+      "updateDate": "2014-04-28T16:56:31+0200",
+      "fUpdateAge": "6 months",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "unconfirm",
+        "resolve",
+        "falsepositive"
+      ]
+    }
+  ],
+  "rules": [
+    {
+      "key": "squid:S1698",
+      "name": "Objects should be compared with \"equals()\"",
+      "desc": "<p>Using the equality (<code>==</code>) and inequality (<code>!=</code>) operators to compare two objects does not check to see if they have the same values. Rather it checks to see if both object references point to exactly the same object in memory. The vast majority of the time, this is not what you want to do. Use the .equals() method to compare the values of two objects or to compare a string object to a string literal.</p>\n\n<h2>Noncompliant Code Sample</h2>\n<pre>\nString str1 = \"blue\";\nString str2 = \"blue\";\nString str3 = str1;\n\nif (str1 == str2)\n{\n  System.out.println(\"they're both 'blue'\"); // this doesn't print because the objects are different\n}\n\nif (str1 == \"blue\")\n{\n  System.out.println(\"they're both 'blue'\"); // this doesn't print because the objects are different\n}\n\nif (str1 == str3)\n{\n  System.out.println(\"they're the same object\"); // this prints\n}\n</pre>\n\n<h2>Compliant Solution</h2>\n<pre>\nString str1 = \"blue\";\nString str2 = \"blue\";\nString str3 = str1;\n\nif (str1.equals(str2))\n{\n  System.out.println(\"they're both 'blue'\"); // this prints\n}\n\nif (str1.equals(\"blue\"))\n{\n  System.out.println(\"they're both 'blue'\"); // this prints\n}\n\nif (str1 == str3)\n{\n  System.out.println(\"they're the same object\"); // this still prints, but it's probably not what you meant to do\n}\n</pre>",
+      "status": "READY"
+    },
+    {
+      "key": "squid:S1142",
+      "name": "Methods should not contain too many return statements",
+      "desc": "<p>\nHaving too many return statements in a method increases the method's essential complexity because the flow of execution is broken each time a return statement is encountered.\nThis makes it harder to read and understand the logic of the method.\n</p>\n\n<p>\nThe following code snippet illustrates this rule with the default threshold of 3:\n</p>\n\n<pre>\npublic boolean myMethod() { // Non-Compliant as there are 4 return statements\n  if (condition1) {\n    return true;\n  } else {\n    if (condition2) {\n      return false;\n    } else {\n      return true;\n    }\n  }\n  return false;\n}\n</pre>",
+      "status": "READY"
+    },
+    {
+      "key": "squid:S1694",
+      "name": "An abstract class should have both abstract and concrete methods",
+      "desc": "<p>The purpose of an abstract class is to provide some heritable behaviors while also defining methods which must be implemented by sub-classes.</p>\n\n<p>A class with no abstract methods that was made abstract purely to prevent instantiation should be converted to a concrete class (i.e. remove the <code>abstract</code> keyword) with a private constructor.</p>\n\n<p>A class with only abstract methods and no inheritable behavior should be converted to an interface.</p>\n\n<h2>Noncompliant Code Sample</h2>\n<pre>\npublic abstract class Animal {\n  abstract void move();\n  abstract void feed();\n}\n\npublic abstract class Color {\n  private int red = 0;\n  private int green = 0;\n  private int blue = 0;\n\n  public int getRed(){\n    return red;\n  }\n}\n</pre>\n\n<h2>Compliant Solution</h2>\n<pre>\npublic interface Animal {\n  void move();\n  void feed();\n}\n\npublic class Color {\n  private int red = 0;\n  private int green = 0;\n  private int blue = 0;\n\n  private Color (){\n  }\n\n  public int getRed() {\n    return red;\n  }\n}\n\npublic abstract class Lamp {\n\n  private boolean switchLamp=false;\n  public abstract void glow();\n\n  public void flipSwitch() {\n    switchLamp = !switchLamp;\n    if (switchLamp) {\n       glow();\n    }\n  }\n}\n</pre>",
+      "status": "READY"
+    },
+    {
+      "key": "squid:S1151",
+      "name": "Switch cases should not have too many lines",
+      "desc": "<p>Switch cases should remain small to keep the overall switch compact and readable.</p>\n\n<p>The following code snippet illustrates this rule with the default threshold of 5:</p>\n\n<pre>\nswitch (myVariable) {\n  case 0:                     // Compliant - 5 lines till following case\n    System.out.println(\"\");\n    System.out.println(\"\");\n    System.out.println(\"\");\n    break;\n  default:                    // Non-Compliant - 6 lines till switch end\n    System.out.println(\"\");\n    System.out.println(\"\");\n    System.out.println(\"\");\n    System.out.println(\"\");\n    break;\n}\n</pre>",
+      "status": "READY"
+    },
+    {
+      "key": "squid:S1643",
+      "name": "Strings should not be concatenated using '+' in a loop",
+      "desc": "<p>Strings are immutable objects in Java, so concatenation doesn't simply add the new String to the end of the existing string. Instead, in each loop iteration, the first String is converted to an intermediate object type, the second string is appended, and then the intermediate object is converted back to a String. Further, performance of these intermediate operations degrades as the String gets longer. Therefore, the use of StringBuilder is preferred.</p>\n\n<h2>Noncompliant Code Example</h2>\n<pre>\nString str = \"\";\nfor (int i = 0; i < arrayOfStrings.length ; ++i) {\n  str = str + arrayOfStrings[i];\n}\n</pre>\n\n<h2>Compliant Solution</h2>\n<pre>\nStringBuilder bld = new StringBuilder();\nfor (int i = 0; i < arrayOfStrings.length; ++i) {\n  bld.append(arrayOfStrings[i]);\n}\nString str = bld.toString();\n</pre>",
+      "status": "READY"
+    },
+    {
+      "key": "squid:S134",
+      "name": "Control flow statements \"if\", \"for\", \"while\", \"switch\" and \"try\" should not be nested too deeply",
+      "desc": "<p>\nNested <code>if</code>, <code>for</code>, <code>while</code> and <code>try</code> statements is a key ingredient for making what's known as \"Spaghetti code\".\nSuch code is hard to read, refactor and therefore maintain.\n</p>\n\n<h2>Noncompliant Code Example</h2>\n\n<p>The following code snippet illustrates this rule with the default threshold of 3.</p>\n\n<pre>\npublic void process() {\n  if (condition1) {                  // Compliant - depth = 1\n    /* ... */\n    if (condition2) {                // Compliant - depth = 2\n      /* ... */\n      for(int i = 0; i < 10; i++) {  // Compliant - depth = 3, not exceeding the limit\n        /* ... */\n        if (condition4) {            // Non-Compliant - depth = 4\n          if (condition5) {          // Depth = 5, exceeding the limit, but issues are only reported on depth = 4\n            /* ... */\n          }\n          return;\n        }\n      }\n    }\n  }\n}\n</pre>",
+      "status": "READY"
+    },
+    {
+      "key": "common-java:DuplicatedBlocks",
+      "name": "Duplicated blocks",
+      "desc": "<p>An issue is created on a file as soon as there is a block of duplicated code on this file. It gives the number of blocks in the file.</p>",
+      "status": "READY"
+    },
+    {
+      "key": "squid:RightCurlyBraceSameLineAsNextBlockCheck",
+      "name": "Right curly brace and next \"else\", \"catch\" and \"finally\" keywords should be located on the same line",
+      "desc": "<p>\nSharing some coding conventions is a key point to make it possible for a team to efficiently collaborate.\nThis rule make it mandatory to place closing curly braces on the same line that next <code>else</code>, <code>catch</code> or <code>finally</code> keywords.\n</p>\n\n<p>\nThe following code snippet illustrates this rule:\n</p>\n\n<pre>\npublic void myMethod() {\n  if(something) {\n    executeTask();\n  } else if (somethingElse) {          // Compliant\n    doSomethingElse();\n  }\n  else {                               // Non-Compliant\n     generateError();\n  }\n\n  try {\n    generateOrder();\n  } catch (Exception e) {              // Compliant\n    log(e);\n  }\n  finally {                            // Non-Compliant\n    closeConnection();\n  }\n}\n</pre>",
+      "status": "READY"
+    },
+    {
+      "key": "squid:MethodCyclomaticComplexity",
+      "name": "Methods should not be too complex",
+      "desc": "<p>The Cyclomatic Complexity is measured by the number of\n\t(&amp;&amp;, ||) operators and (if, while, do, for, ?:, catch, switch,\n\tcase, return, throw) statements in the body of a class plus one for\n\teach constructor, method (but not getter/setter), static initializer,\n\tor instance initializer in the class. The last return stament in\n\tmethod, if exists, is not taken into account.</p>\n<p>\n\tEven when the Cyclomatic Complexity of a class is very high, this\n\tcomplexity might be well distributed among all methods. Nevertheless,\n\tmost of the time, a very complex class is a class which breaks the <a\n\t\thref=\"http://en.wikipedia.org/wiki/Single_responsibility_principle\">Single\n\t\tResponsibility Principle</a> and which should be re-factored to be split\n\tin several classes.\n</p>",
+      "status": "READY"
+    },
+    {
+      "key": "squid:S1192",
+      "name": "String literals should not be duplicated",
+      "desc": "<p>\n  Duplicated string literals make the process of refactoring error-prone, since you must be sure to update all occurrences.\n  On the other hand, constants can be referenced from many places, but only need to be updated in a single place.\n</p>\n\n<h2>Non Compliant Code Example</h2>\n\n<pre>\npublic void run() {\n  prepare(\"action1\");                              // Non-Compliant - \"action1\" is duplicated 3 times\n  execute(\"action1\");\n  release(\"action1\");\n}\n\n@SuppressWarning(\"all\")                            // Compliant - annotations are excluded\nprivate void method1() { /* ... */ }\n@SuppressWarning(\"all\")\nprivate void method2() { /* ... */ }\n\npublic String method3(String a) {\n  System.out.println(\"'\" + a + \"'\");               // Compliant - literal \"'\" has less than 5 characters and is excluded\n  return \"\";                                       // Compliant - literal \"\" has less than 5 characters and is excluded\n}\n</pre>\n\n<h2>Compliant Code Example</h2>\n\n<pre>\nprivate static final String ACTION_1 = \"action1\";  // Compliant\n\npublic void run() {\n  prepare(ACTION_1);                               // Compliant\n  execute(ACTION_1);\n  release(ACTION_1);\n}\n</pre>\n\n<h2>Exceptions</h2>\n<p>To prevent generating some false-positives, literals having less than 5 characters are excluded.</p>",
+      "status": "READY"
+    },
+    {
+      "key": "squid:S138",
+      "name": "Methods should not have too many lines",
+      "desc": "<p>\nA method that grows too large tends to aggregate too many responsibilities.\nSuch methods inevitably become harder to understand and therefore harder to maintain.\n</p>\n\n<p>\nAbove a specific threshold, it is strongly advised to refactor into smaller methods which focus on well-defined tasks.\nThose smaller methods will not only be easier to understand, but also probably easier to test.\n</p>",
+      "status": "READY"
+    },
+    {
+      "key": "squid:S1067",
+      "name": "Expressions should not be too complex",
+      "desc": "<p>\nThe complexity of an expression is defined by the number of <code>&&</code>, <code>||</code> and <code>condition ? ifTrue : ifFalse</code> operators it contains.\nA single expression's complexity should not become too high to keep the code readable.\n</p>\n\n<p>The following code, with a maximum complexity of 3:</p>\n\n<pre>\nif (condition1 && condition2 && condition3 && condition4) { /* ... */ }  // Non-Compliant\n</pre>\n\n<p>could be refactored into something like:</p>\n\n<pre>\nif (relevantMethodName1() && relevantMethodName2()) { /* ... */ }        // Compliant\n\n/* ... */\n\nprivate boolean relevantMethodName1() {\n  return condition1 && condition2;\n}\n\nprivate boolean relevantMethodName2() {\n  return condition3 && condition4;\n}\n</pre>",
+      "status": "READY"
+    },
+    {
+      "key": "common-java:InsufficientBranchCoverage",
+      "name": "Insufficient branch coverage by unit tests",
+      "desc": "<p>An issue is created on a file as soon as the branch coverage on this file is less than the required threshold.It gives the number of branches to be covered in order to reach the required threshold.</p>",
+      "status": "READY"
+    },
+    {
+      "key": "squid:S1228",
+      "name": "Packages should have a javadoc file 'package-info.java'",
+      "desc": "<p>Each package in a Java project should include a <code>package-info.java</code> file. The purpose of this file is to document the Java package using javadoc and declare package annotations.</p>\n\n<h2>Compliant Solution</h2>\n<pre>\n/**\n* This package has non null parameters and is documented.\n**/\n@ParametersAreNonnullByDefault\npackage org.foo.bar;\n</pre>",
+      "status": "REMOVED"
+    }
+  ],
+  "users": [],
+  "languages": [
+    {
+      "key": "js",
+      "name": "JavaScript"
+    },
+    {
+      "key": "java",
+      "name": "Java"
+    }
+  ],
+  "maxResultsReached": false,
+  "paging": {
+    "pageIndex": 1,
+    "pageSize": 50,
+    "total": 4623,
+    "fTotal": "4,623",
+    "pages": 93
+  },
+  "facets": [
+    {
+      "property": "severities",
+      "values": [
+        {
+          "val": "MAJOR",
+          "count": 3214
+        },
+        {
+          "val": "INFO",
+          "count": 930
+        },
+        {
+          "val": "MINOR",
+          "count": 436
+        },
+        {
+          "val": "CRITICAL",
+          "count": 43
+        },
+        {
+          "val": "BLOCKER",
+          "count": 0
+        }
+      ]
+    },
+    {
+      "property": "statuses",
+      "values": [
+        {
+          "val": "CONFIRMED",
+          "count": 4123
+        },
+        {
+          "val": "OPEN",
+          "count": 499
+        },
+        {
+          "val": "REOPENED",
+          "count": 1
+        },
+        {
+          "val": "CLOSED",
+          "count": 0
+        },
+        {
+          "val": "RESOLVED",
+          "count": 0
+        }
+      ]
+    },
+    {
+      "property": "resolutions",
+      "values": [
+        {
+          "val": "",
+          "count": 4623
+        },
+        {
+          "val": "FIXED",
+          "count": 39744
+        },
+        {
+          "val": "REMOVED",
+          "count": 14385
+        },
+        {
+          "val": "FALSE-POSITIVE",
+          "count": 724
+        }
+      ]
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/issues-spec/show-open.json b/server/sonar-web/src/test/json/issues-spec/show-open.json
new file mode 100644 (file)
index 0000000..071d6bd
--- /dev/null
@@ -0,0 +1,28 @@
+{
+  "issue": {
+    "key": "94357807-fcb4-40cc-9598-9a715f1eee6e",
+    "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml",
+    "componentId": 26177,
+    "project": "org.codehaus.sonar-plugins.xml:xml",
+    "rule": "squid:S1228",
+    "status": "OPEN",
+    "severity": "MAJOR",
+    "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml' package",
+    "debt": "20min",
+    "creationDate": "2014-10-03T23:26:37+0200",
+    "updateDate": "2014-10-09T06:32:55+0200",
+    "fUpdateAge": "26 days",
+    "actions": [
+      "comment",
+      "assign",
+      "assign_to_me",
+      "plan",
+      "set_severity"
+    ],
+    "transitions": [
+      "confirm",
+      "resolve",
+      "falsepositive"
+    ]
+  }
+}
diff --git a/server/sonar-web/src/test/json/issues-spec/show-resolved.json b/server/sonar-web/src/test/json/issues-spec/show-resolved.json
new file mode 100644 (file)
index 0000000..f4eab74
--- /dev/null
@@ -0,0 +1,26 @@
+{
+  "issue": {
+    "key": "94357807-fcb4-40cc-9598-9a715f1eee6e",
+    "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml",
+    "componentId": 26177,
+    "project": "org.codehaus.sonar-plugins.xml:xml",
+    "rule": "squid:S1228",
+    "status": "RESOLVED",
+    "severity": "MAJOR",
+    "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml' package",
+    "debt": "20min",
+    "creationDate": "2014-10-03T23:26:37+0200",
+    "updateDate": "2014-10-09T06:32:55+0200",
+    "fUpdateAge": "26 days",
+    "actions": [
+      "comment",
+      "assign",
+      "assign_to_me",
+      "plan",
+      "set_severity"
+    ],
+    "transitions": [
+      "reopen"
+    ]
+  }
+}
diff --git a/server/sonar-web/src/test/json/issues-spec/show-with-tags.json b/server/sonar-web/src/test/json/issues-spec/show-with-tags.json
new file mode 100644 (file)
index 0000000..6eb9475
--- /dev/null
@@ -0,0 +1,29 @@
+{
+  "issue": {
+    "key": "94357807-fcb4-40cc-9598-9a715f1eee6e",
+    "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml",
+    "componentId": 26177,
+    "project": "org.codehaus.sonar-plugins.xml:xml",
+    "rule": "squid:S1228",
+    "status": "CONFIRMED",
+    "severity": "MAJOR",
+    "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml' package",
+    "debt": "20min",
+    "creationDate": "2014-10-03T23:26:37+0200",
+    "updateDate": "2014-10-09T06:32:55+0200",
+    "fUpdateAge": "26 days",
+    "actions": [
+      "comment",
+      "assign",
+      "assign_to_me",
+      "plan",
+      "set_severity"
+    ],
+    "tags": ["security", "cwe"]
+    "transitions": [
+      "unconfirm",
+      "resolve",
+      "falsepositive"
+    ]
+  }
+}
diff --git a/server/sonar-web/src/test/json/issues-spec/show.json b/server/sonar-web/src/test/json/issues-spec/show.json
new file mode 100644 (file)
index 0000000..c125f5f
--- /dev/null
@@ -0,0 +1,28 @@
+{
+  "issue": {
+    "key": "94357807-fcb4-40cc-9598-9a715f1eee6e",
+    "component": "org.codehaus.sonar-plugins.xml:sonar-xml-plugin:src/main/java/org/sonar/plugins/xml",
+    "componentId": 26177,
+    "project": "org.codehaus.sonar-plugins.xml:xml",
+    "rule": "squid:S1228",
+    "status": "CONFIRMED",
+    "severity": "MAJOR",
+    "message": "Add a 'package-info.java' file to document the 'src/main/java/org/sonar/plugins/xml' package",
+    "debt": "20min",
+    "creationDate": "2014-10-03T23:26:37+0200",
+    "updateDate": "2014-10-09T06:32:55+0200",
+    "fUpdateAge": "26 days",
+    "actions": [
+      "comment",
+      "assign",
+      "assign_to_me",
+      "plan",
+      "set_severity"
+    ],
+    "transitions": [
+      "unconfirm",
+      "resolve",
+      "falsepositive"
+    ]
+  }
+}
diff --git a/server/sonar-web/src/test/json/issues-spec/tags-modified.json b/server/sonar-web/src/test/json/issues-spec/tags-modified.json
new file mode 100644 (file)
index 0000000..d1b5389
--- /dev/null
@@ -0,0 +1,7 @@
+{
+  "tags": [
+    "security",
+    "cwe",
+    "cert"
+  ]
+}
diff --git a/server/sonar-web/src/test/json/issues-spec/tags.json b/server/sonar-web/src/test/json/issues-spec/tags.json
new file mode 100644 (file)
index 0000000..af6bc92
--- /dev/null
@@ -0,0 +1,24 @@
+{
+  "tags": [
+    "brain-overload",
+    "bug",
+    "cert",
+    "convention",
+    "cwe",
+    "design",
+    "error-handling",
+    "misra",
+    "misra-c",
+    "misra-c++",
+    "multithreading",
+    "obsolete",
+    "owasp-top10",
+    "performance",
+    "pitfall",
+    "sans-top25",
+    "sans-top25-2011",
+    "security",
+    "sql",
+    "unused"
+  ]
+}
diff --git a/server/sonar-web/src/test/json/quality-gates-spec/app.json b/server/sonar-web/src/test/json/quality-gates-spec/app.json
new file mode 100644 (file)
index 0000000..6a38a3e
--- /dev/null
@@ -0,0 +1,99 @@
+{
+  "edit": false,
+  "periods": [
+    {
+      "key": 1,
+      "text": "since previous analysis"
+    },
+    {
+      "key": 2,
+      "text": "over 365 days"
+    },
+    {
+      "key": 3,
+      "text": "since previous version"
+    },
+    {
+      "key": 4,
+      "text": "over period 4 - defined at project level"
+    },
+    {
+      "key": 5,
+      "text": "over period 5 - defined at project level"
+    }
+  ],
+  "metrics": [
+      {
+          "id": 62,
+          "key": "blocker_violations",
+          "name": "Blocker issues",
+          "type": "INT",
+          "domain": "Issues",
+          "hidden": false
+      },
+      {
+          "id": 37,
+          "key": "new_coverage",
+          "name": "Coverage on new code",
+          "type": "PERCENT",
+          "domain": "Tests",
+          "hidden": false
+      },
+      {
+          "id": 63,
+          "key": "critical_violations",
+          "name": "Critical issues",
+          "type": "INT",
+          "domain": "Issues",
+          "hidden": false
+      },
+      {
+          "id": 154,
+          "key": "sqale_effort_to_grade_a",
+          "name": "Effort to rating A",
+          "type": "WORK_DUR",
+          "domain": "SQALE",
+          "hidden": false
+      },
+      {
+          "id": 218,
+          "key": "open_issues",
+          "name": "Open issues",
+          "type": "INT",
+          "domain": "Issues",
+          "hidden": false
+      },
+      {
+          "id": 219,
+          "key": "reopened_issues",
+          "name": "Reopened issues",
+          "type": "INT",
+          "domain": "Issues",
+          "hidden": false
+      },
+      {
+          "id": 32,
+          "key": "skipped_tests",
+          "name": "Skipped unit tests",
+          "type": "INT",
+          "domain": "Tests",
+          "hidden": false
+      },
+      {
+          "id": 31,
+          "key": "test_errors",
+          "name": "Unit test errors",
+          "type": "INT",
+          "domain": "Tests",
+          "hidden": false
+      },
+      {
+          "id": 33,
+          "key": "test_failures",
+          "name": "Unit test failures",
+          "type": "INT",
+          "domain": "Tests",
+          "hidden": false
+      }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/quality-gates-spec/list.json b/server/sonar-web/src/test/json/quality-gates-spec/list.json
new file mode 100644 (file)
index 0000000..9d7ac91
--- /dev/null
@@ -0,0 +1,9 @@
+{
+  "qualitygates": [
+    {
+      "id": 1,
+      "name": "Default Gate"
+    }
+  ],
+  "default": 1
+}
diff --git a/server/sonar-web/src/test/json/quality-gates-spec/show.json b/server/sonar-web/src/test/json/quality-gates-spec/show.json
new file mode 100644 (file)
index 0000000..bc36acb
--- /dev/null
@@ -0,0 +1,70 @@
+{
+  "id": 1,
+  "name": "Default Gate",
+  "conditions": [
+      {
+          "id": 1,
+          "metric": "blocker_violations",
+          "op": "GT",
+          "warning": "",
+          "error": "0"
+      },
+      {
+          "id": 2,
+          "metric": "new_coverage",
+          "op": "LT",
+          "warning": "",
+          "error": "80",
+          "period": 3
+      },
+      {
+          "id": 3,
+          "metric": "critical_violations",
+          "op": "GT",
+          "warning": "",
+          "error": "0"
+      },
+      {
+          "id": 4,
+          "metric": "sqale_effort_to_grade_a",
+          "op": "GT",
+          "warning": "",
+          "error": "0"
+      },
+      {
+          "id": 5,
+          "metric": "open_issues",
+          "op": "GT",
+          "warning": "0",
+          "error": ""
+      },
+      {
+          "id": 6,
+          "metric": "reopened_issues",
+          "op": "GT",
+          "warning": "0",
+          "error": ""
+      },
+      {
+          "id": 7,
+          "metric": "skipped_tests",
+          "op": "GT",
+          "warning": "0",
+          "error": ""
+      },
+      {
+          "id": 8,
+          "metric": "test_errors",
+          "op": "GT",
+          "warning": "",
+          "error": "0"
+      },
+      {
+          "id": 9,
+          "metric": "test_failures",
+          "op": "GT",
+          "warning": "",
+          "error": "0"
+      }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/source-viewer-create-manual-issue/api-rules-search.json b/server/sonar-web/src/test/json/source-viewer-create-manual-issue/api-rules-search.json
new file mode 100644 (file)
index 0000000..9a176d3
--- /dev/null
@@ -0,0 +1,27 @@
+{
+  "total": 5,
+  "p": 1,
+  "ps": 999999,
+  "rules": [
+    {
+      "key": "manual:api",
+      "name": "API"
+    },
+    {
+      "key": "manual:design",
+      "name": "Design"
+    },
+    {
+      "key": "manual:error_handling",
+      "name": "Error handling"
+    },
+    {
+      "key": "manual:performance",
+      "name": "Performance"
+    },
+    {
+      "key": "manual:sql_pitfalls",
+      "name": "SQL Pitfall"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/source-viewer-create-manual-issue/app.json b/server/sonar-web/src/test/json/source-viewer-create-manual-issue/app.json
new file mode 100644 (file)
index 0000000..dd6a3fb
--- /dev/null
@@ -0,0 +1,24 @@
+{
+  "uuid": "12345",
+  "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+  "path": "src/main/java/org/sonar/batch/index/Cache.java",
+  "name": "Cache.java",
+  "longName": "src/main/java/org/sonar/batch/index/Cache.java",
+  "q": "FIL",
+  "subProject": "org.codehaus.sonar:sonar-batch",
+  "subProjectName": "SonarQube :: Batch",
+  "project": "org.codehaus.sonar:sonar",
+  "projectName": "SonarQube",
+  "fav": false,
+  "canMarkAsFavourite": true,
+  "canCreateManualIssue": true,
+  "measures": {
+    "lines": "378",
+    "coverage": "74.3%",
+    "duplicationDensity": "5.8%",
+    "debt": "2h 10min",
+    "sqaleRating": "A",
+    "debtRatio": "1.1%",
+    "issues": "6"
+  }
+}
diff --git a/server/sonar-web/src/test/json/source-viewer-create-manual-issue/create-issue.json b/server/sonar-web/src/test/json/source-viewer-create-manual-issue/create-issue.json
new file mode 100644 (file)
index 0000000..db69ef3
--- /dev/null
@@ -0,0 +1,17 @@
+{
+  "issue": {
+    "key": "e69e2012-c58e-4c37-9e0e-9595576de9de",
+    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "componentId": null,
+    "project": "org.codehaus.sonar:sonar",
+    "rule": "manual:api",
+    "status": "OPEN",
+    "severity": "MAJOR",
+    "message": "An issue message",
+    "line": 3,
+    "reporter": "admin",
+    "creationDate": "2014-12-08T14:22:49+0100",
+    "updateDate": "2014-12-08T14:22:49+0100",
+    "fUpdateAge": "less than a minute"
+  }
+}
diff --git a/server/sonar-web/src/test/json/source-viewer-create-manual-issue/issues.json b/server/sonar-web/src/test/json/source-viewer-create-manual-issue/issues.json
new file mode 100644 (file)
index 0000000..0b16011
--- /dev/null
@@ -0,0 +1,200 @@
+{"total": 6, "p": 1, "ps": 100, "projects": [
+  {
+    "uuid": "69e57151-be0d-4157-adff-c06741d88879",
+    "key": "org.codehaus.sonar:sonar",
+    "id": 2865,
+    "qualifier": "TRK",
+    "name": "SonarQube",
+    "longName": "SonarQube"
+  }
+], "components": [
+  {
+    "uuid": "83379565-7af3-4047-8d1a-ed42b10309b0",
+    "key": "org.codehaus.sonar:sonar-batch",
+    "id": 1624,
+    "enabled": true,
+    "qualifier": "BRC",
+    "name": "SonarQube :: Batch",
+    "longName": "SonarQube :: Batch",
+    "path": "sonar-batch",
+    "projectId": 2865,
+    "subProjectId": 2865
+  },
+  {
+    "uuid": "69e57151-be0d-4157-adff-c06741d88879",
+    "key": "org.codehaus.sonar:sonar",
+    "id": 2865,
+    "enabled": true,
+    "qualifier": "TRK",
+    "name": "SonarQube",
+    "longName": "SonarQube"
+  },
+  {
+    "uuid": "b9615992-2458-4d54-a22f-b91ee7ba5bc5",
+    "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "id": 19983,
+    "enabled": true,
+    "qualifier": "FIL",
+    "name": "Cache.java",
+    "longName": "src/main/java/org/sonar/batch/index/Cache.java",
+    "path": "src/main/java/org/sonar/batch/index/Cache.java",
+    "projectId": 2865,
+    "subProjectId": 1624
+  }
+], "issues": [
+  {
+    "key": "20002ec7-b647-44da-bdf5-4d9fbf4b7c58",
+    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "componentId": 19983,
+    "project": "org.codehaus.sonar:sonar",
+    "subProject": "org.codehaus.sonar:sonar-batch",
+    "rule": "common-java:DuplicatedBlocks",
+    "status": "CONFIRMED",
+    "severity": "MAJOR",
+    "message": "2 duplicated blocks of code.",
+    "debt": "2h",
+    "creationDate": "2014-05-01T23:38:31+0200",
+    "updateDate": "2014-07-01T17:48:47+0200",
+    "fUpdateAge": "5 months",
+    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
+    "transitions": ["unconfirm", "resolve", "falsepositive"]
+  },
+  {
+    "key": "71a26f48-a90d-4a76-a745-4f6e6e8b1773",
+    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "componentId": 19983,
+    "project": "org.codehaus.sonar:sonar",
+    "subProject": "org.codehaus.sonar:sonar-batch",
+    "rule": "squid:S1135",
+    "status": "CONFIRMED",
+    "severity": "INFO",
+    "message": "Complete the task associated to this TODO comment.",
+    "line": 125,
+    "author": "simon.brandhof@gmail.com",
+    "creationDate": "2013-10-10T23:51:33+0200",
+    "updateDate": "2014-07-29T23:15:18+0200",
+    "fUpdateAge": "4 months",
+    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
+    "transitions": ["unconfirm", "resolve", "falsepositive"]
+  },
+  {
+    "key": "75419c88-0e3c-4311-aa47-fe5731e67558",
+    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "componentId": 19983,
+    "project": "org.codehaus.sonar:sonar",
+    "subProject": "org.codehaus.sonar:sonar-batch",
+    "rule": "squid:S1135",
+    "status": "CONFIRMED",
+    "severity": "INFO",
+    "message": "Complete the task associated to this TODO comment.",
+    "line": 155,
+    "author": "simon.brandhof@gmail.com",
+    "creationDate": "2013-10-10T23:51:33+0200",
+    "updateDate": "2014-07-29T23:15:18+0200",
+    "fUpdateAge": "4 months",
+    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
+    "transitions": ["unconfirm", "resolve", "falsepositive"]
+  },
+  {
+    "key": "01461208-6c1e-4cdf-9f27-b7afa78e76ec",
+    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "componentId": 19983,
+    "project": "org.codehaus.sonar:sonar",
+    "subProject": "org.codehaus.sonar:sonar-batch",
+    "rule": "squid:S1135",
+    "status": "CONFIRMED",
+    "severity": "INFO",
+    "message": "Complete the task associated to this TODO comment.",
+    "line": 184,
+    "author": "simon.brandhof@gmail.com",
+    "creationDate": "2013-10-10T23:51:33+0200",
+    "updateDate": "2014-07-29T23:15:18+0200",
+    "fUpdateAge": "4 months",
+    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
+    "transitions": ["unconfirm", "resolve", "falsepositive"]
+  },
+  {
+    "key": "e4de6481-7bfb-460a-8b3c-24459f9561d3",
+    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "componentId": 19983,
+    "project": "org.codehaus.sonar:sonar",
+    "subProject": "org.codehaus.sonar:sonar-batch",
+    "rule": "squid:S1135",
+    "status": "CONFIRMED",
+    "severity": "INFO",
+    "message": "Complete the task associated to this TODO comment.",
+    "line": 239,
+    "author": "Simon Brandhof",
+    "creationDate": "2013-08-09T16:04:33+0200",
+    "updateDate": "2014-07-29T23:15:18+0200",
+    "fUpdateAge": "4 months",
+    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
+    "transitions": ["unconfirm", "resolve", "falsepositive"]
+  },
+  {
+    "key": "59fc17f7-c977-4cb6-8f04-fbe88e4b9186",
+    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "componentId": 19983,
+    "project": "org.codehaus.sonar:sonar",
+    "subProject": "org.codehaus.sonar:sonar-batch",
+    "rule": "squid:S1192",
+    "status": "CONFIRMED",
+    "severity": "MINOR",
+    "message": "Define a constant instead of duplicating this literal \"Fail to get keys from cache \" 3 times.",
+    "line": 257,
+    "debt": "10min",
+    "author": "simon.brandhof@gmail.com",
+    "creationDate": "2014-02-20T07:48:16+0100",
+    "updateDate": "2014-02-24T16:57:34+0100",
+    "fUpdateAge": "9 months",
+    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
+    "transitions": ["unconfirm", "resolve", "falsepositive"]
+  }
+], "rules": [
+  {
+    "key": "common-java:DuplicatedBlocks",
+    "name": "Duplicated blocks",
+    "lang": "java",
+    "desc": "<p>An issue is created on a file as soon as there is a block of duplicated code on this file. It gives the number of blocks in the file.</p>",
+    "status": "READY",
+    "langName": "Java"
+  },
+  {
+    "key": "squid:S1192",
+    "name": "String literals should not be duplicated",
+    "lang": "java",
+    "desc": "<p>\n  Duplicated string literals make the process of refactoring error-prone, since you must be sure to update all occurrences.\n  On the other hand, constants can be referenced from many places, but only need to be updated in a single place.\n</p>\n\n<h2>Non Compliant Code Example</h2>\n\n<pre>\npublic void run() {\n  prepare(\"action1\");                              // Non-Compliant - \"action1\" is duplicated 3 times\n  execute(\"action1\");\n  release(\"action1\");\n}\n\n@SuppressWarning(\"all\")                            // Compliant - annotations are excluded\nprivate void method1() { /* ... */ }\n@SuppressWarning(\"all\")\nprivate void method2() { /* ... */ }\n\npublic String method3(String a) {\n  System.out.println(\"'\" + a + \"'\");               // Compliant - literal \"'\" has less than 5 characters and is excluded\n  return \"\";                                       // Compliant - literal \"\" has less than 5 characters and is excluded\n}\n</pre>\n\n<h2>Compliant Code Example</h2>\n\n<pre>\nprivate static final String ACTION_1 = \"action1\";  // Compliant\n\npublic void run() {\n  prepare(ACTION_1);                               // Compliant\n  execute(ACTION_1);\n  release(ACTION_1);\n}\n</pre>\n\n<h2>Exceptions</h2>\n<p>To prevent generating some false-positives, literals having less than 5 characters are excluded.</p>",
+    "status": "READY",
+    "langName": "Java"
+  },
+  {
+    "key": "squid:S1135",
+    "name": "TODO tags should be handled",
+    "lang": "java",
+    "desc": "<p>\n<code>TODO</code> tags are commonly used to mark places where some more code is required, but which the developer wants to implement later.\nSometimes the developer will not have the time or will simply forget to get back to that tag.\nThis rule is meant to track those tags, and ensure that they do not go unnoticed.\n</p>\n\n<p>The following code illustrates this rule:</p>\n\n<pre>\nvoid doSomething() {\n  // TODO\n}\n</pre>",
+    "status": "READY",
+    "langName": "Java"
+  }
+], "users": [
+  {
+    "login": "admin",
+    "name": "Admin Admin",
+    "active": true,
+    "email": "admin@sonarsource.com"
+  }
+], "languages": [
+  {
+    "key": "js",
+    "name": "JavaScript"
+  },
+  {
+    "key": "java",
+    "name": "Java"
+  }
+], "maxResultsReached": false, "paging": {
+  "pageIndex": 1,
+  "pageSize": 100,
+  "total": 6,
+  "fTotal": "6",
+  "pages": 1
+}}
diff --git a/server/sonar-web/src/test/json/source-viewer-create-manual-issue/lines.json b/server/sonar-web/src/test/json/source-viewer-create-manual-issue/lines.json
new file mode 100644 (file)
index 0000000..2983d8e
--- /dev/null
@@ -0,0 +1,3868 @@
+{"sources": [
+  {
+    "line": 1,
+    "code": "<span class=\"cppd\">/*</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 2,
+    "code": "<span class=\"cppd\"> * SonarQube, open source software quality management tool.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
+    "scmDate": "2013-04-21T11:58:14+0200"
+  },
+  {
+    "line": 3,
+    "code": "<span class=\"cppd\"> * Copyright (C) 2008-2014 SonarSource</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "57ae3026c36ae3b0b71756d6161124b1ae594c53",
+    "scmDate": "2014-03-11T17:52:41+0100"
+  },
+  {
+    "line": 4,
+    "code": "<span class=\"cppd\"> * mailto:contact AT sonarsource DOT com</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 5,
+    "code": "<span class=\"cppd\"> *</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 6,
+    "code": "<span class=\"cppd\"> * SonarQube is free software; you can redistribute it and/or</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
+    "scmDate": "2013-04-21T11:58:14+0200"
+  },
+  {
+    "line": 7,
+    "code": "<span class=\"cppd\"> * modify it under the terms of the GNU Lesser General Public</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 8,
+    "code": "<span class=\"cppd\"> * License as published by the Free Software Foundation; either</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 9,
+    "code": "<span class=\"cppd\"> * version 3 of the License, or (at your option) any later version.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 10,
+    "code": "<span class=\"cppd\"> *</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 11,
+    "code": "<span class=\"cppd\"> * SonarQube is distributed in the hope that it will be useful,</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
+    "scmDate": "2013-04-21T11:58:14+0200"
+  },
+  {
+    "line": 12,
+    "code": "<span class=\"cppd\"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 13,
+    "code": "<span class=\"cppd\"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 14,
+    "code": "<span class=\"cppd\"> * Lesser General Public License for more details.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 15,
+    "code": "<span class=\"cppd\"> *</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 16,
+    "code": "<span class=\"cppd\"> * You should have received a copy of the GNU Lesser General Public License</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
+    "scmDate": "2013-04-22T09:37:03+0200"
+  },
+  {
+    "line": 17,
+    "code": "<span class=\"cppd\"> * along with this program; if not, write to the Free Software Foundation,</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
+    "scmDate": "2013-04-22T09:37:03+0200"
+  },
+  {
+    "line": 18,
+    "code": "<span class=\"cppd\"> * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
+    "scmDate": "2013-04-22T09:37:03+0200"
+  },
+  {
+    "line": 19,
+    "code": "<span class=\"cppd\"> */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 20,
+    "code": "<span class=\"k\">package</span> org.sonar.batch.index;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 21,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 22,
+    "code": "<span class=\"k\">import </span>com.google.common.collect.<span class=\"sym-1 sym\">Sets</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 23,
+    "code": "<span class=\"k\">import </span>com.persistit.<span class=\"sym-2 sym\">Exchange</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 24,
+    "code": "<span class=\"k\">import </span>com.persistit.<span class=\"sym-3 sym\">Key</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 25,
+    "code": "<span class=\"k\">import </span>com.persistit.<span class=\"sym-4 sym\">KeyFilter</span>;",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 26,
+    "code": "<span class=\"k\">import </span>com.persistit.exception.<span class=\"sym-5 sym\">PersistitException</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 27,
+    "code": "<span class=\"k\">import </span>org.apache.commons.lang.builder.<span class=\"sym-6 sym\">ToStringBuilder</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 28,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 29,
+    "code": "<span class=\"k\">import </span>javax.annotation.<span class=\"sym-7 sym\">CheckForNull</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 30,
+    "code": "",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 31,
+    "code": "<span class=\"k\">import </span>java.util.<span class=\"sym-8 sym\">Iterator</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 32,
+    "code": "<span class=\"k\">import </span>java.util.<span class=\"sym-9 sym\">NoSuchElementException</span>;",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 33,
+    "code": "<span class=\"k\">import </span>java.util.<span class=\"sym-10 sym\">Set</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 34,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 35,
+    "code": "<span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 36,
+    "code": "<span class=\"cppd\"> * &lt;p&gt;</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 37,
+    "code": "<span class=\"cppd\"> * This cache is not thread-safe, due to direct usage of {@link com.persistit.Exchange}</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 38,
+    "code": "<span class=\"cppd\"> * &lt;/p&gt;</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 39,
+    "code": "<span class=\"cppd\"> */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 40,
+    "code": "<span class=\"k\">public </span><span class=\"k\">class</span> <span class=\"sym-11 sym\">Cache</span>&lt;V&gt; {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
+    "scmDate": "2014-07-25T16:31:45+0200"
+  },
+  {
+    "line": 41,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 42,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">final </span>String <span class=\"sym-12 sym\">name</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 43,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-13 sym\">exchange</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 44,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 45,
+    "code": "  <span class=\"sym-14 sym\">Cache</span>(String <span class=\"sym-15 sym\">name</span>, <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-16 sym\">exchange</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 46,
+    "code": "    <span class=\"k\">this</span>.<span class=\"sym-12 sym\">name</span> = <span class=\"sym-15 sym\">name</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 47,
+    "code": "    <span class=\"k\">this</span>.<span class=\"sym-13 sym\">exchange</span> = <span class=\"sym-16 sym\">exchange</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 48,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 49,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 50,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-17 sym\">put</span>(Object <span class=\"sym-18 sym\">key</span>, V <span class=\"sym-19 sym\">value</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 51,
+    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-18 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 52,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-19 sym\">value</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 53,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 54,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 55,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-20 sym\">put</span>(Object <span class=\"sym-21 sym\">firstKey</span>, Object <span class=\"sym-22 sym\">secondKey</span>, V <span class=\"sym-23 sym\">value</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 56,
+    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-21 sym\">firstKey</span>, <span class=\"sym-22 sym\">secondKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 57,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-23 sym\">value</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 58,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 59,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 60,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-24 sym\">put</span>(Object <span class=\"sym-25 sym\">firstKey</span>, Object <span class=\"sym-26 sym\">secondKey</span>, Object <span class=\"sym-27 sym\">thirdKey</span>, V <span class=\"sym-28 sym\">value</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 61,
+    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-25 sym\">firstKey</span>, <span class=\"sym-26 sym\">secondKey</span>, <span class=\"sym-27 sym\">thirdKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 62,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-28 sym\">value</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 63,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 64,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 65,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-29 sym\">put</span>(Object[] <span class=\"sym-30 sym\">key</span>, V <span class=\"sym-31 sym\">value</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 66,
+    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-30 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 67,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-31 sym\">value</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 68,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 69,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 70,
+    "code": "  <span class=\"k\">private </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-32 sym\">doPut</span>(V <span class=\"sym-33 sym\">value</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 71,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 72,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.getValue().put(<span class=\"sym-33 sym\">value</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 73,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.store();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 74,
+    "code": "      <span class=\"k\">return</span> <span class=\"k\">this</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 75,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-34 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 76,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to put element in the cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-34 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 77,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 78,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 79,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 80,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 81,
+    "code": "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 82,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 83,
+    "code": "  <span class=\"k\">public </span>V <span class=\"sym-35 sym\">get</span>(Object <span class=\"sym-36 sym\">key</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 84,
+    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-36 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 85,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 86,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 87,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 88,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 89,
+    "code": "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 90,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 91,
+    "code": "  <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 92,
+    "code": "<span class=\"a\">  </span><span class=\"k\">public </span>V <span class=\"sym-37 sym\">get</span>(Object <span class=\"sym-38 sym\">firstKey</span>, Object <span class=\"sym-39 sym\">secondKey</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 93,
+    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-38 sym\">firstKey</span>, <span class=\"sym-39 sym\">secondKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 94,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 95,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 96,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 97,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 98,
+    "code": "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 99,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 100,
+    "code": "  <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 101,
+    "code": "<span class=\"a\">  </span><span class=\"k\">public </span>V <span class=\"sym-40 sym\">get</span>(Object <span class=\"sym-41 sym\">firstKey</span>, Object <span class=\"sym-42 sym\">secondKey</span>, Object <span class=\"sym-43 sym\">thirdKey</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 102,
+    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-41 sym\">firstKey</span>, <span class=\"sym-42 sym\">secondKey</span>, <span class=\"sym-43 sym\">thirdKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 103,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 104,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 105,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 106,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 107,
+    "code": "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 108,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 109,
+    "code": "  <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 110,
+    "code": "<span class=\"a\">  </span><span class=\"k\">public </span>V <span class=\"sym-44 sym\">get</span>(Object[] <span class=\"sym-45 sym\">key</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 111,
+    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-45 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 112,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 113,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 114,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 115,
+    "code": "  <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 116,
+    "code": "  <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 117,
+    "code": "<span class=\"a\">  </span><span class=\"k\">private </span>V <span class=\"sym-46 sym\">doGet</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 118,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 119,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.fetch();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 120,
+    "code": "      <span class=\"k\">if </span>(!<span class=\"sym-13 sym\">exchange</span>.getValue().isDefined()) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1,
+    "utConditions": 2,
+    "utCoveredConditions": 2
+  },
+  {
+    "line": 121,
+    "code": "        <span class=\"k\">return</span> <span class=\"k\">null</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 122,
+    "code": "      }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 123,
+    "code": "      <span class=\"k\">return</span> (V) <span class=\"sym-13 sym\">exchange</span>.getValue().get();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 124,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-47 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 125,
+    "code": "      <span class=\"cppd\">// TODO add parameters to message</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200"
+  },
+  {
+    "line": 126,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get element from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-47 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 127,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 128,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 129,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 130,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-48 sym\">containsKey</span>(Object <span class=\"sym-49 sym\">key</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 131,
+    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-49 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 132,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 133,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 134,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 135,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-50 sym\">containsKey</span>(Object <span class=\"sym-51 sym\">firstKey</span>, Object <span class=\"sym-52 sym\">secondKey</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 136,
+    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-51 sym\">firstKey</span>, <span class=\"sym-52 sym\">secondKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 137,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 138,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 139,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 140,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-53 sym\">containsKey</span>(Object <span class=\"sym-54 sym\">firstKey</span>, Object <span class=\"sym-55 sym\">secondKey</span>, Object <span class=\"sym-56 sym\">thirdKey</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 141,
+    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-54 sym\">firstKey</span>, <span class=\"sym-55 sym\">secondKey</span>, <span class=\"sym-56 sym\">thirdKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 142,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 143,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 144,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 145,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-57 sym\">containsKey</span>(Object[] <span class=\"sym-58 sym\">key</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 146,
+    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-58 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 147,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 148,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 149,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 150,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">boolean </span><span class=\"sym-59 sym\">doContainsKey</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 151,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200"
+  },
+  {
+    "line": 152,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.fetch();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 153,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-13 sym\">exchange</span>.isValueDefined();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 154,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-60 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 155,
+    "code": "      <span class=\"cppd\">// TODO add parameters to message</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200"
+  },
+  {
+    "line": 156,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to check if element is in cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-60 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 157,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200"
+  },
+  {
+    "line": 158,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200"
+  },
+  {
+    "line": 159,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200"
+  },
+  {
+    "line": 160,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-61 sym\">remove</span>(Object <span class=\"sym-62 sym\">key</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 161,
+    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-62 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 162,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 163,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 164,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 165,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-63 sym\">remove</span>(Object <span class=\"sym-64 sym\">firstKey</span>, Object <span class=\"sym-65 sym\">secondKey</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 166,
+    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-64 sym\">firstKey</span>, <span class=\"sym-65 sym\">secondKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 167,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 168,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 169,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 170,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-66 sym\">remove</span>(Object <span class=\"sym-67 sym\">firstKey</span>, Object <span class=\"sym-68 sym\">secondKey</span>, Object <span class=\"sym-69 sym\">thirdKey</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 171,
+    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-67 sym\">firstKey</span>, <span class=\"sym-68 sym\">secondKey</span>, <span class=\"sym-69 sym\">thirdKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 172,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 173,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 174,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 175,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-70 sym\">remove</span>(Object[] <span class=\"sym-71 sym\">key</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 176,
+    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-71 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 177,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 178,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 179,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 180,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">boolean </span><span class=\"sym-72 sym\">doRemove</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 181,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 182,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-13 sym\">exchange</span>.remove();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "6f1161efb92298ace498df544e38f6f97216ec36",
+    "scmDate": "2013-04-26T15:19:16+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 183,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-73 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 184,
+    "code": "      <span class=\"cppd\">// TODO add parameters to message</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200"
+  },
+  {
+    "line": 185,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get element from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-73 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 186,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 187,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 188,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 189,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 190,
+    "code": "<span class=\"cppd\">   * Removes everything in the specified group.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 191,
+    "code": "<span class=\"cppd\">   *</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 192,
+    "code": "<span class=\"cppd\">   * @param group The group name.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 193,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 194,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-74 sym\">clear</span>(Object <span class=\"sym-75 sym\">key</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 195,
+    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-75 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 196,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 197,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 198,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 199,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-76 sym\">clear</span>(Object <span class=\"sym-77 sym\">firstKey</span>, Object <span class=\"sym-78 sym\">secondKey</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 200,
+    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-77 sym\">firstKey</span>, <span class=\"sym-78 sym\">secondKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 201,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 202,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 203,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 204,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-79 sym\">clear</span>(Object <span class=\"sym-80 sym\">firstKey</span>, Object <span class=\"sym-81 sym\">secondKey</span>, Object <span class=\"sym-82 sym\">thirdKey</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 205,
+    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-80 sym\">firstKey</span>, <span class=\"sym-81 sym\">secondKey</span>, <span class=\"sym-82 sym\">thirdKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 206,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 207,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 208,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 209,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-83 sym\">clear</span>(Object[] <span class=\"sym-84 sym\">key</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 210,
+    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-84 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 211,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 212,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 213,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 214,
+    "code": "  <span class=\"k\">private </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-85 sym\">doClear</span>() {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 215,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 216,
+    "code": "      <span class=\"sym-3 sym\">Key</span> <span class=\"sym-86 sym\">to</span> = <span class=\"k\">new</span> <span class=\"sym-3 sym\">Key</span>(<span class=\"sym-13 sym\">exchange</span>.getKey());",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 217,
+    "code": "      <span class=\"sym-86 sym\">to</span>.append(<span class=\"sym-3 sym\">Key</span>.AFTER);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 218,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.removeKeyRange(<span class=\"sym-13 sym\">exchange</span>.getKey(), <span class=\"sym-86 sym\">to</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 219,
+    "code": "      <span class=\"k\">return</span> <span class=\"k\">this</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 220,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-87 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 221,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to clear values from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-87 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 222,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 223,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 224,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 225,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 226,
+    "code": "<span class=\"cppd\">   * Clears the default as well as all group caches.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 227,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 228,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-88 sym\">clear</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 229,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 230,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 231,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.removeAll();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 232,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-89 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 233,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to clear cache\"</span>, <span class=\"sym-89 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 234,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 235,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 236,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 237,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 238,
+    "code": "<span class=\"cppd\">   * Returns the set of cache keys associated with this group.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 239,
+    "code": "<span class=\"cppd\">   * TODO implement a lazy-loading equivalent with Iterator/Iterable</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 240,
+    "code": "<span class=\"cppd\">   *</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 241,
+    "code": "<span class=\"cppd\">   * @param group The group.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 242,
+    "code": "<span class=\"cppd\">   * @return The set of cache keys for this group.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 243,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 244,
+    "code": "  <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"rawtypes\"</span>)",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 245,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-10 sym\">Set</span> <span class=\"sym-90 sym\">keySet</span>(Object <span class=\"sym-91 sym\">key</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 246,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 247,
+    "code": "      <span class=\"sym-10 sym\">Set</span>&lt;Object&gt; <span class=\"sym-92 sym\">keys</span> = <span class=\"sym-1 sym\">Sets</span>.newLinkedHashSet();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 248,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 249,
+    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-93 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 250,
+    "code": "      <span class=\"sym-93 sym\">iteratorExchange</span>.append(<span class=\"sym-91 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 251,
+    "code": "      <span class=\"sym-93 sym\">iteratorExchange</span>.append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 252,
+    "code": "      <span class=\"k\">while </span>(<span class=\"sym-93 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1,
+    "utConditions": 2,
+    "utCoveredConditions": 2
+  },
+  {
+    "line": 253,
+    "code": "        <span class=\"sym-92 sym\">keys</span>.add(<span class=\"sym-93 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 254,
+    "code": "      }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 255,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-92 sym\">keys</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 256,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-94 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 257,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-94 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 258,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 259,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 260,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 261,
+    "code": "  <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"rawtypes\"</span>)",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 262,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-10 sym\">Set</span> <span class=\"sym-95 sym\">keySet</span>(Object <span class=\"sym-96 sym\">firstKey</span>, Object <span class=\"sym-97 sym\">secondKey</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 263,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 264,
+    "code": "      <span class=\"sym-10 sym\">Set</span>&lt;Object&gt; <span class=\"sym-98 sym\">keys</span> = <span class=\"sym-1 sym\">Sets</span>.newLinkedHashSet();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 265,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 266,
+    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-99 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 267,
+    "code": "      <span class=\"sym-99 sym\">iteratorExchange</span>.append(<span class=\"sym-96 sym\">firstKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 268,
+    "code": "      <span class=\"sym-99 sym\">iteratorExchange</span>.append(<span class=\"sym-97 sym\">secondKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 269,
+    "code": "      <span class=\"sym-99 sym\">iteratorExchange</span>.append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 270,
+    "code": "      <span class=\"k\">while </span>(<span class=\"sym-99 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1,
+    "utConditions": 2,
+    "utCoveredConditions": 2
+  },
+  {
+    "line": 271,
+    "code": "        <span class=\"sym-98 sym\">keys</span>.add(<span class=\"sym-99 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 272,
+    "code": "      }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 273,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-98 sym\">keys</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 274,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-100 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 275,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-100 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 276,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 277,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 278,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 279,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 280,
+    "code": "<span class=\"cppd\">   * Returns the set of keys associated with this cache.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 281,
+    "code": "<span class=\"cppd\">   *</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 282,
+    "code": "<span class=\"cppd\">   * @return The set containing the keys for this cache.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 283,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 284,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-10 sym\">Set</span>&lt;Object&gt; <span class=\"sym-101 sym\">keySet</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 285,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 286,
+    "code": "      <span class=\"sym-10 sym\">Set</span>&lt;Object&gt; <span class=\"sym-102 sym\">keys</span> = <span class=\"sym-1 sym\">Sets</span>.newLinkedHashSet();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 287,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 288,
+    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-103 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 289,
+    "code": "      <span class=\"sym-103 sym\">iteratorExchange</span>.append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 290,
+    "code": "      <span class=\"k\">while </span>(<span class=\"sym-103 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1,
+    "utConditions": 2,
+    "utCoveredConditions": 2
+  },
+  {
+    "line": 291,
+    "code": "        <span class=\"sym-102 sym\">keys</span>.add(<span class=\"sym-103 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 292,
+    "code": "      }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 293,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-102 sym\">keys</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 294,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-104 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 295,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-104 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 296,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 297,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 298,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 299,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 300,
+    "code": "<span class=\"cppd\">   * Lazy-loading values for given keys</span>",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 301,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 302,
+    "code": "  <span class=\"k\">public </span>Iterable&lt;V&gt; <span class=\"sym-105 sym\">values</span>(Object <span class=\"sym-106 sym\">firstKey</span>, Object <span class=\"sym-107 sym\">secondKey</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 303,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 304,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 305,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-106 sym\">firstKey</span>).append(<span class=\"sym-107 sym\">secondKey</span>).append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 306,
+    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-108 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 307,
+    "code": "      <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-109 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-106 sym\">firstKey</span>)).append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-107 sym\">secondKey</span>));",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 308,
+    "code": "      <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-139 sym\">ValueIterable</span>&lt;V&gt;(<span class=\"sym-108 sym\">iteratorExchange</span>, <span class=\"sym-109 sym\">filter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 309,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-110 sym\">e</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 310,
+    "code": "      <span class=\"k\">throw</span> <span class=\"sym-111 sym\">failToGetValues</span>(<span class=\"sym-110 sym\">e</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+    "scmDate": "2014-06-20T14:13:01+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 311,
+    "code": "    }",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 312,
+    "code": "  }",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+    "scmDate": "2014-06-20T14:13:01+0200"
+  },
+  {
+    "line": 313,
+    "code": "",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+    "scmDate": "2014-06-20T14:13:01+0200"
+  },
+  {
+    "line": 314,
+    "code": "  <span class=\"k\">private </span>IllegalStateException <span class=\"sym-111 sym\">failToGetValues</span>(Exception <span class=\"sym-112 sym\">e</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+    "scmDate": "2014-06-20T14:13:01+0200"
+  },
+  {
+    "line": 315,
+    "code": "    <span class=\"k\">return</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get values from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-112 sym\">e</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+    "scmDate": "2014-06-20T14:13:01+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 316,
+    "code": "  }",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 317,
+    "code": "",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 318,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 319,
+    "code": "<span class=\"cppd\">   * Lazy-loading values for a given key</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 320,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 321,
+    "code": "  <span class=\"k\">public </span>Iterable&lt;V&gt; <span class=\"sym-113 sym\">values</span>(Object <span class=\"sym-114 sym\">firstKey</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 322,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 323,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 324,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-114 sym\">firstKey</span>).append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 325,
+    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-115 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 326,
+    "code": "      <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-116 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-114 sym\">firstKey</span>));",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 327,
+    "code": "      <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-139 sym\">ValueIterable</span>&lt;V&gt;(<span class=\"sym-115 sym\">iteratorExchange</span>, <span class=\"sym-116 sym\">filter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 328,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-117 sym\">e</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
+    "scmDate": "2014-04-23T14:41:32+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 329,
+    "code": "      <span class=\"k\">throw</span> <span class=\"sym-111 sym\">failToGetValues</span>(<span class=\"sym-117 sym\">e</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+    "scmDate": "2014-06-20T14:13:01+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 330,
+    "code": "    }",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 331,
+    "code": "  }",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 332,
+    "code": "",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 333,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 334,
+    "code": "<span class=\"cppd\">   * Lazy-loading values</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 335,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 336,
+    "code": "  <span class=\"k\">public </span>Iterable&lt;V&gt; <span class=\"sym-118 sym\">values</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 337,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 338,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear().append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 339,
+    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-119 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 340,
+    "code": "      <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-120 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.ALL);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 341,
+    "code": "      <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-139 sym\">ValueIterable</span>&lt;V&gt;(<span class=\"sym-119 sym\">iteratorExchange</span>, <span class=\"sym-120 sym\">filter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 342,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-121 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 343,
+    "code": "      <span class=\"k\">throw</span> <span class=\"sym-111 sym\">failToGetValues</span>(<span class=\"sym-121 sym\">e</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+    "scmDate": "2014-06-20T14:13:01+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 344,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 345,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 346,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 347,
+    "code": "  <span class=\"k\">public </span>Iterable&lt;<span class=\"sym-177 sym\">Entry</span>&lt;V&gt;&gt; <span class=\"sym-122 sym\">entries</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 348,
+    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear().to(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 349,
+    "code": "    <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-123 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.ALL);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 350,
+    "code": "    <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-156 sym\">EntryIterable</span>&lt;V&gt;(<span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>), <span class=\"sym-123 sym\">filter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 351,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 352,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 353,
+    "code": "  <span class=\"k\">public </span>Iterable&lt;<span class=\"sym-177 sym\">Entry</span>&lt;V&gt;&gt; <span class=\"sym-124 sym\">entries</span>(Object <span class=\"sym-125 sym\">firstKey</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 354,
+    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear().append(<span class=\"sym-125 sym\">firstKey</span>).append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 355,
+    "code": "    <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-126 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-125 sym\">firstKey</span>));",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 356,
+    "code": "    <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-156 sym\">EntryIterable</span>&lt;V&gt;(<span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>), <span class=\"sym-126 sym\">filter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 357,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 358,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 359,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-127 sym\">resetKey</span>(Object <span class=\"sym-128 sym\">key</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 360,
+    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 361,
+    "code": "    <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-128 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 362,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 363,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 364,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-129 sym\">resetKey</span>(Object <span class=\"sym-130 sym\">first</span>, Object <span class=\"sym-131 sym\">second</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 365,
+    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 366,
+    "code": "    <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-130 sym\">first</span>).append(<span class=\"sym-131 sym\">second</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 367,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 368,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 369,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-132 sym\">resetKey</span>(Object <span class=\"sym-133 sym\">first</span>, Object <span class=\"sym-134 sym\">second</span>, Object <span class=\"sym-135 sym\">third</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 370,
+    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 371,
+    "code": "    <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-133 sym\">first</span>).append(<span class=\"sym-134 sym\">second</span>).append(<span class=\"sym-135 sym\">third</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 372,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 373,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 374,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-136 sym\">resetKey</span>(Object[] <span class=\"sym-137 sym\">keys</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 375,
+    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 376,
+    "code": "    <span class=\"k\">for</span> (Object <span class=\"sym-138 sym\">o</span> : <span class=\"sym-137 sym\">keys</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0,
+    "utConditions": 2,
+    "utCoveredConditions": 0
+  },
+  {
+    "line": 377,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-138 sym\">o</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 378,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 379,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 380,
+    "code": "",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "7b301db8c7e3000ff2a04fce5534e45e7d973a1f",
+    "scmDate": "2014-04-25T11:17:09+0200"
+  },
+  {
+    "line": 381,
+    "code": "  <span class=\"cppd\">//</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 382,
+    "code": "  <span class=\"cppd\">// LAZY ITERATORS AND ITERABLES</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 383,
+    "code": "  <span class=\"cppd\">//</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 384,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 385,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-139 sym\">ValueIterable</span>&lt;T&gt; <span class=\"k\">implements</span> Iterable&lt;T&gt; {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
+    "scmDate": "2014-07-25T16:31:45+0200"
+  },
+  {
+    "line": 386,
+    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-8 sym\">Iterator</span>&lt;T&gt; <span class=\"sym-140 sym\">iterator</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 387,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 388,
+    "code": "    <span class=\"k\">private </span><span class=\"sym-141 sym\">ValueIterable</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-142 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-143 sym\">keyFilter</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 389,
+    "code": "      <span class=\"k\">this</span>.<span class=\"sym-140 sym\">iterator</span> = <span class=\"k\">new</span> <span class=\"sym-145 sym\">ValueIterator</span>&lt;T&gt;(<span class=\"sym-142 sym\">exchange</span>, <span class=\"sym-143 sym\">keyFilter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 390,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 391,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 392,
+    "code": "    <span class=\"a\">@Override</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 393,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"sym-8 sym\">Iterator</span>&lt;T&gt; <span class=\"sym-144 sym\">iterator</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 394,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-140 sym\">iterator</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 395,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 396,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 397,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 398,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-145 sym\">ValueIterator</span>&lt;T&gt; <span class=\"k\">implements</span> <span class=\"sym-8 sym\">Iterator</span>&lt;T&gt; {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
+    "scmDate": "2014-07-25T16:31:45+0200"
+  },
+  {
+    "line": 399,
+    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-146 sym\">exchange</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 400,
+    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-147 sym\">keyFilter</span>;",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 401,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 402,
+    "code": "    <span class=\"k\">private </span><span class=\"sym-148 sym\">ValueIterator</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-149 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-150 sym\">keyFilter</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 403,
+    "code": "      <span class=\"k\">this</span>.<span class=\"sym-146 sym\">exchange</span> = <span class=\"sym-149 sym\">exchange</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "utLineHits": 1,
+    "duplicated": true
+  },
+  {
+    "line": 404,
+    "code": "      <span class=\"k\">this</span>.<span class=\"sym-147 sym\">keyFilter</span> = <span class=\"sym-150 sym\">keyFilter</span>;",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1,
+    "duplicated": true
+  },
+  {
+    "line": 405,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "utLineHits": 1,
+    "duplicated": true
+  },
+  {
+    "line": 406,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "duplicated": true
+  },
+  {
+    "line": 407,
+    "code": "    <span class=\"a\">@Override</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "duplicated": true
+  },
+  {
+    "line": 408,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-151 sym\">hasNext</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "duplicated": true
+  },
+  {
+    "line": 409,
+    "code": "      <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "duplicated": true
+  },
+  {
+    "line": 410,
+    "code": "        <span class=\"k\">return</span> <span class=\"sym-146 sym\">exchange</span>.hasNext(<span class=\"sym-147 sym\">keyFilter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1,
+    "duplicated": true
+  },
+  {
+    "line": 411,
+    "code": "      } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-152 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "utLineHits": 0,
+    "duplicated": true
+  },
+  {
+    "line": 412,
+    "code": "        <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-152 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "utLineHits": 0,
+    "duplicated": true
+  },
+  {
+    "line": 413,
+    "code": "      }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "duplicated": true
+  },
+  {
+    "line": 414,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "duplicated": true
+  },
+  {
+    "line": 415,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "duplicated": true
+  },
+  {
+    "line": 416,
+    "code": "    <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "duplicated": true
+  },
+  {
+    "line": 417,
+    "code": "    <span class=\"a\">@Override</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "duplicated": true
+  },
+  {
+    "line": 418,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span>T <span class=\"sym-153 sym\">next</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 419,
+    "code": "      <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 420,
+    "code": "        <span class=\"sym-146 sym\">exchange</span>.next(<span class=\"sym-147 sym\">keyFilter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 421,
+    "code": "      } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-154 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 422,
+    "code": "        <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-154 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 423,
+    "code": "      }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 424,
+    "code": "      <span class=\"k\">if </span>(<span class=\"sym-146 sym\">exchange</span>.getValue().isDefined()) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "utLineHits": 1,
+    "utConditions": 2,
+    "utCoveredConditions": 1
+  },
+  {
+    "line": 425,
+    "code": "        <span class=\"k\">return</span> (T) <span class=\"sym-146 sym\">exchange</span>.getValue().get();",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 426,
+    "code": "      }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 427,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> <span class=\"sym-9 sym\">NoSuchElementException</span>();",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 428,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 429,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 430,
+    "code": "    <span class=\"a\">@Override</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 431,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-155 sym\">remove</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 432,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> UnsupportedOperationException(<span class=\"s\">\"Removing an item is not supported\"</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "34cce8e330192c56a159a856ebd8072d38299087",
+    "scmDate": "2014-02-24T14:21:50+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 433,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 434,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 435,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 436,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-156 sym\">EntryIterable</span>&lt;T&gt; <span class=\"k\">implements</span> Iterable&lt;<span class=\"sym-177 sym\">Entry</span>&lt;T&gt;&gt; {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
+    "scmDate": "2014-07-25T16:31:45+0200"
+  },
+  {
+    "line": 437,
+    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-162 sym\">EntryIterator</span>&lt;T&gt; <span class=\"sym-157 sym\">it</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 438,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 439,
+    "code": "    <span class=\"k\">private </span><span class=\"sym-158 sym\">EntryIterable</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-159 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-160 sym\">keyFilter</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 440,
+    "code": "      <span class=\"sym-157 sym\">it</span> = <span class=\"k\">new</span> <span class=\"sym-162 sym\">EntryIterator</span>&lt;T&gt;(<span class=\"sym-159 sym\">exchange</span>, <span class=\"sym-160 sym\">keyFilter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 441,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 442,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 443,
+    "code": "    <span class=\"a\">@Override</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 444,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"sym-8 sym\">Iterator</span>&lt;<span class=\"sym-177 sym\">Entry</span>&lt;T&gt;&gt; <span class=\"sym-161 sym\">iterator</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 445,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-157 sym\">it</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 446,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 447,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 448,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 449,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-162 sym\">EntryIterator</span>&lt;T&gt; <span class=\"k\">implements</span> <span class=\"sym-8 sym\">Iterator</span>&lt;<span class=\"sym-177 sym\">Entry</span>&lt;T&gt;&gt; {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
+    "scmDate": "2014-07-25T16:31:45+0200"
+  },
+  {
+    "line": 450,
+    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-163 sym\">exchange</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 451,
+    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-164 sym\">keyFilter</span>;",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 452,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 453,
+    "code": "    <span class=\"k\">private </span><span class=\"sym-165 sym\">EntryIterator</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-166 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-167 sym\">keyFilter</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 454,
+    "code": "      <span class=\"k\">this</span>.<span class=\"sym-163 sym\">exchange</span> = <span class=\"sym-166 sym\">exchange</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "utLineHits": 1,
+    "duplicated": true
+  },
+  {
+    "line": 455,
+    "code": "      <span class=\"k\">this</span>.<span class=\"sym-164 sym\">keyFilter</span> = <span class=\"sym-167 sym\">keyFilter</span>;",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1,
+    "duplicated": true
+  },
+  {
+    "line": 456,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "utLineHits": 1,
+    "duplicated": true
+  },
+  {
+    "line": 457,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "duplicated": true
+  },
+  {
+    "line": 458,
+    "code": "    <span class=\"a\">@Override</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "duplicated": true
+  },
+  {
+    "line": 459,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-168 sym\">hasNext</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "duplicated": true
+  },
+  {
+    "line": 460,
+    "code": "      <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "duplicated": true
+  },
+  {
+    "line": 461,
+    "code": "        <span class=\"k\">return</span> <span class=\"sym-163 sym\">exchange</span>.hasNext(<span class=\"sym-164 sym\">keyFilter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1,
+    "duplicated": true
+  },
+  {
+    "line": 462,
+    "code": "      } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-169 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "utLineHits": 0,
+    "duplicated": true
+  },
+  {
+    "line": 463,
+    "code": "        <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-169 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "utLineHits": 0,
+    "duplicated": true
+  },
+  {
+    "line": 464,
+    "code": "      }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "duplicated": true
+  },
+  {
+    "line": 465,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "duplicated": true
+  },
+  {
+    "line": 466,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "duplicated": true
+  },
+  {
+    "line": 467,
+    "code": "    <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "duplicated": true
+  },
+  {
+    "line": 468,
+    "code": "    <span class=\"a\">@Override</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "duplicated": true
+  },
+  {
+    "line": 469,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"sym-177 sym\">Entry</span>&lt;T&gt; <span class=\"sym-170 sym\">next</span>() {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 470,
+    "code": "      <span class=\"k\">try </span>{",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 471,
+    "code": "        <span class=\"sym-163 sym\">exchange</span>.next(<span class=\"sym-164 sym\">keyFilter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 472,
+    "code": "      } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-171 sym\">e</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 473,
+    "code": "        <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-171 sym\">e</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 474,
+    "code": "      }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 475,
+    "code": "      <span class=\"k\">if </span>(<span class=\"sym-163 sym\">exchange</span>.getValue().isDefined()) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1,
+    "utConditions": 2,
+    "utCoveredConditions": 1
+  },
+  {
+    "line": 476,
+    "code": "        T <span class=\"sym-172 sym\">value</span> = (T) <span class=\"sym-163 sym\">exchange</span>.getValue().get();",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 477,
+    "code": "        <span class=\"sym-3 sym\">Key</span> <span class=\"sym-173 sym\">key</span> = <span class=\"sym-163 sym\">exchange</span>.getKey();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 478,
+    "code": "        Object[] <span class=\"sym-174 sym\">array</span> = <span class=\"k\">new</span> Object[<span class=\"sym-173 sym\">key</span>.getDepth()];",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 479,
+    "code": "        <span class=\"k\">for</span> (<span class=\"k\">int </span><span class=\"sym-175 sym\">i</span> = <span class=\"c\">0</span>; <span class=\"sym-175 sym\">i</span> &lt; <span class=\"sym-173 sym\">key</span>.getDepth(); <span class=\"sym-175 sym\">i</span>++) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1,
+    "utConditions": 2,
+    "utCoveredConditions": 2
+  },
+  {
+    "line": 480,
+    "code": "          <span class=\"sym-174 sym\">array</span>[<span class=\"sym-175 sym\">i</span>] = <span class=\"sym-173 sym\">key</span>.indexTo(<span class=\"sym-175 sym\">i</span> - <span class=\"sym-173 sym\">key</span>.getDepth()).decode();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 481,
+    "code": "        }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 482,
+    "code": "        <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-177 sym\">Entry</span>&lt;T&gt;(<span class=\"sym-174 sym\">array</span>, <span class=\"sym-172 sym\">value</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 483,
+    "code": "      }",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 484,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> <span class=\"sym-9 sym\">NoSuchElementException</span>();",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 485,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 486,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 487,
+    "code": "    <span class=\"a\">@Override</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 488,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-176 sym\">remove</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 489,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> UnsupportedOperationException(<span class=\"s\">\"Removing an item is not supported\"</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "34cce8e330192c56a159a856ebd8072d38299087",
+    "scmDate": "2014-02-24T14:21:50+0100",
+    "utLineHits": 0
+  },
+  {
+    "line": 490,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 491,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 492,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 493,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-177 sym\">Entry</span>&lt;V&gt; {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
+    "scmDate": "2014-07-25T16:31:45+0200"
+  },
+  {
+    "line": 494,
+    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span>Object[] <span class=\"sym-178 sym\">key</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 495,
+    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span>V <span class=\"sym-179 sym\">value</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 496,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 497,
+    "code": "    <span class=\"sym-180 sym\">Entry</span>(Object[] <span class=\"sym-181 sym\">key</span>, V <span class=\"sym-182 sym\">value</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "utLineHits": 1
+  },
+  {
+    "line": 498,
+    "code": "      <span class=\"k\">this</span>.<span class=\"sym-178 sym\">key</span> = <span class=\"sym-181 sym\">key</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 499,
+    "code": "      <span class=\"k\">this</span>.<span class=\"sym-179 sym\">value</span> = <span class=\"sym-182 sym\">value</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 500,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 501,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 502,
+    "code": "    <span class=\"k\">public </span>Object[] <span class=\"sym-183 sym\">key</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 503,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-178 sym\">key</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 504,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 505,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 506,
+    "code": "    <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 507,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span>V <span class=\"sym-184 sym\">value</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 508,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-179 sym\">value</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "utLineHits": 1
+  },
+  {
+    "line": 509,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 510,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 511,
+    "code": "    <span class=\"a\">@Override</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 512,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span>String <span class=\"sym-185 sym\">toString</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 513,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-6 sym\">ToStringBuilder</span>.reflectionToString(<span class=\"k\">this</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "utLineHits": 0
+  },
+  {
+    "line": 514,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 515,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 516,
+    "code": "",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "43fc31f75a2de06b23faefb0d2bbf1dd97290232",
+    "scmDate": "2014-05-05T16:43:19+0200"
+  },
+  {
+    "line": 517,
+    "code": "}",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 518,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  }
+]}
diff --git a/server/sonar-web/src/test/json/source-viewer-should-not-show-source-if-no-permission/api-components-app.json b/server/sonar-web/src/test/json/source-viewer-should-not-show-source-if-no-permission/api-components-app.json
new file mode 100644 (file)
index 0000000..db4620f
--- /dev/null
@@ -0,0 +1,21 @@
+{
+  "uuid": "12345",
+  "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Simplest.java",
+  "path": "src/main/java/foo/Simplest.java",
+  "name": "Simplest.java",
+  "longName": "src/main/java/foo/Simplest.java",
+  "q": "FIL",
+  "project": "test:fake-project-for-tests",
+  "projectName": "Fake Project for Tests",
+  "fav": false,
+  "canMarkAsFavourite": true,
+  "canCreateManualIssue": true,
+  "measures": {
+    "lines": "8",
+    "coverage": "75.0%",
+    "debt": "44min",
+    "sqaleRating": "C",
+    "debtRatio": "18.3%",
+    "issues": "5"
+  }
+}
diff --git a/server/sonar-web/src/test/json/source-viewer-should-not-show-source-if-no-permission/api-issues-search.json b/server/sonar-web/src/test/json/source-viewer-should-not-show-source-if-no-permission/api-issues-search.json
new file mode 100644 (file)
index 0000000..73d6a9f
--- /dev/null
@@ -0,0 +1,234 @@
+{
+  "total": 5,
+  "p": 1,
+  "ps": 100,
+  "projects": [
+    {
+      "uuid": "e07e9bed-f45d-4538-a5e8-77031c1ecae7",
+      "key": "test:fake-project-for-tests",
+      "id": 36125,
+      "qualifier": "TRK",
+      "name": "Fake Project for Tests",
+      "longName": "Fake Project for Tests"
+    }
+  ],
+  "components": [
+    {
+      "uuid": "b4248001-df0c-436a-8acd-a152809b8a23",
+      "key": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+      "id": 36129,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "Simplest.java",
+      "longName": "src/main/java/foo/Simplest.java",
+      "path": "src/main/java/foo/Simplest.java",
+      "projectId": 36125,
+      "subProjectId": 36125
+    },
+    {
+      "uuid": "e07e9bed-f45d-4538-a5e8-77031c1ecae7",
+      "key": "test:fake-project-for-tests",
+      "id": 36125,
+      "enabled": true,
+      "qualifier": "TRK",
+      "name": "Fake Project for Tests",
+      "longName": "Fake Project for Tests"
+    }
+  ],
+  "issues": [
+    {
+      "key": "91b13078-6f69-4b51-ab0f-8fd0bc391532",
+      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+      "componentId": 36129,
+      "project": "test:fake-project-for-tests",
+      "rule": "squid:S00105",
+      "status": "OPEN",
+      "severity": "MINOR",
+      "message": "Replace all tab characters in this file by sequences of white-spaces.",
+      "debt": "2min",
+      "creationDate": "2014-12-09T10:47:33+0100",
+      "updateDate": "2014-12-09T10:47:33+0100",
+      "fUpdateAge": "3 hours",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "c18ae6fa-fac7-46b5-bd71-feef7906b05a",
+      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+      "componentId": 36129,
+      "project": "test:fake-project-for-tests",
+      "rule": "squid:S1118",
+      "status": "OPEN",
+      "severity": "MAJOR",
+      "message": "Add a private constructor to hide the implicit public one.",
+      "line": 6,
+      "debt": "30min",
+      "creationDate": "2014-12-09T10:47:33+0100",
+      "updateDate": "2014-12-09T10:47:33+0100",
+      "fUpdateAge": "3 hours",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "816282ec-0ca9-4d03-b8bc-22b515496fe4",
+      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+      "componentId": 36129,
+      "project": "test:fake-project-for-tests",
+      "rule": "squid:IndentationCheck",
+      "status": "OPEN",
+      "severity": "MAJOR",
+      "message": "Make this line start at column 3.",
+      "line": 8,
+      "debt": "1min",
+      "creationDate": "2014-12-09T10:47:33+0100",
+      "updateDate": "2014-12-09T10:47:33+0100",
+      "fUpdateAge": "3 hours",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "0229497b-a613-48f3-83ed-2b98983e5e60",
+      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+      "componentId": 36129,
+      "project": "test:fake-project-for-tests",
+      "rule": "squid:IndentationCheck",
+      "status": "OPEN",
+      "severity": "MAJOR",
+      "message": "Make this line start at column 5.",
+      "line": 10,
+      "debt": "1min",
+      "creationDate": "2014-12-09T10:47:33+0100",
+      "updateDate": "2014-12-09T10:47:33+0100",
+      "fUpdateAge": "3 hours",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "896ccfe0-bb85-4155-be1f-1aaece716539",
+      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+      "componentId": 36129,
+      "project": "test:fake-project-for-tests",
+      "rule": "squid:S106",
+      "status": "OPEN",
+      "severity": "MAJOR",
+      "message": "Replace this usage of System.out or System.err by a logger.",
+      "line": 12,
+      "debt": "10min",
+      "creationDate": "2014-12-09T10:47:33+0100",
+      "updateDate": "2014-12-09T10:47:33+0100",
+      "fUpdateAge": "3 hours",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ]
+    }
+  ],
+  "rules": [
+    {
+      "key": "squid:IndentationCheck",
+      "name": "Source code should be correctly indented",
+      "lang": "java",
+      "desc": "<p>\nProper indentation is a simple and effective way to improve the code's readability.\nConsistent indentation among developers also reduces the differences that are committed to source control systems, making code reviews easier.\n</p>\n\n<p>The following code illustrates this rule with an indentation level of 2:</p>\n\n<pre>\nclass Foo {\n  public int a; // Compliant\npublic int b;   // Non-Compliant\n}\n</pre>",
+      "status": "READY",
+      "langName": "Java"
+    },
+    {
+      "key": "squid:S1118",
+      "name": "Utility classes should not have a public constructor",
+      "lang": "java",
+      "desc": "<p>\nUtility classes, which are a collection of static members, are not meant to be instantiated.\nThey should therefore not have public constructors.\n</p>\n\n<p>\nJava adds an implicit public constructor to every class which does not define at least one explicitly.\nHence, at least one non-public constructor should be defined.\n</p>\n\n<p>The following code:</p>\n\n<pre>\nclass StringUtils { // Non-Compliant\n\n  public static String concatenate(String s1, String s2) {\n    return s1 + s2;\n  }\n\n}\n</pre>\n\n<p>should be refactored into:</p>\n\n<pre>\nclass StringUtils { // Compliant\n\n  private StringUtils() {\n  }\n\n  public static String concatenate(String s1, String s2) {\n    return s1 + s2;\n  }\n\n}\n</pre>",
+      "status": "READY",
+      "langName": "Java"
+    },
+    {
+      "key": "squid:S00105",
+      "name": "Tabulation characters should not be used",
+      "lang": "java",
+      "desc": "<p>\nDevelopers should not need to configure the tab width of their text editors in order to be able to read source code.\nSo the use of tabulation character must be banned.\n</p>",
+      "status": "READY",
+      "langName": "Java"
+    },
+    {
+      "key": "squid:S106",
+      "name": "System.out and System.err should not be used as loggers",
+      "lang": "java",
+      "desc": "<p>Two important requirements must be fulfilled when logging messages:</p>\n\n<ul>\n  <li>The user must be able to easily retrieve the logs.</li>\n  <li>The format of all messages must be uniform to enable users to easily browse them.</li>\n</ul>\n\n<p>\nIf a program directly writes to the standard output, there is absolutely no way to comply with these requirements.\nThat's why defining and using a dedicated logger is highly recommended.\n</p>\n\n<p>\nThe following code snippet illustrates this rule:\n</p>\n\n<pre>\nSystem.out.println(\"My Message\");  // Non-Compliant\n\nlogger.log(\"My Message\");          // Compliant\n</pre>",
+      "status": "READY",
+      "langName": "Java"
+    }
+  ],
+  "users": [
+    {
+      "login": "admin",
+      "name": "Admin Admin",
+      "active": true,
+      "email": "admin@sonarsource.com"
+    }
+  ],
+  "languages": [
+    {
+      "key": "js",
+      "name": "JavaScript"
+    },
+    {
+      "key": "java",
+      "name": "Java"
+    }
+  ],
+  "maxResultsReached": false,
+  "paging": {
+    "pageIndex": 1,
+    "pageSize": 100,
+    "total": 5,
+    "fTotal": "5",
+    "pages": 1
+  }
+}
diff --git a/server/sonar-web/src/test/json/source-viewer-should-open-in-new-window/api-components-app.json b/server/sonar-web/src/test/json/source-viewer-should-open-in-new-window/api-components-app.json
new file mode 100644 (file)
index 0000000..5af670f
--- /dev/null
@@ -0,0 +1,21 @@
+{
+  "uuid": "12345",
+  "key": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+  "path": "src/main/java/foo/Simplest.java",
+  "name": "Simplest.java",
+  "longName": "src/main/java/foo/Simplest.java",
+  "q": "FIL",
+  "project": "test:fake-project-for-tests",
+  "projectName": "Fake Project for Tests",
+  "fav": false,
+  "canMarkAsFavourite": true,
+  "canCreateManualIssue": true,
+  "measures": {
+    "lines": "8",
+    "coverage": "75.0%",
+    "debt": "44min",
+    "sqaleRating": "C",
+    "debtRatio": "18.3%",
+    "issues": "5"
+  }
+}
diff --git a/server/sonar-web/src/test/json/source-viewer-should-open-in-new-window/api-issues-search.json b/server/sonar-web/src/test/json/source-viewer-should-open-in-new-window/api-issues-search.json
new file mode 100644 (file)
index 0000000..73d6a9f
--- /dev/null
@@ -0,0 +1,234 @@
+{
+  "total": 5,
+  "p": 1,
+  "ps": 100,
+  "projects": [
+    {
+      "uuid": "e07e9bed-f45d-4538-a5e8-77031c1ecae7",
+      "key": "test:fake-project-for-tests",
+      "id": 36125,
+      "qualifier": "TRK",
+      "name": "Fake Project for Tests",
+      "longName": "Fake Project for Tests"
+    }
+  ],
+  "components": [
+    {
+      "uuid": "b4248001-df0c-436a-8acd-a152809b8a23",
+      "key": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+      "id": 36129,
+      "enabled": true,
+      "qualifier": "FIL",
+      "name": "Simplest.java",
+      "longName": "src/main/java/foo/Simplest.java",
+      "path": "src/main/java/foo/Simplest.java",
+      "projectId": 36125,
+      "subProjectId": 36125
+    },
+    {
+      "uuid": "e07e9bed-f45d-4538-a5e8-77031c1ecae7",
+      "key": "test:fake-project-for-tests",
+      "id": 36125,
+      "enabled": true,
+      "qualifier": "TRK",
+      "name": "Fake Project for Tests",
+      "longName": "Fake Project for Tests"
+    }
+  ],
+  "issues": [
+    {
+      "key": "91b13078-6f69-4b51-ab0f-8fd0bc391532",
+      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+      "componentId": 36129,
+      "project": "test:fake-project-for-tests",
+      "rule": "squid:S00105",
+      "status": "OPEN",
+      "severity": "MINOR",
+      "message": "Replace all tab characters in this file by sequences of white-spaces.",
+      "debt": "2min",
+      "creationDate": "2014-12-09T10:47:33+0100",
+      "updateDate": "2014-12-09T10:47:33+0100",
+      "fUpdateAge": "3 hours",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "c18ae6fa-fac7-46b5-bd71-feef7906b05a",
+      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+      "componentId": 36129,
+      "project": "test:fake-project-for-tests",
+      "rule": "squid:S1118",
+      "status": "OPEN",
+      "severity": "MAJOR",
+      "message": "Add a private constructor to hide the implicit public one.",
+      "line": 6,
+      "debt": "30min",
+      "creationDate": "2014-12-09T10:47:33+0100",
+      "updateDate": "2014-12-09T10:47:33+0100",
+      "fUpdateAge": "3 hours",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "816282ec-0ca9-4d03-b8bc-22b515496fe4",
+      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+      "componentId": 36129,
+      "project": "test:fake-project-for-tests",
+      "rule": "squid:IndentationCheck",
+      "status": "OPEN",
+      "severity": "MAJOR",
+      "message": "Make this line start at column 3.",
+      "line": 8,
+      "debt": "1min",
+      "creationDate": "2014-12-09T10:47:33+0100",
+      "updateDate": "2014-12-09T10:47:33+0100",
+      "fUpdateAge": "3 hours",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "0229497b-a613-48f3-83ed-2b98983e5e60",
+      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+      "componentId": 36129,
+      "project": "test:fake-project-for-tests",
+      "rule": "squid:IndentationCheck",
+      "status": "OPEN",
+      "severity": "MAJOR",
+      "message": "Make this line start at column 5.",
+      "line": 10,
+      "debt": "1min",
+      "creationDate": "2014-12-09T10:47:33+0100",
+      "updateDate": "2014-12-09T10:47:33+0100",
+      "fUpdateAge": "3 hours",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ]
+    },
+    {
+      "key": "896ccfe0-bb85-4155-be1f-1aaece716539",
+      "component": "test:fake-project-for-tests:src/main/java/foo/Simplest.java",
+      "componentId": 36129,
+      "project": "test:fake-project-for-tests",
+      "rule": "squid:S106",
+      "status": "OPEN",
+      "severity": "MAJOR",
+      "message": "Replace this usage of System.out or System.err by a logger.",
+      "line": 12,
+      "debt": "10min",
+      "creationDate": "2014-12-09T10:47:33+0100",
+      "updateDate": "2014-12-09T10:47:33+0100",
+      "fUpdateAge": "3 hours",
+      "actions": [
+        "comment",
+        "assign",
+        "assign_to_me",
+        "plan",
+        "set_severity"
+      ],
+      "transitions": [
+        "confirm",
+        "resolve",
+        "falsepositive"
+      ]
+    }
+  ],
+  "rules": [
+    {
+      "key": "squid:IndentationCheck",
+      "name": "Source code should be correctly indented",
+      "lang": "java",
+      "desc": "<p>\nProper indentation is a simple and effective way to improve the code's readability.\nConsistent indentation among developers also reduces the differences that are committed to source control systems, making code reviews easier.\n</p>\n\n<p>The following code illustrates this rule with an indentation level of 2:</p>\n\n<pre>\nclass Foo {\n  public int a; // Compliant\npublic int b;   // Non-Compliant\n}\n</pre>",
+      "status": "READY",
+      "langName": "Java"
+    },
+    {
+      "key": "squid:S1118",
+      "name": "Utility classes should not have a public constructor",
+      "lang": "java",
+      "desc": "<p>\nUtility classes, which are a collection of static members, are not meant to be instantiated.\nThey should therefore not have public constructors.\n</p>\n\n<p>\nJava adds an implicit public constructor to every class which does not define at least one explicitly.\nHence, at least one non-public constructor should be defined.\n</p>\n\n<p>The following code:</p>\n\n<pre>\nclass StringUtils { // Non-Compliant\n\n  public static String concatenate(String s1, String s2) {\n    return s1 + s2;\n  }\n\n}\n</pre>\n\n<p>should be refactored into:</p>\n\n<pre>\nclass StringUtils { // Compliant\n\n  private StringUtils() {\n  }\n\n  public static String concatenate(String s1, String s2) {\n    return s1 + s2;\n  }\n\n}\n</pre>",
+      "status": "READY",
+      "langName": "Java"
+    },
+    {
+      "key": "squid:S00105",
+      "name": "Tabulation characters should not be used",
+      "lang": "java",
+      "desc": "<p>\nDevelopers should not need to configure the tab width of their text editors in order to be able to read source code.\nSo the use of tabulation character must be banned.\n</p>",
+      "status": "READY",
+      "langName": "Java"
+    },
+    {
+      "key": "squid:S106",
+      "name": "System.out and System.err should not be used as loggers",
+      "lang": "java",
+      "desc": "<p>Two important requirements must be fulfilled when logging messages:</p>\n\n<ul>\n  <li>The user must be able to easily retrieve the logs.</li>\n  <li>The format of all messages must be uniform to enable users to easily browse them.</li>\n</ul>\n\n<p>\nIf a program directly writes to the standard output, there is absolutely no way to comply with these requirements.\nThat's why defining and using a dedicated logger is highly recommended.\n</p>\n\n<p>\nThe following code snippet illustrates this rule:\n</p>\n\n<pre>\nSystem.out.println(\"My Message\");  // Non-Compliant\n\nlogger.log(\"My Message\");          // Compliant\n</pre>",
+      "status": "READY",
+      "langName": "Java"
+    }
+  ],
+  "users": [
+    {
+      "login": "admin",
+      "name": "Admin Admin",
+      "active": true,
+      "email": "admin@sonarsource.com"
+    }
+  ],
+  "languages": [
+    {
+      "key": "js",
+      "name": "JavaScript"
+    },
+    {
+      "key": "java",
+      "name": "Java"
+    }
+  ],
+  "maxResultsReached": false,
+  "paging": {
+    "pageIndex": 1,
+    "pageSize": 100,
+    "total": 5,
+    "fTotal": "5",
+    "pages": 1
+  }
+}
diff --git a/server/sonar-web/src/test/json/source-viewer-should-open-in-new-window/api-sources-lines.json b/server/sonar-web/src/test/json/source-viewer-should-open-in-new-window/api-sources-lines.json
new file mode 100644 (file)
index 0000000..b095d82
--- /dev/null
@@ -0,0 +1,130 @@
+{
+  "sources": [
+    {
+      "line": 1,
+      "code": "<span class=\"k\">package </span>foo;",
+      "scmAuthor": "fabrice.bellingard@sonarsource.com",
+      "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+      "scmDate": "2013-09-16T15:31:49+0200"
+    },
+    {
+      "line": 2,
+      "code": "",
+      "scmAuthor": "fabrice.bellingard@sonarsource.com",
+      "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+      "scmDate": "2013-09-16T15:31:49+0200"
+    },
+    {
+      "line": 3,
+      "code": "<span class=\"cppd\">/**</span>",
+      "scmAuthor": "fabrice.bellingard@sonarsource.com",
+      "scmRevision": "37acee5ff6e67cdb501c08a656fbabf21160b052",
+      "scmDate": "2013-09-19T15:37:05+0200"
+    },
+    {
+      "line": 4,
+      "code": "<span class=\"cppd\"> * Simple class</span>",
+      "scmAuthor": "fabrice.bellingard@sonarsource.com",
+      "scmRevision": "37acee5ff6e67cdb501c08a656fbabf21160b052",
+      "scmDate": "2013-09-19T15:37:05+0200"
+    },
+    {
+      "line": 5,
+      "code": "<span class=\"cppd\"> */</span>",
+      "scmAuthor": "fabrice.bellingard@sonarsource.com",
+      "scmRevision": "37acee5ff6e67cdb501c08a656fbabf21160b052",
+      "scmDate": "2013-09-19T15:37:05+0200"
+    },
+    {
+      "line": 6,
+      "code": "<span class=\"k\">public </span><span class=\"k\">class </span><span class=\"sym-1 sym\">Simplest</span> {",
+      "scmAuthor": "fabrice.bellingard@sonarsource.com",
+      "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+      "scmDate": "2013-09-16T15:31:49+0200"
+    },
+    {
+      "line": 7,
+      "code": "",
+      "scmAuthor": "fabrice.bellingard@sonarsource.com",
+      "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+      "scmDate": "2013-09-16T15:31:49+0200"
+    },
+    {
+      "line": 8,
+      "code": "    <span class=\"k\">public </span><span class=\"k\">static </span><span class=\"k\">int </span><span class=\"sym-2 sym\">add</span>(<span class=\"k\">int </span><span class=\"sym-3 sym\">a</span>, <span class=\"k\">int </span><span class=\"sym-4 sym\">b</span>) {",
+      "scmAuthor": "fabrice.bellingard@sonarsource.com",
+      "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+      "scmDate": "2013-09-16T15:31:49+0200"
+    },
+    {
+      "line": 9,
+      "code": "    \t<span class=\"cppd\">// introduce a variable that is not needed - just to get a violation</span>",
+      "scmAuthor": "fabrice.bellingard@sonarsource.com",
+      "scmRevision": "322e4e8b3cb54a39651f563273745e6ee737fb3e",
+      "scmDate": "2013-10-15T16:14:22+0200"
+    },
+    {
+      "line": 10,
+      "code": "    \t<span class=\"k\">int </span><span class=\"sym-5 sym\">result</span> = <span class=\"sym-3 sym\">a</span> + <span class=\"sym-4 sym\">b</span>;",
+      "scmAuthor": "fabrice.bellingard@sonarsource.com",
+      "scmRevision": "322e4e8b3cb54a39651f563273745e6ee737fb3e",
+      "scmDate": "2013-10-15T16:14:22+0200"
+    },
+    {
+      "line": 11,
+      "code": "",
+      "scmAuthor": "fabrice.bellingard@sonarsource.com",
+      "scmRevision": "44e0c5b4fc18a006a405d3f3d489896245fab3d1",
+      "scmDate": "2014-01-09T16:48:59+0100"
+    },
+    {
+      "line": 12,
+      "code": "    \tSystem.out.println(<span class=\"s\">\"\"</span>);",
+      "scmAuthor": "fabrice.bellingard@sonarsource.com",
+      "scmRevision": "44e0c5b4fc18a006a405d3f3d489896245fab3d1",
+      "scmDate": "2014-01-09T16:48:59+0100"
+    },
+    {
+      "line": 13,
+      "code": "",
+      "scmAuthor": "fabrice.bellingard@sonarsource.com",
+      "scmRevision": "44e0c5b4fc18a006a405d3f3d489896245fab3d1",
+      "scmDate": "2014-01-09T16:48:59+0100"
+    },
+    {
+      "line": 14,
+      "code": "        <span class=\"k\">return </span><span class=\"sym-5 sym\">result</span>;",
+      "scmAuthor": "fabrice.bellingard@sonarsource.com",
+      "scmRevision": "322e4e8b3cb54a39651f563273745e6ee737fb3e",
+      "scmDate": "2013-10-15T16:14:22+0200"
+    },
+    {
+      "line": 15,
+      "code": "    }",
+      "scmAuthor": "fabrice.bellingard@sonarsource.com",
+      "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+      "scmDate": "2013-09-16T15:31:49+0200"
+    },
+    {
+      "line": 16,
+      "code": "",
+      "scmAuthor": "fabrice.bellingard@sonarsource.com",
+      "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+      "scmDate": "2013-09-16T15:31:49+0200"
+    },
+    {
+      "line": 17,
+      "code": "}",
+      "scmAuthor": "fabrice.bellingard@sonarsource.com",
+      "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+      "scmDate": "2013-09-16T15:31:49+0200"
+    },
+    {
+      "line": 18,
+      "code": "",
+      "scmAuthor": "fabrice.bellingard@sonarsource.com",
+      "scmRevision": "f467e9befd3ff15bb1dbf634b0e9b45d44110bac",
+      "scmDate": "2013-09-16T15:31:49+0200"
+    }
+  ]
+}
diff --git a/server/sonar-web/src/test/json/source-viewer-spec/app-not-logged-in.json b/server/sonar-web/src/test/json/source-viewer-spec/app-not-logged-in.json
new file mode 100644 (file)
index 0000000..e8b7516
--- /dev/null
@@ -0,0 +1,24 @@
+{
+  "uuid": "12345",
+  "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+  "path": "src/main/java/org/sonar/batch/index/Cache.java",
+  "name": "Cache.java",
+  "longName": "src/main/java/org/sonar/batch/index/Cache.java",
+  "q": "FIL",
+  "subProject": "org.codehaus.sonar:sonar-batch",
+  "subProjectName": "SonarQube :: Batch",
+  "project": "org.codehaus.sonar:sonar",
+  "projectName": "SonarQube",
+  "fav": false,
+  "canMarkAsFavourite": false,
+  "canCreateManualIssue": false,
+  "measures": {
+    "lines": "378",
+    "coverage": "74.3%",
+    "duplicationDensity": "5.8%",
+    "debt": "2h 10min",
+    "sqaleRating": "A",
+    "debtRatio": "1.1%",
+    "issues": "6"
+  }
+}
diff --git a/server/sonar-web/src/test/json/source-viewer-spec/app.json b/server/sonar-web/src/test/json/source-viewer-spec/app.json
new file mode 100644 (file)
index 0000000..dd6a3fb
--- /dev/null
@@ -0,0 +1,24 @@
+{
+  "uuid": "12345",
+  "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+  "path": "src/main/java/org/sonar/batch/index/Cache.java",
+  "name": "Cache.java",
+  "longName": "src/main/java/org/sonar/batch/index/Cache.java",
+  "q": "FIL",
+  "subProject": "org.codehaus.sonar:sonar-batch",
+  "subProjectName": "SonarQube :: Batch",
+  "project": "org.codehaus.sonar:sonar",
+  "projectName": "SonarQube",
+  "fav": false,
+  "canMarkAsFavourite": true,
+  "canCreateManualIssue": true,
+  "measures": {
+    "lines": "378",
+    "coverage": "74.3%",
+    "duplicationDensity": "5.8%",
+    "debt": "2h 10min",
+    "sqaleRating": "A",
+    "debtRatio": "1.1%",
+    "issues": "6"
+  }
+}
diff --git a/server/sonar-web/src/test/json/source-viewer-spec/coverage.json b/server/sonar-web/src/test/json/source-viewer-spec/coverage.json
new file mode 100644 (file)
index 0000000..ace41da
--- /dev/null
@@ -0,0 +1,196 @@
+{"coverage": [
+  [46, true, 32, null, null],
+  [47, true, 32, null, null],
+  [48, true, 32, null, null],
+  [49, true, 32, null, null],
+  [52, true, 2, null, null],
+  [53, true, 2, null, null],
+  [57, true, 18, null, null],
+  [58, true, 18, null, null],
+  [62, true, 13, null, null],
+  [63, true, 13, null, null],
+  [67, false, null, null, null],
+  [68, false, null, null, null],
+  [73, true, 27, null, null],
+  [74, true, 27, null, null],
+  [75, true, 27, null, null],
+  [76, true, 1, null, null],
+  [77, true, 1, null, null],
+  [85, true, 5, null, null],
+  [86, true, 5, null, null],
+  [94, true, 10, null, null],
+  [95, true, 10, null, null],
+  [103, true, 11, null, null],
+  [104, true, 11, null, null],
+  [112, false, null, null, null],
+  [113, false, null, null, null],
+  [120, true, 17, null, null],
+  [121, true, 17, 2, 2],
+  [122, true, 8, null, null],
+  [124, true, 13, null, null],
+  [125, false, null, null, null],
+  [127, false, null, null, null],
+  [132, true, 4, null, null],
+  [133, true, 4, null, null],
+  [137, true, 3, null, null],
+  [138, true, 3, null, null],
+  [142, true, 5, null, null],
+  [143, true, 5, null, null],
+  [147, false, null, null, null],
+  [148, false, null, null, null],
+  [153, true, 7, null, null],
+  [154, true, 7, null, null],
+  [155, false, null, null, null],
+  [157, false, null, null, null],
+  [162, true, 3, null, null],
+  [163, true, 3, null, null],
+  [167, true, 3, null, null],
+  [168, true, 3, null, null],
+  [172, true, 2, null, null],
+  [173, true, 2, null, null],
+  [177, false, null, null, null],
+  [178, false, null, null, null],
+  [183, true, 6, null, null],
+  [184, false, null, null, null],
+  [186, false, null, null, null],
+  [196, true, 5, null, null],
+  [197, true, 5, null, null],
+  [201, true, 2, null, null],
+  [202, true, 2, null, null],
+  [206, true, 1, null, null],
+  [207, true, 1, null, null],
+  [211, false, null, null, null],
+  [212, false, null, null, null],
+  [217, true, 5, null, null],
+  [218, true, 5, null, null],
+  [219, true, 5, null, null],
+  [220, true, 5, null, null],
+  [221, false, null, null, null],
+  [222, false, null, null, null],
+  [231, true, 4, null, null],
+  [232, true, 4, null, null],
+  [233, false, null, null, null],
+  [234, false, null, null, null],
+  [235, true, 4, null, null],
+  [236, true, 4, null, null],
+  [248, true, 4, null, null],
+  [249, true, 4, null, null],
+  [250, true, 4, null, null],
+  [251, true, 4, null, null],
+  [252, true, 4, null, null],
+  [253, true, 4, 2, 2],
+  [254, true, 2, null, null],
+  [256, true, 4, null, null],
+  [257, false, null, null, null],
+  [258, false, null, null, null],
+  [265, true, 1, null, null],
+  [266, true, 1, null, null],
+  [267, true, 1, null, null],
+  [268, true, 1, null, null],
+  [269, true, 1, null, null],
+  [270, true, 1, null, null],
+  [271, true, 1, 2, 2],
+  [272, true, 1, null, null],
+  [274, true, 1, null, null],
+  [275, false, null, null, null],
+  [276, false, null, null, null],
+  [287, true, 4, null, null],
+  [288, true, 4, null, null],
+  [289, true, 4, null, null],
+  [290, true, 4, null, null],
+  [291, true, 4, 2, 2],
+  [292, true, 3, null, null],
+  [294, true, 4, null, null],
+  [295, false, null, null, null],
+  [296, false, null, null, null],
+  [305, true, 1, null, null],
+  [306, true, 1, null, null],
+  [307, true, 1, null, null],
+  [308, true, 1, null, null],
+  [309, true, 1, null, null],
+  [310, false, null, null, null],
+  [311, false, null, null, null],
+  [316, false, null, null, null],
+  [324, true, 23, null, null],
+  [325, true, 23, null, null],
+  [326, true, 23, null, null],
+  [327, true, 23, null, null],
+  [328, true, 23, null, null],
+  [329, false, null, null, null],
+  [330, false, null, null, null],
+  [339, true, 16, null, null],
+  [340, true, 16, null, null],
+  [341, true, 16, null, null],
+  [342, true, 16, null, null],
+  [343, false, null, null, null],
+  [344, false, null, null, null],
+  [349, true, 9, null, null],
+  [350, true, 9, null, null],
+  [351, true, 9, null, null],
+  [355, true, 3, null, null],
+  [356, true, 3, null, null],
+  [357, true, 3, null, null],
+  [361, true, 7, null, null],
+  [362, true, 7, null, null],
+  [363, true, 7, null, null],
+  [366, true, 20, null, null],
+  [367, true, 20, null, null],
+  [368, true, 20, null, null],
+  [371, true, 18, null, null],
+  [372, true, 18, null, null],
+  [373, true, 18, null, null],
+  [376, false, null, null, null],
+  [377, false, null, 2, 0],
+  [378, false, null, null, null],
+  [380, false, null, null, null],
+  [389, true, 26, null, null],
+  [390, true, 26, null, null],
+  [391, true, 26, null, null],
+  [395, true, 26, null, null],
+  [403, true, 26, null, null],
+  [404, true, 26, null, null],
+  [405, true, 26, null, null],
+  [406, true, 26, null, null],
+  [411, true, 25, null, null],
+  [412, false, null, null, null],
+  [413, false, null, null, null],
+  [421, true, 23, null, null],
+  [422, false, null, null, null],
+  [423, false, null, null, null],
+  [424, true, 23, null, null],
+  [425, true, 23, 2, 1],
+  [426, true, 23, null, null],
+  [428, false, null, null, null],
+  [433, false, null, null, null],
+  [440, true, 10, null, null],
+  [441, true, 10, null, null],
+  [442, true, 10, null, null],
+  [446, true, 10, null, null],
+  [454, true, 10, null, null],
+  [455, true, 10, null, null],
+  [456, true, 10, null, null],
+  [457, true, 10, null, null],
+  [462, true, 10, null, null],
+  [463, false, null, null, null],
+  [464, false, null, null, null],
+  [472, true, 9, null, null],
+  [473, false, null, null, null],
+  [474, false, null, null, null],
+  [475, true, 9, null, null],
+  [476, true, 9, 2, 1],
+  [477, true, 9, null, null],
+  [478, true, 9, null, null],
+  [479, true, 9, null, null],
+  [480, true, 9, 2, 2],
+  [481, true, 9, null, null],
+  [483, true, 9, null, null],
+  [485, false, null, null, null],
+  [490, false, null, null, null],
+  [498, true, 16, null, null],
+  [499, true, 16, null, null],
+  [500, true, 16, null, null],
+  [501, true, 16, null, null],
+  [504, true, 14, null, null],
+  [509, true, 14, null, null],
+  [514, false, null, null, null]
+]}
diff --git a/server/sonar-web/src/test/json/source-viewer-spec/cross-project-duplications.json b/server/sonar-web/src/test/json/source-viewer-spec/cross-project-duplications.json
new file mode 100644 (file)
index 0000000..cd445d5
--- /dev/null
@@ -0,0 +1,33 @@
+{"duplications": [
+  {
+    "blocks": [
+      {
+        "from": 404,
+        "size": 15,
+        "_ref": "1"
+      },
+      {
+        "from": 455,
+        "size": 15,
+        "_ref": "2"
+      }
+    ]
+  }
+], "files": {
+  "1": {
+    "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "name": "src/main/java/org/sonar/batch/index/Cache.java",
+    "project": "org.codehaus.sonar:sonar",
+    "projectName": "SonarQube",
+    "subProject": "org.codehaus.sonar:sonar-batch",
+    "subProjectName": "SonarQube :: Batch"
+  },
+  "2": {
+    "key": "org.codehaus.sonar-plugins.javascript:sonar-javascript-plugin:src/main/java/org/sonar/plugins/javascript/core/JavaScript.java",
+    "name": "src/main/java/org/sonar/plugins/javascript/core/JavaScript.java",
+    "project": "org.codehaus.sonar-plugins.javascript:javascript",
+    "projectName": "JavaScript",
+    "subProject": "org.codehaus.sonar-plugins.javascript:sonar-javascript-plugin",
+    "subProjectName": "JavaScript :: Sonar Plugin"
+  }
+}}
diff --git a/server/sonar-web/src/test/json/source-viewer-spec/duplications-in-deleted-files.json b/server/sonar-web/src/test/json/source-viewer-spec/duplications-in-deleted-files.json
new file mode 100644 (file)
index 0000000..9de23d1
--- /dev/null
@@ -0,0 +1,24 @@
+{"duplications": [
+  {
+    "blocks": [
+      {
+        "from": 404,
+        "size": 15,
+        "_ref": "1"
+      },
+      {
+        "from": 455,
+        "size": 15
+      }
+    ]
+  }
+], "files": {
+  "1": {
+    "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "name": "src/main/java/org/sonar/batch/index/Cache.java",
+    "project": "org.codehaus.sonar:sonar",
+    "projectName": "SonarQube",
+    "subProject": "org.codehaus.sonar:sonar-batch",
+    "subProjectName": "SonarQube :: Batch"
+  }
+}}
diff --git a/server/sonar-web/src/test/json/source-viewer-spec/duplications.json b/server/sonar-web/src/test/json/source-viewer-spec/duplications.json
new file mode 100644 (file)
index 0000000..f77e92b
--- /dev/null
@@ -0,0 +1,25 @@
+{"duplications": [
+  {
+    "blocks": [
+      {
+        "from": 404,
+        "size": 15,
+        "_ref": "1"
+      },
+      {
+        "from": 455,
+        "size": 15,
+        "_ref": "1"
+      }
+    ]
+  }
+], "files": {
+  "1": {
+    "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "name": "src/main/java/org/sonar/batch/index/Cache.java",
+    "project": "org.codehaus.sonar:sonar",
+    "projectName": "SonarQube",
+    "subProject": "org.codehaus.sonar:sonar-batch",
+    "subProjectName": "SonarQube :: Batch"
+  }
+}}
diff --git a/server/sonar-web/src/test/json/source-viewer-spec/issues.json b/server/sonar-web/src/test/json/source-viewer-spec/issues.json
new file mode 100644 (file)
index 0000000..0b16011
--- /dev/null
@@ -0,0 +1,200 @@
+{"total": 6, "p": 1, "ps": 100, "projects": [
+  {
+    "uuid": "69e57151-be0d-4157-adff-c06741d88879",
+    "key": "org.codehaus.sonar:sonar",
+    "id": 2865,
+    "qualifier": "TRK",
+    "name": "SonarQube",
+    "longName": "SonarQube"
+  }
+], "components": [
+  {
+    "uuid": "83379565-7af3-4047-8d1a-ed42b10309b0",
+    "key": "org.codehaus.sonar:sonar-batch",
+    "id": 1624,
+    "enabled": true,
+    "qualifier": "BRC",
+    "name": "SonarQube :: Batch",
+    "longName": "SonarQube :: Batch",
+    "path": "sonar-batch",
+    "projectId": 2865,
+    "subProjectId": 2865
+  },
+  {
+    "uuid": "69e57151-be0d-4157-adff-c06741d88879",
+    "key": "org.codehaus.sonar:sonar",
+    "id": 2865,
+    "enabled": true,
+    "qualifier": "TRK",
+    "name": "SonarQube",
+    "longName": "SonarQube"
+  },
+  {
+    "uuid": "b9615992-2458-4d54-a22f-b91ee7ba5bc5",
+    "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "id": 19983,
+    "enabled": true,
+    "qualifier": "FIL",
+    "name": "Cache.java",
+    "longName": "src/main/java/org/sonar/batch/index/Cache.java",
+    "path": "src/main/java/org/sonar/batch/index/Cache.java",
+    "projectId": 2865,
+    "subProjectId": 1624
+  }
+], "issues": [
+  {
+    "key": "20002ec7-b647-44da-bdf5-4d9fbf4b7c58",
+    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "componentId": 19983,
+    "project": "org.codehaus.sonar:sonar",
+    "subProject": "org.codehaus.sonar:sonar-batch",
+    "rule": "common-java:DuplicatedBlocks",
+    "status": "CONFIRMED",
+    "severity": "MAJOR",
+    "message": "2 duplicated blocks of code.",
+    "debt": "2h",
+    "creationDate": "2014-05-01T23:38:31+0200",
+    "updateDate": "2014-07-01T17:48:47+0200",
+    "fUpdateAge": "5 months",
+    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
+    "transitions": ["unconfirm", "resolve", "falsepositive"]
+  },
+  {
+    "key": "71a26f48-a90d-4a76-a745-4f6e6e8b1773",
+    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "componentId": 19983,
+    "project": "org.codehaus.sonar:sonar",
+    "subProject": "org.codehaus.sonar:sonar-batch",
+    "rule": "squid:S1135",
+    "status": "CONFIRMED",
+    "severity": "INFO",
+    "message": "Complete the task associated to this TODO comment.",
+    "line": 125,
+    "author": "simon.brandhof@gmail.com",
+    "creationDate": "2013-10-10T23:51:33+0200",
+    "updateDate": "2014-07-29T23:15:18+0200",
+    "fUpdateAge": "4 months",
+    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
+    "transitions": ["unconfirm", "resolve", "falsepositive"]
+  },
+  {
+    "key": "75419c88-0e3c-4311-aa47-fe5731e67558",
+    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "componentId": 19983,
+    "project": "org.codehaus.sonar:sonar",
+    "subProject": "org.codehaus.sonar:sonar-batch",
+    "rule": "squid:S1135",
+    "status": "CONFIRMED",
+    "severity": "INFO",
+    "message": "Complete the task associated to this TODO comment.",
+    "line": 155,
+    "author": "simon.brandhof@gmail.com",
+    "creationDate": "2013-10-10T23:51:33+0200",
+    "updateDate": "2014-07-29T23:15:18+0200",
+    "fUpdateAge": "4 months",
+    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
+    "transitions": ["unconfirm", "resolve", "falsepositive"]
+  },
+  {
+    "key": "01461208-6c1e-4cdf-9f27-b7afa78e76ec",
+    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "componentId": 19983,
+    "project": "org.codehaus.sonar:sonar",
+    "subProject": "org.codehaus.sonar:sonar-batch",
+    "rule": "squid:S1135",
+    "status": "CONFIRMED",
+    "severity": "INFO",
+    "message": "Complete the task associated to this TODO comment.",
+    "line": 184,
+    "author": "simon.brandhof@gmail.com",
+    "creationDate": "2013-10-10T23:51:33+0200",
+    "updateDate": "2014-07-29T23:15:18+0200",
+    "fUpdateAge": "4 months",
+    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
+    "transitions": ["unconfirm", "resolve", "falsepositive"]
+  },
+  {
+    "key": "e4de6481-7bfb-460a-8b3c-24459f9561d3",
+    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "componentId": 19983,
+    "project": "org.codehaus.sonar:sonar",
+    "subProject": "org.codehaus.sonar:sonar-batch",
+    "rule": "squid:S1135",
+    "status": "CONFIRMED",
+    "severity": "INFO",
+    "message": "Complete the task associated to this TODO comment.",
+    "line": 239,
+    "author": "Simon Brandhof",
+    "creationDate": "2013-08-09T16:04:33+0200",
+    "updateDate": "2014-07-29T23:15:18+0200",
+    "fUpdateAge": "4 months",
+    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
+    "transitions": ["unconfirm", "resolve", "falsepositive"]
+  },
+  {
+    "key": "59fc17f7-c977-4cb6-8f04-fbe88e4b9186",
+    "component": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "componentId": 19983,
+    "project": "org.codehaus.sonar:sonar",
+    "subProject": "org.codehaus.sonar:sonar-batch",
+    "rule": "squid:S1192",
+    "status": "CONFIRMED",
+    "severity": "MINOR",
+    "message": "Define a constant instead of duplicating this literal \"Fail to get keys from cache \" 3 times.",
+    "line": 257,
+    "debt": "10min",
+    "author": "simon.brandhof@gmail.com",
+    "creationDate": "2014-02-20T07:48:16+0100",
+    "updateDate": "2014-02-24T16:57:34+0100",
+    "fUpdateAge": "9 months",
+    "actions": ["comment", "assign", "assign_to_me", "plan", "set_severity"],
+    "transitions": ["unconfirm", "resolve", "falsepositive"]
+  }
+], "rules": [
+  {
+    "key": "common-java:DuplicatedBlocks",
+    "name": "Duplicated blocks",
+    "lang": "java",
+    "desc": "<p>An issue is created on a file as soon as there is a block of duplicated code on this file. It gives the number of blocks in the file.</p>",
+    "status": "READY",
+    "langName": "Java"
+  },
+  {
+    "key": "squid:S1192",
+    "name": "String literals should not be duplicated",
+    "lang": "java",
+    "desc": "<p>\n  Duplicated string literals make the process of refactoring error-prone, since you must be sure to update all occurrences.\n  On the other hand, constants can be referenced from many places, but only need to be updated in a single place.\n</p>\n\n<h2>Non Compliant Code Example</h2>\n\n<pre>\npublic void run() {\n  prepare(\"action1\");                              // Non-Compliant - \"action1\" is duplicated 3 times\n  execute(\"action1\");\n  release(\"action1\");\n}\n\n@SuppressWarning(\"all\")                            // Compliant - annotations are excluded\nprivate void method1() { /* ... */ }\n@SuppressWarning(\"all\")\nprivate void method2() { /* ... */ }\n\npublic String method3(String a) {\n  System.out.println(\"'\" + a + \"'\");               // Compliant - literal \"'\" has less than 5 characters and is excluded\n  return \"\";                                       // Compliant - literal \"\" has less than 5 characters and is excluded\n}\n</pre>\n\n<h2>Compliant Code Example</h2>\n\n<pre>\nprivate static final String ACTION_1 = \"action1\";  // Compliant\n\npublic void run() {\n  prepare(ACTION_1);                               // Compliant\n  execute(ACTION_1);\n  release(ACTION_1);\n}\n</pre>\n\n<h2>Exceptions</h2>\n<p>To prevent generating some false-positives, literals having less than 5 characters are excluded.</p>",
+    "status": "READY",
+    "langName": "Java"
+  },
+  {
+    "key": "squid:S1135",
+    "name": "TODO tags should be handled",
+    "lang": "java",
+    "desc": "<p>\n<code>TODO</code> tags are commonly used to mark places where some more code is required, but which the developer wants to implement later.\nSometimes the developer will not have the time or will simply forget to get back to that tag.\nThis rule is meant to track those tags, and ensure that they do not go unnoticed.\n</p>\n\n<p>The following code illustrates this rule:</p>\n\n<pre>\nvoid doSomething() {\n  // TODO\n}\n</pre>",
+    "status": "READY",
+    "langName": "Java"
+  }
+], "users": [
+  {
+    "login": "admin",
+    "name": "Admin Admin",
+    "active": true,
+    "email": "admin@sonarsource.com"
+  }
+], "languages": [
+  {
+    "key": "js",
+    "name": "JavaScript"
+  },
+  {
+    "key": "java",
+    "name": "Java"
+  }
+], "maxResultsReached": false, "paging": {
+  "pageIndex": 1,
+  "pageSize": 100,
+  "total": 6,
+  "fTotal": "6",
+  "pages": 1
+}}
diff --git a/server/sonar-web/src/test/json/source-viewer-spec/lines.json b/server/sonar-web/src/test/json/source-viewer-spec/lines.json
new file mode 100644 (file)
index 0000000..e33d02b
--- /dev/null
@@ -0,0 +1,3868 @@
+{"sources": [
+  {
+    "line": 1,
+    "code": "<span class=\"cppd\">/*</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 2,
+    "code": "<span class=\"cppd\"> * SonarQube, open source software quality management tool.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
+    "scmDate": "2013-04-21T11:58:14+0200"
+  },
+  {
+    "line": 3,
+    "code": "<span class=\"cppd\"> * Copyright (C) 2008-2014 SonarSource</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "57ae3026c36ae3b0b71756d6161124b1ae594c53",
+    "scmDate": "2014-03-11T17:52:41+0100"
+  },
+  {
+    "line": 4,
+    "code": "<span class=\"cppd\"> * mailto:contact AT sonarsource DOT com</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 5,
+    "code": "<span class=\"cppd\"> *</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 6,
+    "code": "<span class=\"cppd\"> * SonarQube is free software; you can redistribute it and/or</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
+    "scmDate": "2013-04-21T11:58:14+0200"
+  },
+  {
+    "line": 7,
+    "code": "<span class=\"cppd\"> * modify it under the terms of the GNU Lesser General Public</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 8,
+    "code": "<span class=\"cppd\"> * License as published by the Free Software Foundation; either</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 9,
+    "code": "<span class=\"cppd\"> * version 3 of the License, or (at your option) any later version.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 10,
+    "code": "<span class=\"cppd\"> *</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 11,
+    "code": "<span class=\"cppd\"> * SonarQube is distributed in the hope that it will be useful,</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
+    "scmDate": "2013-04-21T11:58:14+0200"
+  },
+  {
+    "line": 12,
+    "code": "<span class=\"cppd\"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 13,
+    "code": "<span class=\"cppd\"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 14,
+    "code": "<span class=\"cppd\"> * Lesser General Public License for more details.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 15,
+    "code": "<span class=\"cppd\"> *</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 16,
+    "code": "<span class=\"cppd\"> * You should have received a copy of the GNU Lesser General Public License</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
+    "scmDate": "2013-04-22T09:37:03+0200"
+  },
+  {
+    "line": 17,
+    "code": "<span class=\"cppd\"> * along with this program; if not, write to the Free Software Foundation,</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
+    "scmDate": "2013-04-22T09:37:03+0200"
+  },
+  {
+    "line": 18,
+    "code": "<span class=\"cppd\"> * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
+    "scmDate": "2013-04-22T09:37:03+0200"
+  },
+  {
+    "line": 19,
+    "code": "<span class=\"cppd\"> */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 20,
+    "code": "<span class=\"k\">package</span> org.sonar.batch.index;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 21,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 22,
+    "code": "<span class=\"k\">import </span>com.google.common.collect.<span class=\"sym-1 sym\">Sets</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 23,
+    "code": "<span class=\"k\">import </span>com.persistit.<span class=\"sym-2 sym\">Exchange</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 24,
+    "code": "<span class=\"k\">import </span>com.persistit.<span class=\"sym-3 sym\">Key</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 25,
+    "code": "<span class=\"k\">import </span>com.persistit.<span class=\"sym-4 sym\">KeyFilter</span>;",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 26,
+    "code": "<span class=\"k\">import </span>com.persistit.exception.<span class=\"sym-5 sym\">PersistitException</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 27,
+    "code": "<span class=\"k\">import </span>org.apache.commons.lang.builder.<span class=\"sym-6 sym\">ToStringBuilder</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 28,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 29,
+    "code": "<span class=\"k\">import </span>javax.annotation.<span class=\"sym-7 sym\">CheckForNull</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 30,
+    "code": "",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 31,
+    "code": "<span class=\"k\">import </span>java.util.<span class=\"sym-8 sym\">Iterator</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 32,
+    "code": "<span class=\"k\">import </span>java.util.<span class=\"sym-9 sym\">NoSuchElementException</span>;",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 33,
+    "code": "<span class=\"k\">import </span>java.util.<span class=\"sym-10 sym\">Set</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 34,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 35,
+    "code": "<span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 36,
+    "code": "<span class=\"cppd\"> * &lt;p&gt;</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 37,
+    "code": "<span class=\"cppd\"> * This cache is not thread-safe, due to direct usage of {@link com.persistit.Exchange}</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 38,
+    "code": "<span class=\"cppd\"> * &lt;/p&gt;</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 39,
+    "code": "<span class=\"cppd\"> */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 40,
+    "code": "<span class=\"k\">public </span><span class=\"k\">class</span> <span class=\"sym-11 sym\">Cache</span>&lt;V&gt; {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
+    "scmDate": "2014-07-25T16:31:45+0200"
+  },
+  {
+    "line": 41,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 42,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">final </span>String <span class=\"sym-12 sym\">name</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 43,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-13 sym\">exchange</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 44,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 45,
+    "code": "  <span class=\"sym-14 sym\">Cache</span>(String <span class=\"sym-15 sym\">name</span>, <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-16 sym\">exchange</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 46,
+    "code": "    <span class=\"k\">this</span>.<span class=\"sym-12 sym\">name</span> = <span class=\"sym-15 sym\">name</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 47,
+    "code": "    <span class=\"k\">this</span>.<span class=\"sym-13 sym\">exchange</span> = <span class=\"sym-16 sym\">exchange</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 48,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 49,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 50,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-17 sym\">put</span>(Object <span class=\"sym-18 sym\">key</span>, V <span class=\"sym-19 sym\">value</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 51,
+    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-18 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 52,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-19 sym\">value</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 53,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 54,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 55,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-20 sym\">put</span>(Object <span class=\"sym-21 sym\">firstKey</span>, Object <span class=\"sym-22 sym\">secondKey</span>, V <span class=\"sym-23 sym\">value</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 56,
+    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-21 sym\">firstKey</span>, <span class=\"sym-22 sym\">secondKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 57,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-23 sym\">value</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 58,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 59,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 60,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-24 sym\">put</span>(Object <span class=\"sym-25 sym\">firstKey</span>, Object <span class=\"sym-26 sym\">secondKey</span>, Object <span class=\"sym-27 sym\">thirdKey</span>, V <span class=\"sym-28 sym\">value</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 61,
+    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-25 sym\">firstKey</span>, <span class=\"sym-26 sym\">secondKey</span>, <span class=\"sym-27 sym\">thirdKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 62,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-28 sym\">value</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 63,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 64,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 65,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-29 sym\">put</span>(Object[] <span class=\"sym-30 sym\">key</span>, V <span class=\"sym-31 sym\">value</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 66,
+    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-30 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 67,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-32 sym\">doPut</span>(<span class=\"sym-31 sym\">value</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 68,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 69,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 70,
+    "code": "  <span class=\"k\">private </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-32 sym\">doPut</span>(V <span class=\"sym-33 sym\">value</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 71,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 72,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.getValue().put(<span class=\"sym-33 sym\">value</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 73,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.store();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 74,
+    "code": "      <span class=\"k\">return</span> <span class=\"k\">this</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 75,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-34 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 76,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to put element in the cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-34 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 77,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 78,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 79,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 80,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 81,
+    "code": "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 82,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 83,
+    "code": "  <span class=\"k\">public </span>V <span class=\"sym-35 sym\">get</span>(Object <span class=\"sym-36 sym\">key</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 84,
+    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-36 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 85,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 86,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 87,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 88,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 89,
+    "code": "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 90,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 91,
+    "code": "  <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 92,
+    "code": "<span class=\"a\">  </span><span class=\"k\">public </span>V <span class=\"sym-37 sym\">get</span>(Object <span class=\"sym-38 sym\">firstKey</span>, Object <span class=\"sym-39 sym\">secondKey</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 93,
+    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-38 sym\">firstKey</span>, <span class=\"sym-39 sym\">secondKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 94,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 95,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 96,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 97,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 98,
+    "code": "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 99,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 100,
+    "code": "  <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 101,
+    "code": "<span class=\"a\">  </span><span class=\"k\">public </span>V <span class=\"sym-40 sym\">get</span>(Object <span class=\"sym-41 sym\">firstKey</span>, Object <span class=\"sym-42 sym\">secondKey</span>, Object <span class=\"sym-43 sym\">thirdKey</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 102,
+    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-41 sym\">firstKey</span>, <span class=\"sym-42 sym\">secondKey</span>, <span class=\"sym-43 sym\">thirdKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 103,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 104,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 105,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 106,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 107,
+    "code": "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 108,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 109,
+    "code": "  <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 110,
+    "code": "<span class=\"a\">  </span><span class=\"k\">public </span>V <span class=\"sym-44 sym\">get</span>(Object[] <span class=\"sym-45 sym\">key</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 111,
+    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-45 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 112,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-46 sym\">doGet</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 113,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 114,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 115,
+    "code": "  <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 116,
+    "code": "  <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 117,
+    "code": "<span class=\"a\">  </span><span class=\"k\">private </span>V <span class=\"sym-46 sym\">doGet</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 118,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 119,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.fetch();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 120,
+    "code": "      <span class=\"k\">if </span>(!<span class=\"sym-13 sym\">exchange</span>.getValue().isDefined()) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1,
+    "conditions": 2,
+    "coveredConditions": 2
+  },
+  {
+    "line": 121,
+    "code": "        <span class=\"k\">return</span> <span class=\"k\">null</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 122,
+    "code": "      }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 123,
+    "code": "      <span class=\"k\">return</span> (V) <span class=\"sym-13 sym\">exchange</span>.getValue().get();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 124,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-47 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 125,
+    "code": "      <span class=\"cppd\">// TODO add parameters to message</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200"
+  },
+  {
+    "line": 126,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get element from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-47 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 127,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 128,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 129,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 130,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-48 sym\">containsKey</span>(Object <span class=\"sym-49 sym\">key</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 131,
+    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-49 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 132,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 133,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 134,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 135,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-50 sym\">containsKey</span>(Object <span class=\"sym-51 sym\">firstKey</span>, Object <span class=\"sym-52 sym\">secondKey</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 136,
+    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-51 sym\">firstKey</span>, <span class=\"sym-52 sym\">secondKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 137,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 138,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 139,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 140,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-53 sym\">containsKey</span>(Object <span class=\"sym-54 sym\">firstKey</span>, Object <span class=\"sym-55 sym\">secondKey</span>, Object <span class=\"sym-56 sym\">thirdKey</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 141,
+    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-54 sym\">firstKey</span>, <span class=\"sym-55 sym\">secondKey</span>, <span class=\"sym-56 sym\">thirdKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 142,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 143,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 144,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 145,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-57 sym\">containsKey</span>(Object[] <span class=\"sym-58 sym\">key</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 146,
+    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-58 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 147,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-59 sym\">doContainsKey</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 148,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 149,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 150,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">boolean </span><span class=\"sym-59 sym\">doContainsKey</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 151,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200"
+  },
+  {
+    "line": 152,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.fetch();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 153,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-13 sym\">exchange</span>.isValueDefined();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 154,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-60 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 155,
+    "code": "      <span class=\"cppd\">// TODO add parameters to message</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200"
+  },
+  {
+    "line": 156,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to check if element is in cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-60 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 157,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200"
+  },
+  {
+    "line": 158,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200"
+  },
+  {
+    "line": 159,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200"
+  },
+  {
+    "line": 160,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-61 sym\">remove</span>(Object <span class=\"sym-62 sym\">key</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 161,
+    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-62 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 162,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 163,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 164,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 165,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-63 sym\">remove</span>(Object <span class=\"sym-64 sym\">firstKey</span>, Object <span class=\"sym-65 sym\">secondKey</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 166,
+    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-64 sym\">firstKey</span>, <span class=\"sym-65 sym\">secondKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 167,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 168,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 169,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 170,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-66 sym\">remove</span>(Object <span class=\"sym-67 sym\">firstKey</span>, Object <span class=\"sym-68 sym\">secondKey</span>, Object <span class=\"sym-69 sym\">thirdKey</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 171,
+    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-67 sym\">firstKey</span>, <span class=\"sym-68 sym\">secondKey</span>, <span class=\"sym-69 sym\">thirdKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 172,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 173,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 174,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 175,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-70 sym\">remove</span>(Object[] <span class=\"sym-71 sym\">key</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 176,
+    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-71 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 177,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-72 sym\">doRemove</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 178,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 179,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 180,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">boolean </span><span class=\"sym-72 sym\">doRemove</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 181,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 182,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-13 sym\">exchange</span>.remove();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "6f1161efb92298ace498df544e38f6f97216ec36",
+    "scmDate": "2013-04-26T15:19:16+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 183,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-73 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 184,
+    "code": "      <span class=\"cppd\">// TODO add parameters to message</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e108f5de333cf36aff978aa03940590f9caca9fc",
+    "scmDate": "2013-10-10T12:18:02+0200"
+  },
+  {
+    "line": 185,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get element from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-73 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 186,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 187,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 188,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 189,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 190,
+    "code": "<span class=\"cppd\">   * Removes everything in the specified group.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 191,
+    "code": "<span class=\"cppd\">   *</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 192,
+    "code": "<span class=\"cppd\">   * @param group The group name.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 193,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 194,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-74 sym\">clear</span>(Object <span class=\"sym-75 sym\">key</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 195,
+    "code": "    <span class=\"sym-127 sym\">resetKey</span>(<span class=\"sym-75 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 196,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 197,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 198,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 199,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-76 sym\">clear</span>(Object <span class=\"sym-77 sym\">firstKey</span>, Object <span class=\"sym-78 sym\">secondKey</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 200,
+    "code": "    <span class=\"sym-129 sym\">resetKey</span>(<span class=\"sym-77 sym\">firstKey</span>, <span class=\"sym-78 sym\">secondKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 201,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 202,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 203,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 204,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-79 sym\">clear</span>(Object <span class=\"sym-80 sym\">firstKey</span>, Object <span class=\"sym-81 sym\">secondKey</span>, Object <span class=\"sym-82 sym\">thirdKey</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 205,
+    "code": "    <span class=\"sym-132 sym\">resetKey</span>(<span class=\"sym-80 sym\">firstKey</span>, <span class=\"sym-81 sym\">secondKey</span>, <span class=\"sym-82 sym\">thirdKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 206,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 207,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 208,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 209,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-83 sym\">clear</span>(Object[] <span class=\"sym-84 sym\">key</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 210,
+    "code": "    <span class=\"sym-136 sym\">resetKey</span>(<span class=\"sym-84 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 211,
+    "code": "    <span class=\"k\">return</span> <span class=\"sym-85 sym\">doClear</span>();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 212,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 213,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 214,
+    "code": "  <span class=\"k\">private </span><span class=\"sym-11 sym\">Cache</span>&lt;V&gt; <span class=\"sym-85 sym\">doClear</span>() {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 215,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 216,
+    "code": "      <span class=\"sym-3 sym\">Key</span> <span class=\"sym-86 sym\">to</span> = <span class=\"k\">new</span> <span class=\"sym-3 sym\">Key</span>(<span class=\"sym-13 sym\">exchange</span>.getKey());",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 217,
+    "code": "      <span class=\"sym-86 sym\">to</span>.append(<span class=\"sym-3 sym\">Key</span>.AFTER);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 218,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.removeKeyRange(<span class=\"sym-13 sym\">exchange</span>.getKey(), <span class=\"sym-86 sym\">to</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 219,
+    "code": "      <span class=\"k\">return</span> <span class=\"k\">this</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 220,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-87 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 221,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to clear values from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-87 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 222,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 223,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 224,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 225,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 226,
+    "code": "<span class=\"cppd\">   * Clears the default as well as all group caches.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 227,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 228,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-88 sym\">clear</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 229,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 230,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 231,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.removeAll();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 232,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-89 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 233,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to clear cache\"</span>, <span class=\"sym-89 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 234,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 235,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 236,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 237,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 238,
+    "code": "<span class=\"cppd\">   * Returns the set of cache keys associated with this group.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 239,
+    "code": "<span class=\"cppd\">   * TODO implement a lazy-loading equivalent with Iterator/Iterable</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 240,
+    "code": "<span class=\"cppd\">   *</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 241,
+    "code": "<span class=\"cppd\">   * @param group The group.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 242,
+    "code": "<span class=\"cppd\">   * @return The set of cache keys for this group.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 243,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 244,
+    "code": "  <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"rawtypes\"</span>)",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 245,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-10 sym\">Set</span> <span class=\"sym-90 sym\">keySet</span>(Object <span class=\"sym-91 sym\">key</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 246,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 247,
+    "code": "      <span class=\"sym-10 sym\">Set</span>&lt;Object&gt; <span class=\"sym-92 sym\">keys</span> = <span class=\"sym-1 sym\">Sets</span>.newLinkedHashSet();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 248,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 249,
+    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-93 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 250,
+    "code": "      <span class=\"sym-93 sym\">iteratorExchange</span>.append(<span class=\"sym-91 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 251,
+    "code": "      <span class=\"sym-93 sym\">iteratorExchange</span>.append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 252,
+    "code": "      <span class=\"k\">while </span>(<span class=\"sym-93 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1,
+    "conditions": 2,
+    "coveredConditions": 2
+  },
+  {
+    "line": 253,
+    "code": "        <span class=\"sym-92 sym\">keys</span>.add(<span class=\"sym-93 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 254,
+    "code": "      }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 255,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-92 sym\">keys</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 256,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-94 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 257,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-94 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 258,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 259,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 260,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 261,
+    "code": "  <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"rawtypes\"</span>)",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 262,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-10 sym\">Set</span> <span class=\"sym-95 sym\">keySet</span>(Object <span class=\"sym-96 sym\">firstKey</span>, Object <span class=\"sym-97 sym\">secondKey</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 263,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 264,
+    "code": "      <span class=\"sym-10 sym\">Set</span>&lt;Object&gt; <span class=\"sym-98 sym\">keys</span> = <span class=\"sym-1 sym\">Sets</span>.newLinkedHashSet();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 265,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 266,
+    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-99 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 267,
+    "code": "      <span class=\"sym-99 sym\">iteratorExchange</span>.append(<span class=\"sym-96 sym\">firstKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 268,
+    "code": "      <span class=\"sym-99 sym\">iteratorExchange</span>.append(<span class=\"sym-97 sym\">secondKey</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 269,
+    "code": "      <span class=\"sym-99 sym\">iteratorExchange</span>.append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 270,
+    "code": "      <span class=\"k\">while </span>(<span class=\"sym-99 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1,
+    "conditions": 2,
+    "coveredConditions": 2
+  },
+  {
+    "line": 271,
+    "code": "        <span class=\"sym-98 sym\">keys</span>.add(<span class=\"sym-99 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 272,
+    "code": "      }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 273,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-98 sym\">keys</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 274,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-100 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 275,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-100 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 276,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 277,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 278,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 279,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 280,
+    "code": "<span class=\"cppd\">   * Returns the set of keys associated with this cache.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 281,
+    "code": "<span class=\"cppd\">   *</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 282,
+    "code": "<span class=\"cppd\">   * @return The set containing the keys for this cache.</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 283,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 284,
+    "code": "  <span class=\"k\">public </span><span class=\"sym-10 sym\">Set</span>&lt;Object&gt; <span class=\"sym-101 sym\">keySet</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 285,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 286,
+    "code": "      <span class=\"sym-10 sym\">Set</span>&lt;Object&gt; <span class=\"sym-102 sym\">keys</span> = <span class=\"sym-1 sym\">Sets</span>.newLinkedHashSet();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 287,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 288,
+    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-103 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 289,
+    "code": "      <span class=\"sym-103 sym\">iteratorExchange</span>.append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 290,
+    "code": "      <span class=\"k\">while </span>(<span class=\"sym-103 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1,
+    "conditions": 2,
+    "coveredConditions": 2
+  },
+  {
+    "line": 291,
+    "code": "        <span class=\"sym-102 sym\">keys</span>.add(<span class=\"sym-103 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 292,
+    "code": "      }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 293,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-102 sym\">keys</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 294,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-104 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 295,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-104 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 296,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 297,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 298,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 299,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 300,
+    "code": "<span class=\"cppd\">   * Lazy-loading values for given keys</span>",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 301,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 302,
+    "code": "  <span class=\"k\">public </span>Iterable&lt;V&gt; <span class=\"sym-105 sym\">values</span>(Object <span class=\"sym-106 sym\">firstKey</span>, Object <span class=\"sym-107 sym\">secondKey</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 303,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 304,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 305,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-106 sym\">firstKey</span>).append(<span class=\"sym-107 sym\">secondKey</span>).append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 306,
+    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-108 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 307,
+    "code": "      <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-109 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-106 sym\">firstKey</span>)).append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-107 sym\">secondKey</span>));",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 308,
+    "code": "      <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-139 sym\">ValueIterable</span>&lt;V&gt;(<span class=\"sym-108 sym\">iteratorExchange</span>, <span class=\"sym-109 sym\">filter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 309,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-110 sym\">e</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 310,
+    "code": "      <span class=\"k\">throw</span> <span class=\"sym-111 sym\">failToGetValues</span>(<span class=\"sym-110 sym\">e</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+    "scmDate": "2014-06-20T14:13:01+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 311,
+    "code": "    }",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 312,
+    "code": "  }",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+    "scmDate": "2014-06-20T14:13:01+0200"
+  },
+  {
+    "line": 313,
+    "code": "",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+    "scmDate": "2014-06-20T14:13:01+0200"
+  },
+  {
+    "line": 314,
+    "code": "  <span class=\"k\">private </span>IllegalStateException <span class=\"sym-111 sym\">failToGetValues</span>(Exception <span class=\"sym-112 sym\">e</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+    "scmDate": "2014-06-20T14:13:01+0200"
+  },
+  {
+    "line": 315,
+    "code": "    <span class=\"k\">return</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"s\">\"Fail to get values from cache \" </span>+ <span class=\"sym-12 sym\">name</span>, <span class=\"sym-112 sym\">e</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+    "scmDate": "2014-06-20T14:13:01+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 316,
+    "code": "  }",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 317,
+    "code": "",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 318,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "171cd79c0b5152461434951ed5d6e5e58849a7b7",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 319,
+    "code": "<span class=\"cppd\">   * Lazy-loading values for a given key</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 320,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 321,
+    "code": "  <span class=\"k\">public </span>Iterable&lt;V&gt; <span class=\"sym-113 sym\">values</span>(Object <span class=\"sym-114 sym\">firstKey</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 322,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 323,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 324,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-114 sym\">firstKey</span>).append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 325,
+    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-115 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 326,
+    "code": "      <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-116 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-114 sym\">firstKey</span>));",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 327,
+    "code": "      <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-139 sym\">ValueIterable</span>&lt;V&gt;(<span class=\"sym-115 sym\">iteratorExchange</span>, <span class=\"sym-116 sym\">filter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 328,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-117 sym\">e</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
+    "scmDate": "2014-04-23T14:41:32+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 329,
+    "code": "      <span class=\"k\">throw</span> <span class=\"sym-111 sym\">failToGetValues</span>(<span class=\"sym-117 sym\">e</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+    "scmDate": "2014-06-20T14:13:01+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 330,
+    "code": "    }",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 331,
+    "code": "  }",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 332,
+    "code": "",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 333,
+    "code": "  <span class=\"cppd\">/**</span>",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "46395126b184c343df5471a147cdb48133f59f6f",
+    "scmDate": "2014-04-23T14:41:32+0200"
+  },
+  {
+    "line": 334,
+    "code": "<span class=\"cppd\">   * Lazy-loading values</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 335,
+    "code": "<span class=\"cppd\">   */</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 336,
+    "code": "  <span class=\"k\">public </span>Iterable&lt;V&gt; <span class=\"sym-118 sym\">values</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 337,
+    "code": "    <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 338,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.clear().append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 339,
+    "code": "      <span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-119 sym\">iteratorExchange</span> = <span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 340,
+    "code": "      <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-120 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.ALL);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 341,
+    "code": "      <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-139 sym\">ValueIterable</span>&lt;V&gt;(<span class=\"sym-119 sym\">iteratorExchange</span>, <span class=\"sym-120 sym\">filter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 342,
+    "code": "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-121 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 343,
+    "code": "      <span class=\"k\">throw</span> <span class=\"sym-111 sym\">failToGetValues</span>(<span class=\"sym-121 sym\">e</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "904b462c56317b1fb5a616534bd58aa9c9097d0b",
+    "scmDate": "2014-06-20T14:13:01+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 344,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 345,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 346,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 347,
+    "code": "  <span class=\"k\">public </span>Iterable&lt;<span class=\"sym-177 sym\">Entry</span>&lt;V&gt;&gt; <span class=\"sym-122 sym\">entries</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 348,
+    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear().to(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 349,
+    "code": "    <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-123 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.ALL);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 350,
+    "code": "    <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-156 sym\">EntryIterable</span>&lt;V&gt;(<span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>), <span class=\"sym-123 sym\">filter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 351,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 352,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 353,
+    "code": "  <span class=\"k\">public </span>Iterable&lt;<span class=\"sym-177 sym\">Entry</span>&lt;V&gt;&gt; <span class=\"sym-124 sym\">entries</span>(Object <span class=\"sym-125 sym\">firstKey</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 354,
+    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear().append(<span class=\"sym-125 sym\">firstKey</span>).append(<span class=\"sym-3 sym\">Key</span>.BEFORE);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 355,
+    "code": "    <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-126 sym\">filter</span> = <span class=\"k\">new</span> <span class=\"sym-4 sym\">KeyFilter</span>().append(<span class=\"sym-4 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-125 sym\">firstKey</span>));",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 356,
+    "code": "    <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-156 sym\">EntryIterable</span>&lt;V&gt;(<span class=\"k\">new</span> <span class=\"sym-2 sym\">Exchange</span>(<span class=\"sym-13 sym\">exchange</span>), <span class=\"sym-126 sym\">filter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 357,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 358,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 359,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-127 sym\">resetKey</span>(Object <span class=\"sym-128 sym\">key</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 360,
+    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 361,
+    "code": "    <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-128 sym\">key</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 362,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 363,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 364,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-129 sym\">resetKey</span>(Object <span class=\"sym-130 sym\">first</span>, Object <span class=\"sym-131 sym\">second</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 365,
+    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 366,
+    "code": "    <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-130 sym\">first</span>).append(<span class=\"sym-131 sym\">second</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 367,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 368,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 369,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-132 sym\">resetKey</span>(Object <span class=\"sym-133 sym\">first</span>, Object <span class=\"sym-134 sym\">second</span>, Object <span class=\"sym-135 sym\">third</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 370,
+    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 371,
+    "code": "    <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-133 sym\">first</span>).append(<span class=\"sym-134 sym\">second</span>).append(<span class=\"sym-135 sym\">third</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 372,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 373,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 374,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-136 sym\">resetKey</span>(Object[] <span class=\"sym-137 sym\">keys</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 375,
+    "code": "    <span class=\"sym-13 sym\">exchange</span>.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 376,
+    "code": "    <span class=\"k\">for</span> (Object <span class=\"sym-138 sym\">o</span> : <span class=\"sym-137 sym\">keys</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0,
+    "conditions": 2,
+    "coveredConditions": 0
+  },
+  {
+    "line": 377,
+    "code": "      <span class=\"sym-13 sym\">exchange</span>.append(<span class=\"sym-138 sym\">o</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 378,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 379,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 380,
+    "code": "",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "7b301db8c7e3000ff2a04fce5534e45e7d973a1f",
+    "scmDate": "2014-04-25T11:17:09+0200"
+  },
+  {
+    "line": 381,
+    "code": "  <span class=\"cppd\">//</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 382,
+    "code": "  <span class=\"cppd\">// LAZY ITERATORS AND ITERABLES</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 383,
+    "code": "  <span class=\"cppd\">//</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 384,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 385,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-139 sym\">ValueIterable</span>&lt;T&gt; <span class=\"k\">implements</span> Iterable&lt;T&gt; {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
+    "scmDate": "2014-07-25T16:31:45+0200"
+  },
+  {
+    "line": 386,
+    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-8 sym\">Iterator</span>&lt;T&gt; <span class=\"sym-140 sym\">iterator</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 387,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 388,
+    "code": "    <span class=\"k\">private </span><span class=\"sym-141 sym\">ValueIterable</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-142 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-143 sym\">keyFilter</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 389,
+    "code": "      <span class=\"k\">this</span>.<span class=\"sym-140 sym\">iterator</span> = <span class=\"k\">new</span> <span class=\"sym-145 sym\">ValueIterator</span>&lt;T&gt;(<span class=\"sym-142 sym\">exchange</span>, <span class=\"sym-143 sym\">keyFilter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 390,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 391,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 392,
+    "code": "    <span class=\"a\">@Override</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 393,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"sym-8 sym\">Iterator</span>&lt;T&gt; <span class=\"sym-144 sym\">iterator</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 394,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-140 sym\">iterator</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 395,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 396,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 397,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 398,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-145 sym\">ValueIterator</span>&lt;T&gt; <span class=\"k\">implements</span> <span class=\"sym-8 sym\">Iterator</span>&lt;T&gt; {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
+    "scmDate": "2014-07-25T16:31:45+0200"
+  },
+  {
+    "line": 399,
+    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-146 sym\">exchange</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 400,
+    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-147 sym\">keyFilter</span>;",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 401,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 402,
+    "code": "    <span class=\"k\">private </span><span class=\"sym-148 sym\">ValueIterator</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-149 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-150 sym\">keyFilter</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 403,
+    "code": "      <span class=\"k\">this</span>.<span class=\"sym-146 sym\">exchange</span> = <span class=\"sym-149 sym\">exchange</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "lineHits": 1,
+    "duplicated": true
+  },
+  {
+    "line": 404,
+    "code": "      <span class=\"k\">this</span>.<span class=\"sym-147 sym\">keyFilter</span> = <span class=\"sym-150 sym\">keyFilter</span>;",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1,
+    "duplicated": true
+  },
+  {
+    "line": 405,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "lineHits": 1,
+    "duplicated": true
+  },
+  {
+    "line": 406,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "duplicated": true
+  },
+  {
+    "line": 407,
+    "code": "    <span class=\"a\">@Override</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "duplicated": true
+  },
+  {
+    "line": 408,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-151 sym\">hasNext</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "duplicated": true
+  },
+  {
+    "line": 409,
+    "code": "      <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "duplicated": true
+  },
+  {
+    "line": 410,
+    "code": "        <span class=\"k\">return</span> <span class=\"sym-146 sym\">exchange</span>.hasNext(<span class=\"sym-147 sym\">keyFilter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1,
+    "duplicated": true
+  },
+  {
+    "line": 411,
+    "code": "      } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-152 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "lineHits": 0,
+    "duplicated": true
+  },
+  {
+    "line": 412,
+    "code": "        <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-152 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "lineHits": 0,
+    "duplicated": true
+  },
+  {
+    "line": 413,
+    "code": "      }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "duplicated": true
+  },
+  {
+    "line": 414,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "duplicated": true
+  },
+  {
+    "line": 415,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "duplicated": true
+  },
+  {
+    "line": 416,
+    "code": "    <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "duplicated": true
+  },
+  {
+    "line": 417,
+    "code": "    <span class=\"a\">@Override</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "duplicated": true
+  },
+  {
+    "line": 418,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span>T <span class=\"sym-153 sym\">next</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 419,
+    "code": "      <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 420,
+    "code": "        <span class=\"sym-146 sym\">exchange</span>.next(<span class=\"sym-147 sym\">keyFilter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 421,
+    "code": "      } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-154 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 422,
+    "code": "        <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-154 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 423,
+    "code": "      }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 424,
+    "code": "      <span class=\"k\">if </span>(<span class=\"sym-146 sym\">exchange</span>.getValue().isDefined()) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200",
+    "lineHits": 1,
+    "conditions": 2,
+    "coveredConditions": 1
+  },
+  {
+    "line": 425,
+    "code": "        <span class=\"k\">return</span> (T) <span class=\"sym-146 sym\">exchange</span>.getValue().get();",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 426,
+    "code": "      }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 427,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> <span class=\"sym-9 sym\">NoSuchElementException</span>();",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 428,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 429,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 430,
+    "code": "    <span class=\"a\">@Override</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 431,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-155 sym\">remove</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "babb50a4f143c312df1ba45955d3d589ecb2845f",
+    "scmDate": "2013-05-29T14:27:38+0200"
+  },
+  {
+    "line": 432,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> UnsupportedOperationException(<span class=\"s\">\"Removing an item is not supported\"</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "34cce8e330192c56a159a856ebd8072d38299087",
+    "scmDate": "2014-02-24T14:21:50+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 433,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 434,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 435,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 436,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-156 sym\">EntryIterable</span>&lt;T&gt; <span class=\"k\">implements</span> Iterable&lt;<span class=\"sym-177 sym\">Entry</span>&lt;T&gt;&gt; {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
+    "scmDate": "2014-07-25T16:31:45+0200"
+  },
+  {
+    "line": 437,
+    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-162 sym\">EntryIterator</span>&lt;T&gt; <span class=\"sym-157 sym\">it</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 438,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 439,
+    "code": "    <span class=\"k\">private </span><span class=\"sym-158 sym\">EntryIterable</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-159 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-160 sym\">keyFilter</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 440,
+    "code": "      <span class=\"sym-157 sym\">it</span> = <span class=\"k\">new</span> <span class=\"sym-162 sym\">EntryIterator</span>&lt;T&gt;(<span class=\"sym-159 sym\">exchange</span>, <span class=\"sym-160 sym\">keyFilter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 441,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 442,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 443,
+    "code": "    <span class=\"a\">@Override</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 444,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"sym-8 sym\">Iterator</span>&lt;<span class=\"sym-177 sym\">Entry</span>&lt;T&gt;&gt; <span class=\"sym-161 sym\">iterator</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 445,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-157 sym\">it</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 446,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 447,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 448,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 449,
+    "code": "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-162 sym\">EntryIterator</span>&lt;T&gt; <span class=\"k\">implements</span> <span class=\"sym-8 sym\">Iterator</span>&lt;<span class=\"sym-177 sym\">Entry</span>&lt;T&gt;&gt; {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
+    "scmDate": "2014-07-25T16:31:45+0200"
+  },
+  {
+    "line": 450,
+    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-163 sym\">exchange</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 451,
+    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-164 sym\">keyFilter</span>;",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 452,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 453,
+    "code": "    <span class=\"k\">private </span><span class=\"sym-165 sym\">EntryIterator</span>(<span class=\"sym-2 sym\">Exchange</span> <span class=\"sym-166 sym\">exchange</span>, <span class=\"sym-4 sym\">KeyFilter</span> <span class=\"sym-167 sym\">keyFilter</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 454,
+    "code": "      <span class=\"k\">this</span>.<span class=\"sym-163 sym\">exchange</span> = <span class=\"sym-166 sym\">exchange</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "lineHits": 1,
+    "duplicated": true
+  },
+  {
+    "line": 455,
+    "code": "      <span class=\"k\">this</span>.<span class=\"sym-164 sym\">keyFilter</span> = <span class=\"sym-167 sym\">keyFilter</span>;",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1,
+    "duplicated": true
+  },
+  {
+    "line": 456,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "lineHits": 1,
+    "duplicated": true
+  },
+  {
+    "line": 457,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "duplicated": true
+  },
+  {
+    "line": 458,
+    "code": "    <span class=\"a\">@Override</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "duplicated": true
+  },
+  {
+    "line": 459,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-168 sym\">hasNext</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "duplicated": true
+  },
+  {
+    "line": 460,
+    "code": "      <span class=\"k\">try </span>{",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "duplicated": true
+  },
+  {
+    "line": 461,
+    "code": "        <span class=\"k\">return</span> <span class=\"sym-163 sym\">exchange</span>.hasNext(<span class=\"sym-164 sym\">keyFilter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1,
+    "duplicated": true
+  },
+  {
+    "line": 462,
+    "code": "      } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-169 sym\">e</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "lineHits": 0,
+    "duplicated": true
+  },
+  {
+    "line": 463,
+    "code": "        <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-169 sym\">e</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "lineHits": 0,
+    "duplicated": true
+  },
+  {
+    "line": 464,
+    "code": "      }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "duplicated": true
+  },
+  {
+    "line": 465,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "duplicated": true
+  },
+  {
+    "line": 466,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "duplicated": true
+  },
+  {
+    "line": 467,
+    "code": "    <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "duplicated": true
+  },
+  {
+    "line": 468,
+    "code": "    <span class=\"a\">@Override</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "duplicated": true
+  },
+  {
+    "line": 469,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"sym-177 sym\">Entry</span>&lt;T&gt; <span class=\"sym-170 sym\">next</span>() {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 470,
+    "code": "      <span class=\"k\">try </span>{",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 471,
+    "code": "        <span class=\"sym-163 sym\">exchange</span>.next(<span class=\"sym-164 sym\">keyFilter</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 472,
+    "code": "      } <span class=\"k\">catch </span>(<span class=\"sym-5 sym\">PersistitException</span> <span class=\"sym-171 sym\">e</span>) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 473,
+    "code": "        <span class=\"k\">throw</span> <span class=\"k\">new</span> IllegalStateException(<span class=\"sym-171 sym\">e</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 474,
+    "code": "      }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 475,
+    "code": "      <span class=\"k\">if </span>(<span class=\"sym-163 sym\">exchange</span>.getValue().isDefined()) {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1,
+    "conditions": 2,
+    "coveredConditions": 1
+  },
+  {
+    "line": 476,
+    "code": "        T <span class=\"sym-172 sym\">value</span> = (T) <span class=\"sym-163 sym\">exchange</span>.getValue().get();",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 477,
+    "code": "        <span class=\"sym-3 sym\">Key</span> <span class=\"sym-173 sym\">key</span> = <span class=\"sym-163 sym\">exchange</span>.getKey();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 478,
+    "code": "        Object[] <span class=\"sym-174 sym\">array</span> = <span class=\"k\">new</span> Object[<span class=\"sym-173 sym\">key</span>.getDepth()];",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 479,
+    "code": "        <span class=\"k\">for</span> (<span class=\"k\">int </span><span class=\"sym-175 sym\">i</span> = <span class=\"c\">0</span>; <span class=\"sym-175 sym\">i</span> &lt; <span class=\"sym-173 sym\">key</span>.getDepth(); <span class=\"sym-175 sym\">i</span>++) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1,
+    "conditions": 2,
+    "coveredConditions": 2
+  },
+  {
+    "line": 480,
+    "code": "          <span class=\"sym-174 sym\">array</span>[<span class=\"sym-175 sym\">i</span>] = <span class=\"sym-173 sym\">key</span>.indexTo(<span class=\"sym-175 sym\">i</span> - <span class=\"sym-173 sym\">key</span>.getDepth()).decode();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 481,
+    "code": "        }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 482,
+    "code": "        <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"sym-177 sym\">Entry</span>&lt;T&gt;(<span class=\"sym-174 sym\">array</span>, <span class=\"sym-172 sym\">value</span>);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 483,
+    "code": "      }",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 484,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> <span class=\"sym-9 sym\">NoSuchElementException</span>();",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 485,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 486,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 487,
+    "code": "    <span class=\"a\">@Override</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 488,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-176 sym\">remove</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 489,
+    "code": "      <span class=\"k\">throw</span> <span class=\"k\">new</span> UnsupportedOperationException(<span class=\"s\">\"Removing an item is not supported\"</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "34cce8e330192c56a159a856ebd8072d38299087",
+    "scmDate": "2014-02-24T14:21:50+0100",
+    "lineHits": 0
+  },
+  {
+    "line": 490,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 491,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 492,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 493,
+    "code": "  <span class=\"k\">public </span><span class=\"k\">static </span><span class=\"k\">class</span> <span class=\"sym-177 sym\">Entry</span>&lt;V&gt; {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "6074164392edd3db2dfdfd21d05cd56c19e2b0e6",
+    "scmDate": "2014-07-25T16:31:45+0200"
+  },
+  {
+    "line": 494,
+    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span>Object[] <span class=\"sym-178 sym\">key</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 495,
+    "code": "    <span class=\"k\">private </span><span class=\"k\">final </span>V <span class=\"sym-179 sym\">value</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 496,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 497,
+    "code": "    <span class=\"sym-180 sym\">Entry</span>(Object[] <span class=\"sym-181 sym\">key</span>, V <span class=\"sym-182 sym\">value</span>) {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100",
+    "lineHits": 1
+  },
+  {
+    "line": 498,
+    "code": "      <span class=\"k\">this</span>.<span class=\"sym-178 sym\">key</span> = <span class=\"sym-181 sym\">key</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 499,
+    "code": "      <span class=\"k\">this</span>.<span class=\"sym-179 sym\">value</span> = <span class=\"sym-182 sym\">value</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 500,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 501,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 502,
+    "code": "    <span class=\"k\">public </span>Object[] <span class=\"sym-183 sym\">key</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 503,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-178 sym\">key</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 504,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 505,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 506,
+    "code": "    <span class=\"a\">@<span class=\"sym-7 sym\">CheckForNull</span></span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 507,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span>V <span class=\"sym-184 sym\">value</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 508,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-179 sym\">value</span>;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "lineHits": 1
+  },
+  {
+    "line": 509,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 510,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 511,
+    "code": "    <span class=\"a\">@Override</span>",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 512,
+    "code": "<span class=\"a\">    </span><span class=\"k\">public </span>String <span class=\"sym-185 sym\">toString</span>() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 513,
+    "code": "      <span class=\"k\">return</span> <span class=\"sym-6 sym\">ToStringBuilder</span>.reflectionToString(<span class=\"k\">this</span>);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200",
+    "lineHits": 0
+  },
+  {
+    "line": 514,
+    "code": "    }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 515,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 516,
+    "code": "",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "43fc31f75a2de06b23faefb0d2bbf1dd97290232",
+    "scmDate": "2014-05-05T16:43:19+0200"
+  },
+  {
+    "line": 517,
+    "code": "}",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 518,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  }
+]}
diff --git a/server/sonar-web/src/test/json/source-viewer-spec/resources-without-ncloc-data.json b/server/sonar-web/src/test/json/source-viewer-spec/resources-without-ncloc-data.json
new file mode 100644 (file)
index 0000000..dfbacdf
--- /dev/null
@@ -0,0 +1,150 @@
+[
+  {
+    "id": 19983,
+    "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "name": "Cache.java",
+    "scope": "FIL",
+    "qualifier": "FIL",
+    "date": "2014-07-21T23:18:51+0200",
+    "creationDate": "2013-04-17T04:06:45+0200",
+    "lname": "src/main/java/org/sonar/batch/index/Cache.java",
+    "lang": "java",
+    "msr": [
+      {
+        "key": "lines",
+        "val": 519.0,
+        "frmt_val": "519"
+      },
+      {
+        "key": "ncloc",
+        "val": 379.0,
+        "frmt_val": "379"
+      },
+      {
+        "key": "classes",
+        "val": 6.0,
+        "frmt_val": "6"
+      },
+      {
+        "key": "functions",
+        "val": 56.0,
+        "frmt_val": "56"
+      },
+      {
+        "key": "accessors",
+        "val": 0.0,
+        "frmt_val": "0"
+      },
+      {
+        "key": "statements",
+        "val": 174.0,
+        "frmt_val": "174"
+      },
+      {
+        "key": "public_api",
+        "val": 33.0,
+        "frmt_val": "33"
+      },
+      {
+        "key": "comment_lines",
+        "val": 23.0,
+        "frmt_val": "23"
+      },
+      {
+        "key": "comment_lines_density",
+        "val": 5.7,
+        "frmt_val": "5.7%"
+      },
+      {
+        "key": "public_documented_api_density",
+        "val": 36.4,
+        "frmt_val": "36.4%"
+      },
+      {
+        "key": "public_undocumented_api",
+        "val": 21.0,
+        "frmt_val": "21"
+      },
+      {
+        "key": "complexity",
+        "val": 116.0,
+        "frmt_val": "116"
+      },
+      {
+        "key": "function_complexity",
+        "val": 2.1,
+        "frmt_val": "2.1"
+      },
+      {
+        "key": "coverage",
+        "val": 74.3,
+        "frmt_val": "74.3%"
+      },
+      {
+        "key": "lines_to_cover",
+        "val": 194.0,
+        "frmt_val": "194"
+      },
+      {
+        "key": "uncovered_lines",
+        "val": 50.0,
+        "frmt_val": "50"
+      },
+      {
+        "key": "line_coverage",
+        "val": 74.2,
+        "frmt_val": "74.2%"
+      },
+      {
+        "key": "conditions_to_cover",
+        "val": 16.0,
+        "frmt_val": "16"
+      },
+      {
+        "key": "uncovered_conditions",
+        "val": 4.0,
+        "frmt_val": "4"
+      },
+      {
+        "key": "branch_coverage",
+        "val": 75.0,
+        "frmt_val": "75.0%"
+      },
+      {
+        "key": "duplicated_lines",
+        "val": 30.0,
+        "frmt_val": "30"
+      },
+      {
+        "key": "duplicated_blocks",
+        "val": 2.0,
+        "frmt_val": "2"
+      },
+      {
+        "key": "duplicated_files",
+        "val": 1.0,
+        "frmt_val": "1"
+      },
+      {
+        "key": "duplicated_lines_density",
+        "val": 5.8,
+        "frmt_val": "5.8%"
+      },
+      {
+        "key": "major_violations",
+        "val": 1.0,
+        "frmt_val": "1"
+      },
+      {
+        "key": "minor_violations",
+        "val": 1.0,
+        "frmt_val": "1"
+      },
+      {
+        "key": "info_violations",
+        "val": 4.0,
+        "frmt_val": "4"
+      }
+    ]
+  }
+]
diff --git a/server/sonar-web/src/test/json/source-viewer-spec/resources.json b/server/sonar-web/src/test/json/source-viewer-spec/resources.json
new file mode 100644 (file)
index 0000000..415718c
--- /dev/null
@@ -0,0 +1,154 @@
+[
+  {
+    "id": 19983,
+    "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/Cache.java",
+    "name": "Cache.java",
+    "scope": "FIL",
+    "qualifier": "FIL",
+    "date": "2014-07-21T23:18:51+0200",
+    "creationDate": "2013-04-17T04:06:45+0200",
+    "lname": "src/main/java/org/sonar/batch/index/Cache.java",
+    "lang": "java",
+    "msr": [
+      {
+        "key": "lines",
+        "val": 519.0,
+        "frmt_val": "519"
+      },
+      {
+        "key": "ncloc",
+        "val": 379.0,
+        "frmt_val": "379"
+      },
+      {
+        "key": "classes",
+        "val": 6.0,
+        "frmt_val": "6"
+      },
+      {
+        "key": "functions",
+        "val": 56.0,
+        "frmt_val": "56"
+      },
+      {
+        "key": "accessors",
+        "val": 0.0,
+        "frmt_val": "0"
+      },
+      {
+        "key": "statements",
+        "val": 174.0,
+        "frmt_val": "174"
+      },
+      {
+        "key": "public_api",
+        "val": 33.0,
+        "frmt_val": "33"
+      },
+      {
+        "key": "comment_lines",
+        "val": 23.0,
+        "frmt_val": "23"
+      },
+      {
+        "key": "comment_lines_density",
+        "val": 5.7,
+        "frmt_val": "5.7%"
+      },
+      {
+        "key": "public_documented_api_density",
+        "val": 36.4,
+        "frmt_val": "36.4%"
+      },
+      {
+        "key": "public_undocumented_api",
+        "val": 21.0,
+        "frmt_val": "21"
+      },
+      {
+        "key": "complexity",
+        "val": 116.0,
+        "frmt_val": "116"
+      },
+      {
+        "key": "function_complexity",
+        "val": 2.1,
+        "frmt_val": "2.1"
+      },
+      {
+        "key": "coverage",
+        "val": 74.3,
+        "frmt_val": "74.3%"
+      },
+      {
+        "key": "lines_to_cover",
+        "val": 194.0,
+        "frmt_val": "194"
+      },
+      {
+        "key": "uncovered_lines",
+        "val": 50.0,
+        "frmt_val": "50"
+      },
+      {
+        "key": "line_coverage",
+        "val": 74.2,
+        "frmt_val": "74.2%"
+      },
+      {
+        "key": "conditions_to_cover",
+        "val": 16.0,
+        "frmt_val": "16"
+      },
+      {
+        "key": "uncovered_conditions",
+        "val": 4.0,
+        "frmt_val": "4"
+      },
+      {
+        "key": "branch_coverage",
+        "val": 75.0,
+        "frmt_val": "75.0%"
+      },
+      {
+        "key": "duplicated_lines",
+        "val": 30.0,
+        "frmt_val": "30"
+      },
+      {
+        "key": "duplicated_blocks",
+        "val": 2.0,
+        "frmt_val": "2"
+      },
+      {
+        "key": "duplicated_files",
+        "val": 1.0,
+        "frmt_val": "1"
+      },
+      {
+        "key": "duplicated_lines_density",
+        "val": 5.8,
+        "frmt_val": "5.8%"
+      },
+      {
+        "key": "major_violations",
+        "val": 1.0,
+        "frmt_val": "1"
+      },
+      {
+        "key": "minor_violations",
+        "val": 1.0,
+        "frmt_val": "1"
+      },
+      {
+        "key": "info_violations",
+        "val": 4.0,
+        "frmt_val": "4"
+      },
+      {
+        "key": "ncloc_data",
+        "data": "1=0;2=0;3=0;4=0;5=0;6=0;7=0;8=0;9=0;10=0;11=0;12=0;13=0;14=0;15=0;17=0;16=0;19=0;18=0;21=0;20=1;23=1;22=1;25=1;24=1;27=1;26=1;29=1;28=0;31=1;30=0;34=1;35=0;32=1;33=1;38=0;39=0;36=0;37=0;42=0;43=1;40=0;41=1;46=1;47=1;44=1;45=0;51=1;50=0;49=1;48=1;55=0;54=1;53=1;52=1;59=1;58=1;57=1;56=1;63=1;62=1;61=1;60=0;68=1;69=1;70=0;71=1;64=1;65=0;66=1;67=1;76=1;77=1;78=1;79=1;72=1;73=1;74=1;75=1;85=1;84=1;87=1;86=1;81=0;80=0;83=0;82=0;93=1;92=1;95=1;94=1;89=0;88=0;91=0;90=0;102=1;103=1;100=0;101=1;98=0;99=0;96=1;97=0;110=1;111=1;108=0;109=0;106=0;107=0;104=1;105=1;119=1;118=1;117=1;116=1;115=0;114=1;113=1;112=1;127=1;126=0;125=1;124=1;123=1;122=1;121=1;120=1;137=1;136=1;139=1;138=1;141=1;140=0;143=1;142=1;129=1;128=1;131=1;130=0;133=1;132=1;135=0;134=1;152=1;153=1;154=1;155=1;156=0;157=1;158=1;159=1;144=1;145=0;146=1;147=1;148=1;149=1;150=0;151=1;171=1;170=0;169=1;168=1;175=0;174=1;173=1;172=1;163=1;162=1;161=1;160=0;167=1;166=1;165=0;164=1;186=1;187=1;184=1;185=0;190=0;191=0;188=1;189=0;178=1;179=1;176=1;177=1;182=1;183=1;180=0;181=1;205=1;204=0;207=1;206=1;201=1;200=1;203=1;202=1;197=1;196=1;199=0;198=1;193=0;192=0;195=1;194=0;220=1;221=1;222=1;223=1;216=1;217=1;218=1;219=1;212=1;213=1;214=0;215=1;208=1;209=0;210=1;211=1;239=0;238=0;237=0;236=1;235=1;234=1;233=1;232=1;231=1;230=1;229=1;228=0;227=0;226=0;225=0;224=1;254=1;255=1;252=1;253=1;250=1;251=1;248=1;249=1;246=1;247=1;244=0;245=1;242=0;243=0;240=0;241=0;275=1;274=1;273=1;272=1;279=0;278=1;277=1;276=1;283=0;282=0;281=0;280=0;287=1;286=1;285=1;284=0;258=1;259=1;256=1;257=1;262=1;263=1;260=1;261=0;266=1;267=1;264=1;265=1;270=1;271=1;268=1;269=1;305=1;304=1;307=1;306=1;309=1;308=1;311=1;310=1;313=1;312=1;315=1;314=0;317=1;316=1;319=0;318=0;288=1;289=1;290=1;291=1;292=1;293=1;294=1;295=1;296=1;297=1;298=1;299=0;300=0;301=0;302=0;303=1;343=1;342=1;341=1;340=1;339=1;338=1;337=1;336=0;351=1;350=1;349=1;348=1;347=0;346=1;345=1;344=1;326=1;327=1;324=1;325=1;322=1;323=1;320=0;321=0;334=0;335=0;332=1;333=0;330=1;331=1;328=1;329=1;373=1;372=1;375=1;374=0;369=0;368=1;371=1;370=1;381=0;380=1;383=0;382=0;377=1;376=1;379=1;378=1;356=1;357=1;358=1;359=0;352=1;353=0;354=1;355=1;364=0;365=1;366=1;367=1;360=1;361=1;362=1;363=1;410=1;411=1;408=1;409=1;414=1;415=1;412=1;413=1;402=0;403=1;400=1;401=1;406=1;407=0;404=1;405=1;395=1;394=1;393=1;392=0;399=1;398=0;397=1;396=1;387=1;386=1;385=0;384=0;391=1;390=1;389=1;388=0;440=1;441=1;442=1;443=0;444=1;445=1;446=1;447=1;432=1;433=1;434=1;435=1;436=0;437=1;438=1;439=0;425=1;424=1;427=1;426=1;429=1;428=1;431=1;430=0;417=1;416=0;419=1;418=1;421=1;420=1;423=1;422=1;478=1;479=1;476=1;477=1;474=1;475=1;472=1;473=1;470=1;471=1;468=1;469=1;466=1;467=0;464=1;465=1;463=1;462=1;461=1;460=1;459=1;458=0;457=1;456=1;455=1;454=1;453=0;452=1;451=1;450=1;449=0;448=1;508=1;509=1;510=1;511=0;504=1;505=1;506=0;507=1;500=1;501=1;502=0;503=1;496=1;497=0;498=1;499=1;493=0;492=1;495=1;494=1;489=1;488=1;491=1;490=1;485=1;484=1;487=0;486=1;481=1;480=1;483=1;482=1;516=1;517=0;518=1;512=1;513=1;514=1;515=1"
+      }
+    ]
+  }
+]
diff --git a/server/sonar-web/src/test/json/source-viewer-spec/scm.json b/server/sonar-web/src/test/json/source-viewer-spec/scm.json
new file mode 100644 (file)
index 0000000..ff89c98
--- /dev/null
@@ -0,0 +1,184 @@
+{"scm": [
+  [1, "simon.brandhof@gmail.com", "2013-04-16"],
+  [2, "simon.brandhof@gmail.com", "2013-04-21"],
+  [3, "simon.brandhof@gmail.com", "2014-03-11"],
+  [4, "simon.brandhof@gmail.com", "2013-04-16"],
+  [6, "simon.brandhof@gmail.com", "2013-04-21"],
+  [7, "simon.brandhof@gmail.com", "2013-04-16"],
+  [11, "simon.brandhof@gmail.com", "2013-04-21"],
+  [12, "simon.brandhof@gmail.com", "2013-04-16"],
+  [16, "simon.brandhof@gmail.com", "2013-04-22"],
+  [19, "simon.brandhof@gmail.com", "2013-04-16"],
+  [25, "julien.henry@sonarsource.com", "2014-05-01"],
+  [26, "simon.brandhof@gmail.com", "2013-04-17"],
+  [30, "julien.henry@sonarsource.com", "2014-04-30"],
+  [31, "simon.brandhof@gmail.com", "2013-04-16"],
+  [32, "simon.brandhof@gmail.com", "2013-04-17"],
+  [33, "julien.henry@sonarsource.com", "2014-05-01"],
+  [34, "simon.brandhof@gmail.com", "2013-04-16"],
+  [37, "simon.brandhof@gmail.com", "2013-04-17"],
+  [38, "simon.brandhof@gmail.com", "2013-04-16"],
+  [39, "simon.brandhof@gmail.com", "2013-04-17"],
+  [40, "simon.brandhof@gmail.com", "2013-04-16"],
+  [41, "simon.brandhof@gmail.com", "2014-02-20"],
+  [42, "simon.brandhof@gmail.com", "2013-04-16"],
+  [51, "julien.henry@sonarsource.com", "2014-05-01"],
+  [52, "simon.brandhof@gmail.com", "2014-02-20"],
+  [54, "simon.brandhof@gmail.com", "2013-04-16"],
+  [56, "julien.henry@sonarsource.com", "2014-05-01"],
+  [57, "simon.brandhof@gmail.com", "2014-02-20"],
+  [61, "julien.henry@sonarsource.com", "2014-05-01"],
+  [62, "simon.brandhof@gmail.com", "2014-02-20"],
+  [66, "julien.henry@sonarsource.com", "2014-05-01"],
+  [67, "simon.brandhof@gmail.com", "2014-02-20"],
+  [71, "julien.henry@sonarsource.com", "2014-05-01"],
+  [72, "simon.brandhof@gmail.com", "2013-04-16"],
+  [77, "simon.brandhof@gmail.com", "2013-05-29"],
+  [78, "simon.brandhof@gmail.com", "2013-04-16"],
+  [82, "simon.brandhof@gmail.com", "2014-02-20"],
+  [83, "simon.brandhof@gmail.com", "2013-04-16"],
+  [84, "simon.brandhof@gmail.com", "2014-02-20"],
+  [116, "julien.henry@sonarsource.com", "2014-05-01"],
+  [117, "simon.brandhof@gmail.com", "2014-02-20"],
+  [119, "simon.brandhof@gmail.com", "2013-04-16"],
+  [126, "simon.brandhof@gmail.com", "2013-10-10"],
+  [127, "simon.brandhof@gmail.com", "2013-05-29"],
+  [128, "simon.brandhof@gmail.com", "2013-04-16"],
+  [131, "simon.brandhof@gmail.com", "2014-02-20"],
+  [144, "simon.brandhof@gmail.com", "2013-04-16"],
+  [146, "simon.brandhof@gmail.com", "2014-02-20"],
+  [152, "simon.brandhof@gmail.com", "2013-10-10"],
+  [161, "simon.brandhof@gmail.com", "2014-02-20"],
+  [182, "simon.brandhof@gmail.com", "2013-04-16"],
+  [183, "simon.brandhof@gmail.com", "2013-04-26"],
+  [184, "simon.brandhof@gmail.com", "2013-04-16"],
+  [185, "simon.brandhof@gmail.com", "2013-10-10"],
+  [186, "simon.brandhof@gmail.com", "2013-05-29"],
+  [187, "simon.brandhof@gmail.com", "2013-04-16"],
+  [195, "julien.henry@sonarsource.com", "2014-05-01"],
+  [196, "simon.brandhof@gmail.com", "2014-02-20"],
+  [200, "julien.henry@sonarsource.com", "2014-05-01"],
+  [201, "simon.brandhof@gmail.com", "2014-02-20"],
+  [205, "julien.henry@sonarsource.com", "2014-05-01"],
+  [206, "simon.brandhof@gmail.com", "2014-02-20"],
+  [210, "julien.henry@sonarsource.com", "2014-05-01"],
+  [211, "simon.brandhof@gmail.com", "2014-02-20"],
+  [215, "julien.henry@sonarsource.com", "2014-05-01"],
+  [216, "simon.brandhof@gmail.com", "2013-04-16"],
+  [217, "simon.brandhof@gmail.com", "2014-02-20"],
+  [220, "simon.brandhof@gmail.com", "2013-04-16"],
+  [222, "simon.brandhof@gmail.com", "2014-02-20"],
+  [223, "simon.brandhof@gmail.com", "2013-04-16"],
+  [229, "simon.brandhof@gmail.com", "2014-02-20"],
+  [230, "simon.brandhof@gmail.com", "2013-04-16"],
+  [245, "julien.henry@sonarsource.com", "2014-05-01"],
+  [246, "simon.brandhof@gmail.com", "2014-02-20"],
+  [247, "simon.brandhof@gmail.com", "2013-04-16"],
+  [248, "simon.brandhof@gmail.com", "2014-02-20"],
+  [249, "simon.brandhof@gmail.com", "2013-04-16"],
+  [251, "simon.brandhof@gmail.com", "2014-02-20"],
+  [252, "simon.brandhof@gmail.com", "2013-04-16"],
+  [254, "simon.brandhof@gmail.com", "2014-02-20"],
+  [255, "simon.brandhof@gmail.com", "2013-04-16"],
+  [258, "simon.brandhof@gmail.com", "2013-05-29"],
+  [259, "simon.brandhof@gmail.com", "2013-04-16"],
+  [262, "julien.henry@sonarsource.com", "2014-05-01"],
+  [263, "simon.brandhof@gmail.com", "2014-02-20"],
+  [279, "simon.brandhof@gmail.com", "2013-04-16"],
+  [285, "simon.brandhof@gmail.com", "2014-02-20"],
+  [298, "simon.brandhof@gmail.com", "2013-04-16"],
+  [300, "simon.brandhof@gmail.com", "2013-05-29"],
+  [301, "julien.henry@sonarsource.com", "2014-04-30"],
+  [308, "julien.henry@sonarsource.com", "2014-05-01"],
+  [310, "julien.henry@sonarsource.com", "2014-04-30"],
+  [311, "julien.henry@sonarsource.com", "2014-06-20"],
+  [312, "julien.henry@sonarsource.com", "2014-04-30"],
+  [315, "julien.henry@sonarsource.com", "2014-06-20"],
+  [319, "julien.henry@sonarsource.com", "2014-04-30"],
+  [320, "simon.brandhof@gmail.com", "2014-02-20"],
+  [321, "simon.brandhof@gmail.com", "2013-05-29"],
+  [322, "julien.henry@sonarsource.com", "2014-05-01"],
+  [323, "simon.brandhof@gmail.com", "2013-04-16"],
+  [325, "julien.henry@sonarsource.com", "2014-05-01"],
+  [326, "simon.brandhof@gmail.com", "2013-04-16"],
+  [327, "julien.henry@sonarsource.com", "2014-05-01"],
+  [329, "simon.brandhof@gmail.com", "2013-04-16"],
+  [330, "julien.henry@sonarsource.com", "2014-06-20"],
+  [331, "simon.brandhof@gmail.com", "2013-04-16"],
+  [334, "simon.brandhof@gmail.com", "2013-05-29"],
+  [337, "simon.brandhof@gmail.com", "2013-04-16"],
+  [339, "simon.brandhof@gmail.com", "2014-02-20"],
+  [340, "simon.brandhof@gmail.com", "2013-04-16"],
+  [341, "julien.henry@sonarsource.com", "2014-05-01"],
+  [343, "simon.brandhof@gmail.com", "2013-04-16"],
+  [344, "julien.henry@sonarsource.com", "2014-06-20"],
+  [345, "simon.brandhof@gmail.com", "2013-04-16"],
+  [347, "simon.brandhof@gmail.com", "2013-04-17"],
+  [348, "simon.brandhof@gmail.com", "2014-02-20"],
+  [350, "julien.henry@sonarsource.com", "2014-05-01"],
+  [352, "simon.brandhof@gmail.com", "2013-04-17"],
+  [353, "simon.brandhof@gmail.com", "2014-02-20"],
+  [354, "julien.henry@sonarsource.com", "2014-05-01"],
+  [358, "simon.brandhof@gmail.com", "2013-04-17"],
+  [359, "simon.brandhof@gmail.com", "2014-02-20"],
+  [363, "simon.brandhof@gmail.com", "2013-04-17"],
+  [365, "simon.brandhof@gmail.com", "2014-02-20"],
+  [368, "simon.brandhof@gmail.com", "2013-04-17"],
+  [370, "simon.brandhof@gmail.com", "2014-02-20"],
+  [380, "simon.brandhof@gmail.com", "2013-04-17"],
+  [382, "simon.brandhof@gmail.com", "2013-05-29"],
+  [389, "julien.henry@sonarsource.com", "2014-05-01"],
+  [391, "simon.brandhof@gmail.com", "2013-05-29"],
+  [401, "julien.henry@sonarsource.com", "2014-05-01"],
+  [402, "simon.brandhof@gmail.com", "2013-05-29"],
+  [403, "julien.henry@sonarsource.com", "2014-05-01"],
+  [404, "simon.brandhof@gmail.com", "2013-05-29"],
+  [405, "julien.henry@sonarsource.com", "2014-05-01"],
+  [406, "simon.brandhof@gmail.com", "2013-05-29"],
+  [411, "julien.henry@sonarsource.com", "2014-05-01"],
+  [412, "simon.brandhof@gmail.com", "2013-05-29"],
+  [417, "julien.henry@sonarsource.com", "2014-05-01"],
+  [418, "simon.brandhof@gmail.com", "2013-05-29"],
+  [420, "simon.brandhof@gmail.com", "2014-02-20"],
+  [421, "julien.henry@sonarsource.com", "2014-05-01"],
+  [422, "simon.brandhof@gmail.com", "2014-02-20"],
+  [425, "simon.brandhof@gmail.com", "2013-05-29"],
+  [426, "julien.henry@sonarsource.com", "2014-05-01"],
+  [427, "simon.brandhof@gmail.com", "2013-05-29"],
+  [428, "julien.henry@sonarsource.com", "2014-05-01"],
+  [429, "simon.brandhof@gmail.com", "2013-05-29"],
+  [433, "simon.brandhof@gmail.com", "2014-02-24"],
+  [434, "simon.brandhof@gmail.com", "2013-05-29"],
+  [437, "simon.brandhof@gmail.com", "2013-04-17"],
+  [440, "julien.henry@sonarsource.com", "2014-05-01"],
+  [442, "simon.brandhof@gmail.com", "2013-04-17"],
+  [452, "julien.henry@sonarsource.com", "2014-05-01"],
+  [453, "simon.brandhof@gmail.com", "2013-04-17"],
+  [454, "julien.henry@sonarsource.com", "2014-05-01"],
+  [455, "simon.brandhof@gmail.com", "2013-04-17"],
+  [456, "julien.henry@sonarsource.com", "2014-05-01"],
+  [457, "simon.brandhof@gmail.com", "2013-04-17"],
+  [462, "julien.henry@sonarsource.com", "2014-05-01"],
+  [463, "simon.brandhof@gmail.com", "2013-04-17"],
+  [468, "julien.henry@sonarsource.com", "2014-05-01"],
+  [469, "simon.brandhof@gmail.com", "2013-04-17"],
+  [470, "julien.henry@sonarsource.com", "2014-05-01"],
+  [475, "simon.brandhof@gmail.com", "2013-04-17"],
+  [476, "julien.henry@sonarsource.com", "2014-05-01"],
+  [478, "simon.brandhof@gmail.com", "2013-04-17"],
+  [479, "simon.brandhof@gmail.com", "2014-02-20"],
+  [483, "julien.henry@sonarsource.com", "2014-05-01"],
+  [486, "simon.brandhof@gmail.com", "2013-04-17"],
+  [490, "simon.brandhof@gmail.com", "2014-02-24"],
+  [491, "simon.brandhof@gmail.com", "2013-04-17"],
+  [494, "simon.brandhof@gmail.com", "2014-02-20"],
+  [497, "simon.brandhof@gmail.com", "2013-04-17"],
+  [498, "simon.brandhof@gmail.com", "2014-02-20"],
+  [499, "simon.brandhof@gmail.com", "2013-04-17"],
+  [503, "simon.brandhof@gmail.com", "2014-02-20"],
+  [504, "simon.brandhof@gmail.com", "2013-04-17"],
+  [508, "simon.brandhof@gmail.com", "2014-02-20"],
+  [509, "simon.brandhof@gmail.com", "2013-04-17"],
+  [517, "julien.henry@sonarsource.com", "2014-05-06"],
+  [518, "simon.brandhof@gmail.com", "2013-04-16"]
+]}
diff --git a/server/sonar-web/src/test/json/source-viewer-spec/source.json b/server/sonar-web/src/test/json/source-viewer-spec/source.json
new file mode 100644 (file)
index 0000000..1b32224
--- /dev/null
@@ -0,0 +1,521 @@
+{"sources": [
+  [1, "<span class=\"cppd\">/*</span>"],
+  [2, "<span class=\"cppd\"> * SonarQube, open source software quality management tool.</span>"],
+  [3, "<span class=\"cppd\"> * Copyright (C) 2008-2014 SonarSource</span>"],
+  [4, "<span class=\"cppd\"> * mailto:contact AT sonarsource DOT com</span>"],
+  [5, "<span class=\"cppd\"> *</span>"],
+  [6, "<span class=\"cppd\"> * SonarQube is free software; you can redistribute it and/or</span>"],
+  [7, "<span class=\"cppd\"> * modify it under the terms of the GNU Lesser General Public</span>"],
+  [8, "<span class=\"cppd\"> * License as published by the Free Software Foundation; either</span>"],
+  [9, "<span class=\"cppd\"> * version 3 of the License, or (at your option) any later version.</span>"],
+  [10, "<span class=\"cppd\"> *</span>"],
+  [11, "<span class=\"cppd\"> * SonarQube is distributed in the hope that it will be useful,</span>"],
+  [12, "<span class=\"cppd\"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>"],
+  [13, "<span class=\"cppd\"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>"],
+  [14, "<span class=\"cppd\"> * Lesser General Public License for more details.</span>"],
+  [15, "<span class=\"cppd\"> *</span>"],
+  [16, "<span class=\"cppd\"> * You should have received a copy of the GNU Lesser General Public License</span>"],
+  [17, "<span class=\"cppd\"> * along with this program; if not, write to the Free Software Foundation,</span>"],
+  [18, "<span class=\"cppd\"> * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.</span>"],
+  [19, "<span class=\"cppd\"> */</span>"],
+  [20, "<span class=\"k\">package </span>org.sonar.batch.index;"],
+  [21, ""],
+  [22, "<span class=\"k\">import </span>com.google.common.collect.<span class=\"sym-949 sym\">Sets</span>;"],
+  [23, "<span class=\"k\">import </span>com.persistit.<span class=\"sym-976 sym\">Exchange</span>;"],
+  [24, "<span class=\"k\">import </span>com.persistit.<span class=\"sym-1007 sym\">Key</span>;"],
+  [25, "<span class=\"k\">import </span>com.persistit.<span class=\"sym-1033 sym\">KeyFilter</span>;"],
+  [26, "<span class=\"k\">import </span>com.persistit.exception.<span class=\"sym-1075 sym\">PersistitException</span>;"],
+  [27, "<span class=\"k\">import </span>org.apache.commons.lang.builder.<span class=\"sym-1134 sym\">ToStringBuilder</span>;"],
+  [28, ""],
+  [29, "<span class=\"k\">import </span>javax.annotation.<span class=\"sym-1176 sym\">CheckForNull</span>;"],
+  [30, ""],
+  [31, "<span class=\"k\">import </span>java.io.<span class=\"sym-1206 sym\">Serializable</span>;"],
+  [32, "<span class=\"k\">import </span>java.util.<span class=\"sym-1237 sym\">Iterator</span>;"],
+  [33, "<span class=\"k\">import </span>java.util.<span class=\"sym-1264 sym\">NoSuchElementException</span>;"],
+  [34, "<span class=\"k\">import </span>java.util.<span class=\"sym-1305 sym\">Set</span>;"],
+  [35, ""],
+  [36, "<span class=\"cppd\">/**</span>"],
+  [37, "<span class=\"cppd\"> * &lt;p&gt;</span>"],
+  [38, "<span class=\"cppd\"> * This cache is not thread-safe, due to direct usage of {@link com.persistit.Exchange}</span>"],
+  [39, "<span class=\"cppd\"> * &lt;/p&gt;</span>"],
+  [40, "<span class=\"cppd\"> */</span>"],
+  [41, "<span class=\"k\">public </span><span class=\"k\">class </span><span class=\"sym-1435 sym\">Cache</span>&lt;V <span class=\"k\">extends </span>Serializable&gt; {"],
+  [42, ""],
+  [43, "  <span class=\"k\">private </span><span class=\"k\">final </span>String <span class=\"sym-1491 sym\">name</span>;"],
+  [44, "  <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-1522 sym\">exchange</span>;"],
+  [45, ""],
+  [46, "  <span class=\"sym-1535 sym\">Cache</span>(String <span class=\"sym-1548 sym\">name</span>, <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-1563 sym\">exchange</span>) {"],
+  [47, "    <span class=\"k\">this</span>.<span class=\"sym-1491 sym\">name</span> = <span class=\"sym-1548 sym\">name</span>;"],
+  [48, "    <span class=\"k\">this</span>.<span class=\"sym-1522 sym\">exchange</span> = <span class=\"sym-1563 sym\">exchange</span>;"],
+  [49, "  }"],
+  [50, ""],
+  [51, "  <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-1650 sym\">put</span>(Object <span class=\"sym-1661 sym\">key</span>, V <span class=\"sym-1668 sym\">value</span>) {"],
+  [52, "    resetKey(<span class=\"sym-1661 sym\">key</span>);"],
+  [53, "    <span class=\"k\">return </span><span class=\"sym-2134 sym\">doPut</span>(<span class=\"sym-1668 sym\">value</span>);"],
+  [54, "  }"],
+  [55, ""],
+  [56, "  <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-1744 sym\">put</span>(Object <span class=\"sym-1755 sym\">firstKey</span>, Object <span class=\"sym-1772 sym\">secondKey</span>, V <span class=\"sym-1785 sym\">value</span>) {"],
+  [57, "    resetKey(<span class=\"sym-1755 sym\">firstKey</span>, <span class=\"sym-1772 sym\">secondKey</span>);"],
+  [58, "    <span class=\"k\">return </span><span class=\"sym-2134 sym\">doPut</span>(<span class=\"sym-1785 sym\">value</span>);"],
+  [59, "  }"],
+  [60, ""],
+  [61, "  <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-1877 sym\">put</span>(Object <span class=\"sym-1888 sym\">firstKey</span>, Object <span class=\"sym-1905 sym\">secondKey</span>, Object <span class=\"sym-1923 sym\">thirdKey</span>, V <span class=\"sym-1935 sym\">value</span>) {"],
+  [62, "    resetKey(<span class=\"sym-1888 sym\">firstKey</span>, <span class=\"sym-1905 sym\">secondKey</span>, <span class=\"sym-1923 sym\">thirdKey</span>);"],
+  [63, "    <span class=\"k\">return </span><span class=\"sym-2134 sym\">doPut</span>(<span class=\"sym-1935 sym\">value</span>);"],
+  [64, "  }"],
+  [65, ""],
+  [66, "  <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-2037 sym\">put</span>(Object[] <span class=\"sym-2050 sym\">key</span>, V <span class=\"sym-2057 sym\">value</span>) {"],
+  [67, "    resetKey(<span class=\"sym-2050 sym\">key</span>);"],
+  [68, "    <span class=\"k\">return </span><span class=\"sym-2134 sym\">doPut</span>(<span class=\"sym-2057 sym\">value</span>);"],
+  [69, "  }"],
+  [70, ""],
+  [71, "  <span class=\"k\">private </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-2134 sym\">doPut</span>(V <span class=\"sym-2142 sym\">value</span>) {"],
+  [72, "    <span class=\"k\">try </span>{"],
+  [73, "      <span class=\"sym-1522 sym\">exchange</span>.getValue().put(<span class=\"sym-2142 sym\">value</span>);"],
+  [74, "      <span class=\"sym-1522 sym\">exchange</span>.store();"],
+  [75, "      <span class=\"k\">return </span><span class=\"k\">this</span>;"],
+  [76, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-2265 sym\">e</span>) {"],
+  [77, "      <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to put element in the cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-2265 sym\">e</span>);"],
+  [78, "    }"],
+  [79, "  }"],
+  [80, ""],
+  [81, "  <span class=\"cppd\">/**</span>"],
+  [82, "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>"],
+  [83, "<span class=\"cppd\">   */</span>"],
+  [84, "  <span class=\"k\">public </span>V <span class=\"sym-2464 sym\">get</span>(Object <span class=\"sym-2475 sym\">key</span>) {"],
+  [85, "    resetKey(<span class=\"sym-2475 sym\">key</span>);"],
+  [86, "    <span class=\"k\">return </span><span class=\"sym-3219 sym\">doGet</span>();"],
+  [87, "  }"],
+  [88, ""],
+  [89, "  <span class=\"cppd\">/**</span>"],
+  [90, "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>"],
+  [91, "<span class=\"cppd\">   */</span>"],
+  [92, "  <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
+  [93, "<span class=\"a\">  </span><span class=\"k\">public </span>V <span class=\"sym-2639 sym\">get</span>(Object <span class=\"sym-2650 sym\">firstKey</span>, Object <span class=\"sym-2667 sym\">secondKey</span>) {"],
+  [94, "    resetKey(<span class=\"sym-2650 sym\">firstKey</span>, <span class=\"sym-2667 sym\">secondKey</span>);"],
+  [95, "    <span class=\"k\">return </span><span class=\"sym-3219 sym\">doGet</span>();"],
+  [96, "  }"],
+  [97, ""],
+  [98, "  <span class=\"cppd\">/**</span>"],
+  [99, "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>"],
+  [100, "<span class=\"cppd\">   */</span>"],
+  [101, "  <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
+  [102, "<span class=\"a\">  </span><span class=\"k\">public </span>V <span class=\"sym-2853 sym\">get</span>(Object <span class=\"sym-2864 sym\">firstKey</span>, Object <span class=\"sym-2881 sym\">secondKey</span>, Object <span class=\"sym-2899 sym\">thirdKey</span>) {"],
+  [103, "    resetKey(<span class=\"sym-2864 sym\">firstKey</span>, <span class=\"sym-2881 sym\">secondKey</span>, <span class=\"sym-2899 sym\">thirdKey</span>);"],
+  [104, "    <span class=\"k\">return </span><span class=\"sym-3219 sym\">doGet</span>();"],
+  [105, "  }"],
+  [106, ""],
+  [107, "  <span class=\"cppd\">/**</span>"],
+  [108, "<span class=\"cppd\">   * Returns the value object associated with keys, or null if not found.</span>"],
+  [109, "<span class=\"cppd\">   */</span>"],
+  [110, "  <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
+  [111, "<span class=\"a\">  </span><span class=\"k\">public </span>V <span class=\"sym-3094 sym\">get</span>(Object[] <span class=\"sym-3107 sym\">key</span>) {"],
+  [112, "    resetKey(<span class=\"sym-3107 sym\">key</span>);"],
+  [113, "    <span class=\"k\">return </span><span class=\"sym-3219 sym\">doGet</span>();"],
+  [114, "  }"],
+  [115, ""],
+  [116, "  <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)"],
+  [117, "  <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
+  [118, "<span class=\"a\">  </span><span class=\"k\">private </span>V <span class=\"sym-3219 sym\">doGet</span>() {"],
+  [119, "    <span class=\"k\">try </span>{"],
+  [120, "      <span class=\"sym-1522 sym\">exchange</span>.fetch();"],
+  [121, "      <span class=\"k\">if </span>(!<span class=\"sym-1522 sym\">exchange</span>.getValue().isDefined()) {"],
+  [122, "        <span class=\"k\">return </span><span class=\"k\">null</span>;"],
+  [123, "      }"],
+  [124, "      <span class=\"k\">return </span>(V) <span class=\"sym-1522 sym\">exchange</span>.getValue().get();"],
+  [125, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-3405 sym\">e</span>) {"],
+  [126, "      <span class=\"cppd\">// TODO add parameters to message</span>"],
+  [127, "      <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get element from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-3405 sym\">e</span>);"],
+  [128, "    }"],
+  [129, "  }"],
+  [130, ""],
+  [131, "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-3562 sym\">containsKey</span>(Object <span class=\"sym-3581 sym\">key</span>) {"],
+  [132, "    resetKey(<span class=\"sym-3581 sym\">key</span>);"],
+  [133, "    <span class=\"k\">return </span><span class=\"sym-4050 sym\">doContainsKey</span>();"],
+  [134, "  }"],
+  [135, ""],
+  [136, "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-3657 sym\">containsKey</span>(Object <span class=\"sym-3676 sym\">firstKey</span>, Object <span class=\"sym-3693 sym\">secondKey</span>) {"],
+  [137, "    resetKey(<span class=\"sym-3676 sym\">firstKey</span>, <span class=\"sym-3693 sym\">secondKey</span>);"],
+  [138, "    <span class=\"k\">return </span><span class=\"sym-4050 sym\">doContainsKey</span>();"],
+  [139, "  }"],
+  [140, ""],
+  [141, "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-3791 sym\">containsKey</span>(Object <span class=\"sym-3810 sym\">firstKey</span>, Object <span class=\"sym-3827 sym\">secondKey</span>, Object <span class=\"sym-3845 sym\">thirdKey</span>) {"],
+  [142, "    resetKey(<span class=\"sym-3810 sym\">firstKey</span>, <span class=\"sym-3827 sym\">secondKey</span>, <span class=\"sym-3845 sym\">thirdKey</span>);"],
+  [143, "    <span class=\"k\">return </span><span class=\"sym-4050 sym\">doContainsKey</span>();"],
+  [144, "  }"],
+  [145, ""],
+  [146, "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-3952 sym\">containsKey</span>(Object[] <span class=\"sym-3973 sym\">key</span>) {"],
+  [147, "    resetKey(<span class=\"sym-3973 sym\">key</span>);"],
+  [148, "    <span class=\"k\">return </span><span class=\"sym-4050 sym\">doContainsKey</span>();"],
+  [149, "  }"],
+  [150, ""],
+  [151, "  <span class=\"k\">private </span><span class=\"k\">boolean </span><span class=\"sym-4050 sym\">doContainsKey</span>() {"],
+  [152, "    <span class=\"k\">try </span>{"],
+  [153, "      <span class=\"sym-1522 sym\">exchange</span>.fetch();"],
+  [154, "      <span class=\"k\">return </span><span class=\"sym-1522 sym\">exchange</span>.isValueDefined();"],
+  [155, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-4165 sym\">e</span>) {"],
+  [156, "      <span class=\"cppd\">// TODO add parameters to message</span>"],
+  [157, "      <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to check if element is in cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-4165 sym\">e</span>);"],
+  [158, "    }"],
+  [159, "  }"],
+  [160, ""],
+  [161, "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-4328 sym\">remove</span>(Object <span class=\"sym-4342 sym\">key</span>) {"],
+  [162, "    resetKey(<span class=\"sym-4342 sym\">key</span>);"],
+  [163, "    <span class=\"k\">return </span><span class=\"sym-4776 sym\">doRemove</span>();"],
+  [164, "  }"],
+  [165, ""],
+  [166, "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-4413 sym\">remove</span>(Object <span class=\"sym-4427 sym\">firstKey</span>, Object <span class=\"sym-4444 sym\">secondKey</span>) {"],
+  [167, "    resetKey(<span class=\"sym-4427 sym\">firstKey</span>, <span class=\"sym-4444 sym\">secondKey</span>);"],
+  [168, "    <span class=\"k\">return </span><span class=\"sym-4776 sym\">doRemove</span>();"],
+  [169, "  }"],
+  [170, ""],
+  [171, "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-4537 sym\">remove</span>(Object <span class=\"sym-4551 sym\">firstKey</span>, Object <span class=\"sym-4568 sym\">secondKey</span>, Object <span class=\"sym-4586 sym\">thirdKey</span>) {"],
+  [172, "    resetKey(<span class=\"sym-4551 sym\">firstKey</span>, <span class=\"sym-4568 sym\">secondKey</span>, <span class=\"sym-4586 sym\">thirdKey</span>);"],
+  [173, "    <span class=\"k\">return </span><span class=\"sym-4776 sym\">doRemove</span>();"],
+  [174, "  }"],
+  [175, ""],
+  [176, "  <span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-4688 sym\">remove</span>(Object[] <span class=\"sym-4704 sym\">key</span>) {"],
+  [177, "    resetKey(<span class=\"sym-4704 sym\">key</span>);"],
+  [178, "    <span class=\"k\">return </span><span class=\"sym-4776 sym\">doRemove</span>();"],
+  [179, "  }"],
+  [180, ""],
+  [181, "  <span class=\"k\">private </span><span class=\"k\">boolean </span><span class=\"sym-4776 sym\">doRemove</span>() {"],
+  [182, "    <span class=\"k\">try </span>{"],
+  [183, "      <span class=\"k\">return </span><span class=\"sym-1522 sym\">exchange</span>.remove();"],
+  [184, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-4854 sym\">e</span>) {"],
+  [185, "      <span class=\"cppd\">// TODO add parameters to message</span>"],
+  [186, "      <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get element from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-4854 sym\">e</span>);"],
+  [187, "    }"],
+  [188, "  }"],
+  [189, ""],
+  [190, "  <span class=\"cppd\">/**</span>"],
+  [191, "<span class=\"cppd\">   * Removes everything in the specified group.</span>"],
+  [192, "<span class=\"cppd\">   *</span>"],
+  [193, "<span class=\"cppd\">   * @param group The group name.</span>"],
+  [194, "<span class=\"cppd\">   */</span>"],
+  [195, "  <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-5111 sym\">clear</span>(Object <span class=\"sym-5124 sym\">key</span>) {"],
+  [196, "    resetKey(<span class=\"sym-5124 sym\">key</span>);"],
+  [197, "    <span class=\"k\">return </span><span class=\"sym-5555 sym\">doClear</span>();"],
+  [198, "  }"],
+  [199, ""],
+  [200, "  <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-5195 sym\">clear</span>(Object <span class=\"sym-5208 sym\">firstKey</span>, Object <span class=\"sym-5225 sym\">secondKey</span>) {"],
+  [201, "    resetKey(<span class=\"sym-5208 sym\">firstKey</span>, <span class=\"sym-5225 sym\">secondKey</span>);"],
+  [202, "    <span class=\"k\">return </span><span class=\"sym-5555 sym\">doClear</span>();"],
+  [203, "  }"],
+  [204, ""],
+  [205, "  <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-5318 sym\">clear</span>(Object <span class=\"sym-5331 sym\">firstKey</span>, Object <span class=\"sym-5348 sym\">secondKey</span>, Object <span class=\"sym-5366 sym\">thirdKey</span>) {"],
+  [206, "    resetKey(<span class=\"sym-5331 sym\">firstKey</span>, <span class=\"sym-5348 sym\">secondKey</span>, <span class=\"sym-5366 sym\">thirdKey</span>);"],
+  [207, "    <span class=\"k\">return </span><span class=\"sym-5555 sym\">doClear</span>();"],
+  [208, "  }"],
+  [209, ""],
+  [210, "  <span class=\"k\">public </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-5468 sym\">clear</span>(Object[] <span class=\"sym-5483 sym\">key</span>) {"],
+  [211, "    resetKey(<span class=\"sym-5483 sym\">key</span>);"],
+  [212, "    <span class=\"k\">return </span><span class=\"sym-5555 sym\">doClear</span>();"],
+  [213, "  }"],
+  [214, ""],
+  [215, "  <span class=\"k\">private </span><span class=\"sym-1435 sym\">Cache</span>&lt;V&gt; <span class=\"sym-5555 sym\">doClear</span>() {"],
+  [216, "    <span class=\"k\">try </span>{"],
+  [217, "      <span class=\"sym-1007 sym\">Key</span> <span class=\"sym-5587 sym\">to</span> = <span class=\"k\">new </span><span class=\"sym-1007 sym\">Key</span>(<span class=\"sym-1522 sym\">exchange</span>.getKey());"],
+  [218, "      <span class=\"sym-5587 sym\">to</span>.append(<span class=\"sym-1007 sym\">Key</span>.AFTER);"],
+  [219, "      <span class=\"sym-1522 sym\">exchange</span>.removeKeyRange(<span class=\"sym-1522 sym\">exchange</span>.getKey(), <span class=\"sym-5587 sym\">to</span>);"],
+  [220, "      <span class=\"k\">return </span><span class=\"k\">this</span>;"],
+  [221, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-5744 sym\">e</span>) {"],
+  [222, "      <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to clear values from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-5744 sym\">e</span>);"],
+  [223, "    }"],
+  [224, "  }"],
+  [225, ""],
+  [226, "  <span class=\"cppd\">/**</span>"],
+  [227, "<span class=\"cppd\">   * Clears the default as well as all group caches.</span>"],
+  [228, "<span class=\"cppd\">   */</span>"],
+  [229, "  <span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-5924 sym\">clear</span>() {"],
+  [230, "    <span class=\"k\">try </span>{"],
+  [231, "      <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+  [232, "      <span class=\"sym-1522 sym\">exchange</span>.removeAll();"],
+  [233, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-6019 sym\">e</span>) {"],
+  [234, "      <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to clear cache\"</span>, <span class=\"sym-6019 sym\">e</span>);"],
+  [235, "    }"],
+  [236, "  }"],
+  [237, ""],
+  [238, "  <span class=\"cppd\">/**</span>"],
+  [239, "<span class=\"cppd\">   * Returns the set of cache keys associated with this group.</span>"],
+  [240, "<span class=\"cppd\">   * TODO implement a lazy-loading equivalent with Iterator/Iterable</span>"],
+  [241, "<span class=\"cppd\">   *</span>"],
+  [242, "<span class=\"cppd\">   * @param group The group.</span>"],
+  [243, "<span class=\"cppd\">   * @return The set of cache keys for this group.</span>"],
+  [244, "<span class=\"cppd\">   */</span>"],
+  [245, "  <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"rawtypes\"</span>)"],
+  [246, "  <span class=\"k\">public </span><span class=\"sym-1305 sym\">Set</span> <span class=\"sym-6374 sym\">keySet</span>(Object <span class=\"sym-6388 sym\">key</span>) {"],
+  [247, "    <span class=\"k\">try </span>{"],
+  [248, "      <span class=\"sym-1305 sym\">Set</span>&lt;Object&gt; <span class=\"sym-6423 sym\">keys</span> = <span class=\"sym-949 sym\">Sets</span>.newLinkedHashSet();"],
+  [249, "      <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+  [250, "      <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-6494 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
+  [251, "      <span class=\"sym-6494 sym\">iteratorExchange</span>.append(<span class=\"sym-6388 sym\">key</span>);"],
+  [252, "      <span class=\"sym-6494 sym\">iteratorExchange</span>.append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
+  [253, "      <span class=\"k\">while </span>(<span class=\"sym-6494 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {"],
+  [254, "        <span class=\"sym-6423 sym\">keys</span>.add(<span class=\"sym-6494 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());"],
+  [255, "      }"],
+  [256, "      <span class=\"k\">return </span><span class=\"sym-6423 sym\">keys</span>;"],
+  [257, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-6777 sym\">e</span>) {"],
+  [258, "      <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-6777 sym\">e</span>);"],
+  [259, "    }"],
+  [260, "  }"],
+  [261, ""],
+  [262, "  <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"rawtypes\"</span>)"],
+  [263, "  <span class=\"k\">public </span><span class=\"sym-1305 sym\">Set</span> <span class=\"sym-6919 sym\">keySet</span>(Object <span class=\"sym-6933 sym\">firstKey</span>, Object <span class=\"sym-6950 sym\">secondKey</span>) {"],
+  [264, "    <span class=\"k\">try </span>{"],
+  [265, "      <span class=\"sym-1305 sym\">Set</span>&lt;Object&gt; <span class=\"sym-6991 sym\">keys</span> = <span class=\"sym-949 sym\">Sets</span>.newLinkedHashSet();"],
+  [266, "      <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+  [267, "      <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-7062 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
+  [268, "      <span class=\"sym-7062 sym\">iteratorExchange</span>.append(<span class=\"sym-6933 sym\">firstKey</span>);"],
+  [269, "      <span class=\"sym-7062 sym\">iteratorExchange</span>.append(<span class=\"sym-6950 sym\">secondKey</span>);"],
+  [270, "      <span class=\"sym-7062 sym\">iteratorExchange</span>.append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
+  [271, "      <span class=\"k\">while </span>(<span class=\"sym-7062 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {"],
+  [272, "        <span class=\"sym-6991 sym\">keys</span>.add(<span class=\"sym-7062 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());"],
+  [273, "      }"],
+  [274, "      <span class=\"k\">return </span><span class=\"sym-6991 sym\">keys</span>;"],
+  [275, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-7392 sym\">e</span>) {"],
+  [276, "      <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-7392 sym\">e</span>);"],
+  [277, "    }"],
+  [278, "  }"],
+  [279, ""],
+  [280, "  <span class=\"cppd\">/**</span>"],
+  [281, "<span class=\"cppd\">   * Returns the set of keys associated with this cache.</span>"],
+  [282, "<span class=\"cppd\">   *</span>"],
+  [283, "<span class=\"cppd\">   * @return The set containing the keys for this cache.</span>"],
+  [284, "<span class=\"cppd\">   */</span>"],
+  [285, "  <span class=\"k\">public </span><span class=\"sym-1305 sym\">Set</span>&lt;Object&gt; <span class=\"sym-7641 sym\">keySet</span>() {"],
+  [286, "    <span class=\"k\">try </span>{"],
+  [287, "      <span class=\"sym-1305 sym\">Set</span>&lt;Object&gt; <span class=\"sym-7680 sym\">keys</span> = <span class=\"sym-949 sym\">Sets</span>.newLinkedHashSet();"],
+  [288, "      <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+  [289, "      <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-7751 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
+  [290, "      <span class=\"sym-7751 sym\">iteratorExchange</span>.append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
+  [291, "      <span class=\"k\">while </span>(<span class=\"sym-7751 sym\">iteratorExchange</span>.next(<span class=\"k\">false</span>)) {"],
+  [292, "        <span class=\"sym-7680 sym\">keys</span>.add(<span class=\"sym-7751 sym\">iteratorExchange</span>.getKey().indexTo(-<span class=\"c\">1</span>).decode());"],
+  [293, "      }"],
+  [294, "      <span class=\"k\">return </span><span class=\"sym-7680 sym\">keys</span>;"],
+  [295, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-7998 sym\">e</span>) {"],
+  [296, "      <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get keys from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-7998 sym\">e</span>);"],
+  [297, "    }"],
+  [298, "  }"],
+  [299, ""],
+  [300, "  <span class=\"cppd\">/**</span>"],
+  [301, "<span class=\"cppd\">   * Lazy-loading values for given keys</span>"],
+  [302, "<span class=\"cppd\">   */</span>"],
+  [303, "  <span class=\"k\">public </span>Iterable&lt;V&gt; <span class=\"sym-8168 sym\">values</span>(Object <span class=\"sym-8182 sym\">firstKey</span>, Object <span class=\"sym-8199 sym\">secondKey</span>) {"],
+  [304, "    <span class=\"k\">try </span>{"],
+  [305, "      <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+  [306, "      <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-8182 sym\">firstKey</span>).append(<span class=\"sym-8199 sym\">secondKey</span>).append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
+  [307, "      <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-8331 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
+  [308, "      <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-8390 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-8182 sym\">firstKey</span>)).append(<span class=\"sym-1033 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-8199 sym\">secondKey</span>));"],
+  [309, "      <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-10646 sym\">ValueIterable</span>&lt;V&gt;(<span class=\"sym-8331 sym\">iteratorExchange</span>, <span class=\"sym-8390 sym\">filter</span>);"],
+  [310, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-8579 sym\">e</span>) {"],
+  [311, "      <span class=\"k\">throw </span><span class=\"sym-8659 sym\">failToGetValues</span>(<span class=\"sym-8579 sym\">e</span>);"],
+  [312, "    }"],
+  [313, "  }"],
+  [314, ""],
+  [315, "  <span class=\"k\">private </span>IllegalStateException <span class=\"sym-8659 sym\">failToGetValues</span>(Exception <span class=\"sym-8685 sym\">e</span>) {"],
+  [316, "    <span class=\"k\">return </span><span class=\"k\">new </span>IllegalStateException(<span class=\"s\">\"Fail to get values from cache \" </span>+ <span class=\"sym-1491 sym\">name</span>, <span class=\"sym-8685 sym\">e</span>);"],
+  [317, "  }"],
+  [318, ""],
+  [319, "  <span class=\"cppd\">/**</span>"],
+  [320, "<span class=\"cppd\">   * Lazy-loading values for a given key</span>"],
+  [321, "<span class=\"cppd\">   */</span>"],
+  [322, "  <span class=\"k\">public </span>Iterable&lt;V&gt; <span class=\"sym-8851 sym\">values</span>(Object <span class=\"sym-8865 sym\">firstKey</span>) {"],
+  [323, "    <span class=\"k\">try </span>{"],
+  [324, "      <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+  [325, "      <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-8865 sym\">firstKey</span>).append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
+  [326, "      <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-8978 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
+  [327, "      <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-9037 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-8865 sym\">firstKey</span>));"],
+  [328, "      <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-10646 sym\">ValueIterable</span>&lt;V&gt;(<span class=\"sym-8978 sym\">iteratorExchange</span>, <span class=\"sym-9037 sym\">filter</span>);"],
+  [329, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-9186 sym\">e</span>) {"],
+  [330, "      <span class=\"k\">throw </span><span class=\"sym-8659 sym\">failToGetValues</span>(<span class=\"sym-9186 sym\">e</span>);"],
+  [331, "    }"],
+  [332, "  }"],
+  [333, ""],
+  [334, "  <span class=\"cppd\">/**</span>"],
+  [335, "<span class=\"cppd\">   * Lazy-loading values</span>"],
+  [336, "<span class=\"cppd\">   */</span>"],
+  [337, "  <span class=\"k\">public </span>Iterable&lt;V&gt; <span class=\"sym-9292 sym\">values</span>() {"],
+  [338, "    <span class=\"k\">try </span>{"],
+  [339, "      <span class=\"sym-1522 sym\">exchange</span>.clear().append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
+  [340, "      <span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-9371 sym\">iteratorExchange</span> = <span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>);"],
+  [341, "      <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-9430 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.ALL);"],
+  [342, "      <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-10646 sym\">ValueIterable</span>&lt;V&gt;(<span class=\"sym-9371 sym\">iteratorExchange</span>, <span class=\"sym-9430 sym\">filter</span>);"],
+  [343, "    } <span class=\"k\">catch </span>(Exception <span class=\"sym-9562 sym\">e</span>) {"],
+  [344, "      <span class=\"k\">throw </span><span class=\"sym-8659 sym\">failToGetValues</span>(<span class=\"sym-9562 sym\">e</span>);"],
+  [345, "    }"],
+  [346, "  }"],
+  [347, ""],
+  [348, "  <span class=\"k\">public </span>Iterable&lt;<span class=\"sym-13607 sym\">Entry</span>&lt;V&gt;&gt; <span class=\"sym-9638 sym\">entries</span>() {"],
+  [349, "    <span class=\"sym-1522 sym\">exchange</span>.clear().to(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
+  [350, "    <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-9701 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.ALL);"],
+  [351, "    <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-11992 sym\">EntryIterable</span>&lt;V&gt;(<span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>), <span class=\"sym-9701 sym\">filter</span>);"],
+  [352, "  }"],
+  [353, ""],
+  [354, "  <span class=\"k\">public </span>Iterable&lt;<span class=\"sym-13607 sym\">Entry</span>&lt;V&gt;&gt; <span class=\"sym-9847 sym\">entries</span>(Object <span class=\"sym-9862 sym\">firstKey</span>) {"],
+  [355, "    <span class=\"sym-1522 sym\">exchange</span>.clear().append(<span class=\"sym-9862 sym\">firstKey</span>).append(<span class=\"sym-1007 sym\">Key</span>.BEFORE);"],
+  [356, "    <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-9946 sym\">filter</span> = <span class=\"k\">new </span><span class=\"sym-1033 sym\">KeyFilter</span>().append(<span class=\"sym-1033 sym\">KeyFilter</span>.simpleTerm(<span class=\"sym-9862 sym\">firstKey</span>));"],
+  [357, "    <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-11992 sym\">EntryIterable</span>&lt;V&gt;(<span class=\"k\">new </span><span class=\"sym-976 sym\">Exchange</span>(<span class=\"sym-1522 sym\">exchange</span>), <span class=\"sym-9946 sym\">filter</span>);"],
+  [358, "  }"],
+  [359, ""],
+  [360, "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-10096 sym\">resetKey</span>(Object <span class=\"sym-10112 sym\">key</span>) {"],
+  [361, "    <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+  [362, "    <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-10112 sym\">key</span>);"],
+  [363, "  }"],
+  [364, ""],
+  [365, "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-10187 sym\">resetKey</span>(Object <span class=\"sym-10203 sym\">first</span>, Object <span class=\"sym-10217 sym\">second</span>) {"],
+  [366, "    <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+  [367, "    <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-10203 sym\">first</span>).append(<span class=\"sym-10217 sym\">second</span>);"],
+  [368, "  }"],
+  [369, ""],
+  [370, "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-10312 sym\">resetKey</span>(Object <span class=\"sym-10328 sym\">first</span>, Object <span class=\"sym-10342 sym\">second</span>, Object <span class=\"sym-10357 sym\">third</span>) {"],
+  [371, "    <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+  [372, "    <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-10328 sym\">first</span>).append(<span class=\"sym-10342 sym\">second</span>).append(<span class=\"sym-10357 sym\">third</span>);"],
+  [373, "  }"],
+  [374, ""],
+  [375, "  <span class=\"k\">private </span><span class=\"k\">void </span><span class=\"sym-10465 sym\">resetKey</span>(Object[] <span class=\"sym-10483 sym\">keys</span>) {"],
+  [376, "    <span class=\"sym-1522 sym\">exchange</span>.clear();"],
+  [377, "    <span class=\"k\">for </span>(Object <span class=\"sym-10529 sym\">o</span> : <span class=\"sym-10483 sym\">keys</span>) {"],
+  [378, "      <span class=\"sym-1522 sym\">exchange</span>.append(<span class=\"sym-10529 sym\">o</span>);"],
+  [379, "    }"],
+  [380, "  }"],
+  [381, ""],
+  [382, "  <span class=\"cppd\">//</span>"],
+  [383, "  <span class=\"cppd\">// LAZY ITERATORS AND ITERABLES</span>"],
+  [384, "  <span class=\"cppd\">//</span>"],
+  [385, ""],
+  [386, "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-10646 sym\">ValueIterable</span>&lt;T <span class=\"k\">extends </span>Serializable&gt; <span class=\"k\">implements </span>Iterable&lt;T&gt; {"],
+  [387, "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-1237 sym\">Iterator</span>&lt;T&gt; <span class=\"sym-10739 sym\">iterator</span>;"],
+  [388, ""],
+  [389, "    <span class=\"k\">private </span><span class=\"sym-10762 sym\">ValueIterable</span>(<span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-10785 sym\">exchange</span>, <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-10805 sym\">keyFilter</span>) {"],
+  [390, "      <span class=\"k\">this</span>.<span class=\"sym-10739 sym\">iterator</span> = <span class=\"k\">new </span><span class=\"sym-10997 sym\">ValueIterator</span>&lt;T&gt;(<span class=\"sym-10785 sym\">exchange</span>, <span class=\"sym-10805 sym\">keyFilter</span>);"],
+  [391, "    }"],
+  [392, ""],
+  [393, "    <span class=\"a\">@Override</span>"],
+  [394, "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"sym-1237 sym\">Iterator</span>&lt;T&gt; <span class=\"sym-10927 sym\">iterator</span>() {"],
+  [395, "      <span class=\"k\">return </span><span class=\"sym-10739 sym\">iterator</span>;"],
+  [396, "    }"],
+  [397, "  }"],
+  [398, ""],
+  [399, "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-10997 sym\">ValueIterator</span>&lt;T <span class=\"k\">extends </span>Serializable&gt; <span class=\"k\">implements </span><span class=\"sym-1237 sym\">Iterator</span>&lt;T&gt; {"],
+  [400, "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-11087 sym\">exchange</span>;"],
+  [401, "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-11125 sym\">keyFilter</span>;"],
+  [402, ""],
+  [403, "    <span class=\"k\">private </span><span class=\"sym-11149 sym\">ValueIterator</span>(<span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-11172 sym\">exchange</span>, <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-11192 sym\">keyFilter</span>) {"],
+  [404, "      <span class=\"k\">this</span>.<span class=\"sym-11087 sym\">exchange</span> = <span class=\"sym-11172 sym\">exchange</span>;"],
+  [405, "      <span class=\"k\">this</span>.<span class=\"sym-11125 sym\">keyFilter</span> = <span class=\"sym-11192 sym\">keyFilter</span>;"],
+  [406, "    }"],
+  [407, ""],
+  [408, "    <span class=\"a\">@Override</span>"],
+  [409, "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-11311 sym\">hasNext</span>() {"],
+  [410, "      <span class=\"k\">try </span>{"],
+  [411, "        <span class=\"k\">return </span><span class=\"sym-11087 sym\">exchange</span>.hasNext(<span class=\"sym-11125 sym\">keyFilter</span>);"],
+  [412, "      } <span class=\"k\">catch </span>(<span class=\"sym-1075 sym\">PersistitException</span> <span class=\"sym-11413 sym\">e</span>) {"],
+  [413, "        <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"sym-11413 sym\">e</span>);"],
+  [414, "      }"],
+  [415, "    }"],
+  [416, ""],
+  [417, "    <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)"],
+  [418, "    <span class=\"a\">@Override</span>"],
+  [419, "<span class=\"a\">    </span><span class=\"k\">public </span>T <span class=\"sym-11539 sym\">next</span>() {"],
+  [420, "      <span class=\"k\">try </span>{"],
+  [421, "        <span class=\"sym-11087 sym\">exchange</span>.next(<span class=\"sym-11125 sym\">keyFilter</span>);"],
+  [422, "      } <span class=\"k\">catch </span>(<span class=\"sym-1075 sym\">PersistitException</span> <span class=\"sym-11628 sym\">e</span>) {"],
+  [423, "        <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"sym-11628 sym\">e</span>);"],
+  [424, "      }"],
+  [425, "      <span class=\"k\">if </span>(<span class=\"sym-11087 sym\">exchange</span>.getValue().isDefined()) {"],
+  [426, "        <span class=\"k\">return </span>(T) <span class=\"sym-11087 sym\">exchange</span>.getValue().get();"],
+  [427, "      }"],
+  [428, "      <span class=\"k\">throw </span><span class=\"k\">new </span><span class=\"sym-1264 sym\">NoSuchElementException</span>();"],
+  [429, "    }"],
+  [430, ""],
+  [431, "    <span class=\"a\">@Override</span>"],
+  [432, "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-11863 sym\">remove</span>() {"],
+  [433, "      <span class=\"k\">throw </span><span class=\"k\">new </span>UnsupportedOperationException(<span class=\"s\">\"Removing an item is not supported\"</span>);"],
+  [434, "    }"],
+  [435, "  }"],
+  [436, ""],
+  [437, "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-11992 sym\">EntryIterable</span>&lt;T <span class=\"k\">extends </span>Serializable&gt; <span class=\"k\">implements </span>Iterable&lt;<span class=\"sym-13607 sym\">Entry</span>&lt;T&gt;&gt; {"],
+  [438, "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-12339 sym\">EntryIterator</span>&lt;T&gt; <span class=\"sym-12097 sym\">it</span>;"],
+  [439, ""],
+  [440, "    <span class=\"k\">private </span><span class=\"sym-12114 sym\">EntryIterable</span>(<span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-12137 sym\">exchange</span>, <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-12157 sym\">keyFilter</span>) {"],
+  [441, "      <span class=\"sym-12097 sym\">it</span> = <span class=\"k\">new </span><span class=\"sym-12339 sym\">EntryIterator</span>&lt;T&gt;(<span class=\"sym-12137 sym\">exchange</span>, <span class=\"sym-12157 sym\">keyFilter</span>);"],
+  [442, "    }"],
+  [443, ""],
+  [444, "    <span class=\"a\">@Override</span>"],
+  [445, "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"sym-1237 sym\">Iterator</span>&lt;<span class=\"sym-13607 sym\">Entry</span>&lt;T&gt;&gt; <span class=\"sym-12275 sym\">iterator</span>() {"],
+  [446, "      <span class=\"k\">return </span><span class=\"sym-12097 sym\">it</span>;"],
+  [447, "    }"],
+  [448, "  }"],
+  [449, ""],
+  [450, "  <span class=\"k\">private </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-12339 sym\">EntryIterator</span>&lt;T <span class=\"k\">extends </span>Serializable&gt; <span class=\"k\">implements </span><span class=\"sym-1237 sym\">Iterator</span>&lt;<span class=\"sym-13607 sym\">Entry</span>&lt;T&gt;&gt; {"],
+  [451, "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-12436 sym\">exchange</span>;"],
+  [452, "    <span class=\"k\">private </span><span class=\"k\">final </span><span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-12474 sym\">keyFilter</span>;"],
+  [453, ""],
+  [454, "    <span class=\"k\">private </span><span class=\"sym-12498 sym\">EntryIterator</span>(<span class=\"sym-976 sym\">Exchange</span> <span class=\"sym-12521 sym\">exchange</span>, <span class=\"sym-1033 sym\">KeyFilter</span> <span class=\"sym-12541 sym\">keyFilter</span>) {"],
+  [455, "      <span class=\"k\">this</span>.<span class=\"sym-12436 sym\">exchange</span> = <span class=\"sym-12521 sym\">exchange</span>;"],
+  [456, "      <span class=\"k\">this</span>.<span class=\"sym-12474 sym\">keyFilter</span> = <span class=\"sym-12541 sym\">keyFilter</span>;"],
+  [457, "    }"],
+  [458, ""],
+  [459, "    <span class=\"a\">@Override</span>"],
+  [460, "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">boolean </span><span class=\"sym-12660 sym\">hasNext</span>() {"],
+  [461, "      <span class=\"k\">try </span>{"],
+  [462, "        <span class=\"k\">return </span><span class=\"sym-12436 sym\">exchange</span>.hasNext(<span class=\"sym-12474 sym\">keyFilter</span>);"],
+  [463, "      } <span class=\"k\">catch </span>(<span class=\"sym-1075 sym\">PersistitException</span> <span class=\"sym-12762 sym\">e</span>) {"],
+  [464, "        <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"sym-12762 sym\">e</span>);"],
+  [465, "      }"],
+  [466, "    }"],
+  [467, ""],
+  [468, "    <span class=\"a\">@SuppressWarnings</span>(<span class=\"s\">\"unchecked\"</span>)"],
+  [469, "    <span class=\"a\">@Override</span>"],
+  [470, "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"sym-13607 sym\">Entry</span>&lt;T&gt; <span class=\"sym-12895 sym\">next</span>() {"],
+  [471, "      <span class=\"k\">try </span>{"],
+  [472, "        <span class=\"sym-12436 sym\">exchange</span>.next(<span class=\"sym-12474 sym\">keyFilter</span>);"],
+  [473, "      } <span class=\"k\">catch </span>(<span class=\"sym-1075 sym\">PersistitException</span> <span class=\"sym-12984 sym\">e</span>) {"],
+  [474, "        <span class=\"k\">throw </span><span class=\"k\">new </span>IllegalStateException(<span class=\"sym-12984 sym\">e</span>);"],
+  [475, "      }"],
+  [476, "      <span class=\"k\">if </span>(<span class=\"sym-12436 sym\">exchange</span>.getValue().isDefined()) {"],
+  [477, "        T <span class=\"sym-13096 sym\">value</span> = (T) <span class=\"sym-12436 sym\">exchange</span>.getValue().get();"],
+  [478, "        <span class=\"sym-1007 sym\">Key</span> <span class=\"sym-13147 sym\">key</span> = <span class=\"sym-12436 sym\">exchange</span>.getKey();"],
+  [479, "        Object[] <span class=\"sym-13189 sym\">array</span> = <span class=\"k\">new </span>Object[<span class=\"sym-13147 sym\">key</span>.getDepth()];"],
+  [480, "        <span class=\"k\">for </span>(<span class=\"k\">int </span><span class=\"sym-13242 sym\">i</span> = <span class=\"c\">0</span>; <span class=\"sym-13242 sym\">i</span> &lt; <span class=\"sym-13147 sym\">key</span>.getDepth(); <span class=\"sym-13242 sym\">i</span>++) {"],
+  [481, "          <span class=\"sym-13189 sym\">array</span>[<span class=\"sym-13242 sym\">i</span>] = <span class=\"sym-13147 sym\">key</span>.indexTo(<span class=\"sym-13242 sym\">i</span> - <span class=\"sym-13147 sym\">key</span>.getDepth()).decode();"],
+  [482, "        }"],
+  [483, "        <span class=\"k\">return </span><span class=\"k\">new </span><span class=\"sym-13607 sym\">Entry</span>&lt;T&gt;(<span class=\"sym-13189 sym\">array</span>, <span class=\"sym-13096 sym\">value</span>);"],
+  [484, "      }"],
+  [485, "      <span class=\"k\">throw </span><span class=\"k\">new </span><span class=\"sym-1264 sym\">NoSuchElementException</span>();"],
+  [486, "    }"],
+  [487, ""],
+  [488, "    <span class=\"a\">@Override</span>"],
+  [489, "<span class=\"a\">    </span><span class=\"k\">public </span><span class=\"k\">void </span><span class=\"sym-13479 sym\">remove</span>() {"],
+  [490, "      <span class=\"k\">throw </span><span class=\"k\">new </span>UnsupportedOperationException(<span class=\"s\">\"Removing an item is not supported\"</span>);"],
+  [491, "    }"],
+  [492, "  }"],
+  [493, ""],
+  [494, "  <span class=\"k\">public </span><span class=\"k\">static </span><span class=\"k\">class </span><span class=\"sym-13607 sym\">Entry</span>&lt;V <span class=\"k\">extends </span>Serializable&gt; {"],
+  [495, "    <span class=\"k\">private </span><span class=\"k\">final </span>Object[] <span class=\"sym-13666 sym\">key</span>;"],
+  [496, "    <span class=\"k\">private </span><span class=\"k\">final </span>V <span class=\"sym-13691 sym\">value</span>;"],
+  [497, ""],
+  [498, "    <span class=\"sym-13703 sym\">Entry</span>(Object[] <span class=\"sym-13718 sym\">key</span>, V <span class=\"sym-13725 sym\">value</span>) {"],
+  [499, "      <span class=\"k\">this</span>.<span class=\"sym-13666 sym\">key</span> = <span class=\"sym-13718 sym\">key</span>;"],
+  [500, "      <span class=\"k\">this</span>.<span class=\"sym-13691 sym\">value</span> = <span class=\"sym-13725 sym\">value</span>;"],
+  [501, "    }"],
+  [502, ""],
+  [503, "    <span class=\"k\">public </span>Object[] <span class=\"sym-13809 sym\">key</span>() {"],
+  [504, "      <span class=\"k\">return </span><span class=\"sym-13666 sym\">key</span>;"],
+  [505, "    }"],
+  [506, ""],
+  [507, "    <span class=\"a\">@<span class=\"sym-1176 sym\">CheckForNull</span></span>"],
+  [508, "<span class=\"a\">    </span><span class=\"k\">public </span>V <span class=\"sym-13873 sym\">value</span>() {"],
+  [509, "      <span class=\"k\">return </span><span class=\"sym-13691 sym\">value</span>;"],
+  [510, "    }"],
+  [511, ""],
+  [512, "    <span class=\"a\">@Override</span>"],
+  [513, "<span class=\"a\">    </span><span class=\"k\">public </span>String <span class=\"sym-13942 sym\">toString</span>() {"],
+  [514, "      <span class=\"k\">return </span><span class=\"sym-1134 sym\">ToStringBuilder</span>.reflectionToString(<span class=\"k\">this</span>);"],
+  [515, "    }"],
+  [516, "  }"],
+  [517, ""],
+  [518, "}"],
+  [519, ""]
+]}
diff --git a/server/sonar-web/src/test/json/source-viewer-spec/test-cases.json b/server/sonar-web/src/test/json/source-viewer-spec/test-cases.json
new file mode 100644 (file)
index 0000000..233229a
--- /dev/null
@@ -0,0 +1,235 @@
+{"tests": [
+  {
+    "name": "should_update_existing_issue",
+    "status": "OK",
+    "durationInMs": 293,
+    "_ref": "1"
+  },
+  {
+    "name": "testDistributionMeasure",
+    "status": "OK",
+    "durationInMs": 148,
+    "_ref": "2"
+  },
+  {
+    "name": "one_part_key",
+    "status": "OK",
+    "durationInMs": 96,
+    "_ref": "3"
+  },
+  {
+    "name": "testIssueExclusion",
+    "status": "OK",
+    "durationInMs": 305,
+    "_ref": "4"
+  },
+  {
+    "name": "should_add_measure_with_same_metric",
+    "status": "OK",
+    "durationInMs": 141,
+    "_ref": "5"
+  },
+  {
+    "name": "should_create_cache",
+    "status": "OK",
+    "durationInMs": 81,
+    "_ref": "6"
+  },
+  {
+    "name": "scanProjectWithMixedSourcesAndTests",
+    "status": "OK",
+    "durationInMs": 239,
+    "_ref": "7"
+  },
+  {
+    "name": "remove_versus_clear",
+    "status": "OK",
+    "durationInMs": 111,
+    "_ref": "3"
+  },
+  {
+    "name": "should_persist_component_data",
+    "status": "OK",
+    "durationInMs": 132,
+    "_ref": "8"
+  },
+  {
+    "name": "scanProjectWithSourceDir",
+    "status": "OK",
+    "durationInMs": 212,
+    "_ref": "7"
+  },
+  {
+    "name": "should_add_measure_with_too_big_data_for_persistit",
+    "status": "OK",
+    "durationInMs": 336,
+    "_ref": "5"
+  },
+  {
+    "name": "failForDuplicateInputFile",
+    "status": "OK",
+    "durationInMs": 127,
+    "_ref": "7"
+  },
+  {
+    "name": "should_not_create_cache_twice",
+    "status": "OK",
+    "durationInMs": 101,
+    "_ref": "6"
+  },
+  {
+    "name": "should_get_and_set_data",
+    "status": "OK",
+    "durationInMs": 190,
+    "_ref": "9"
+  },
+  {
+    "name": "should_add_input_file",
+    "status": "OK",
+    "durationInMs": 122,
+    "_ref": "10"
+  },
+  {
+    "name": "scanTempProject",
+    "status": "OK",
+    "durationInMs": 345,
+    "_ref": "4"
+  },
+  {
+    "name": "should_get_measures",
+    "status": "OK",
+    "durationInMs": 114,
+    "_ref": "5"
+  },
+  {
+    "name": "test_key_being_prefix_of_another_key",
+    "status": "OK",
+    "durationInMs": 94,
+    "_ref": "3"
+  },
+  {
+    "name": "should_add_measure_with_big_data",
+    "status": "OK",
+    "durationInMs": 242,
+    "_ref": "5"
+  },
+  {
+    "name": "should_get_all_issues",
+    "status": "OK",
+    "durationInMs": 104,
+    "_ref": "1"
+  },
+  {
+    "name": "should_add_measure",
+    "status": "OK",
+    "durationInMs": 117,
+    "_ref": "5"
+  },
+  {
+    "name": "computeMeasuresOnSampleProject",
+    "status": "OK",
+    "durationInMs": 315,
+    "_ref": "2"
+  },
+  {
+    "name": "test_measure_coder",
+    "status": "OK",
+    "durationInMs": 110,
+    "_ref": "5"
+  },
+  {
+    "name": "should_add_measure_with_too_big_data_for_persistit_pre_patch",
+    "status": "OK",
+    "durationInMs": 821,
+    "_ref": "5"
+  },
+  {
+    "name": "three_parts_key",
+    "status": "OK",
+    "durationInMs": 122,
+    "_ref": "3"
+  },
+  {
+    "name": "two_parts_key",
+    "status": "OK",
+    "durationInMs": 118,
+    "_ref": "3"
+  },
+  {
+    "name": "should_add_new_issue",
+    "status": "OK",
+    "durationInMs": 95,
+    "_ref": "1"
+  },
+  {
+    "name": "empty_cache",
+    "status": "OK",
+    "durationInMs": 104,
+    "_ref": "3"
+  },
+  {
+    "name": "scanProjectWithTestDir",
+    "status": "OK",
+    "durationInMs": 322,
+    "_ref": "7"
+  },
+  {
+    "name": "scanSampleProject",
+    "status": "OK",
+    "durationInMs": 184,
+    "_ref": "4"
+  },
+  {
+    "name": "computeMeasuresOnTempProject",
+    "status": "OK",
+    "durationInMs": 274,
+    "_ref": "2"
+  },
+  {
+    "name": "should_get_and_set_string_data",
+    "status": "OK",
+    "durationInMs": 95,
+    "_ref": "9"
+  }
+], "files": {
+  "3": {
+    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/index/CacheTest.java",
+    "longName": "src/test/java/org/sonar/batch/index/CacheTest.java"
+  },
+  "1": {
+    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/issue/IssueCacheTest.java",
+    "longName": "src/test/java/org/sonar/batch/issue/IssueCacheTest.java"
+  },
+  "4": {
+    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java",
+    "longName": "src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java"
+  },
+  "2": {
+    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java",
+    "longName": "src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java"
+  },
+  "8": {
+    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/index/ComponentDataPersisterTest.java",
+    "longName": "src/test/java/org/sonar/batch/index/ComponentDataPersisterTest.java"
+  },
+  "9": {
+    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/index/ComponentDataCacheTest.java",
+    "longName": "src/test/java/org/sonar/batch/index/ComponentDataCacheTest.java"
+  },
+  "10": {
+    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/scan/filesystem/InputFileCacheTest.java",
+    "longName": "src/test/java/org/sonar/batch/scan/filesystem/InputFileCacheTest.java"
+  },
+  "7": {
+    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/mediumtest/fs/FileSystemMediumTest.java",
+    "longName": "src/test/java/org/sonar/batch/mediumtest/fs/FileSystemMediumTest.java"
+  },
+  "5": {
+    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/scan/measure/MeasureCacheTest.java",
+    "longName": "src/test/java/org/sonar/batch/scan/measure/MeasureCacheTest.java"
+  },
+  "6": {
+    "key": "org.codehaus.sonar:sonar-batch:src/test/java/org/sonar/batch/index/CachesTest.java",
+    "longName": "src/test/java/org/sonar/batch/index/CachesTest.java"
+  }
+}}
diff --git a/server/sonar-web/src/test/json/source-viewer-spec/tests/app.json b/server/sonar-web/src/test/json/source-viewer-spec/tests/app.json
new file mode 100644 (file)
index 0000000..873632f
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  "uuid": "12345",
+  "key": "org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/index/CacheTest.java",
+  "path": "src/test/java/org/sonar/batch/index/CacheTest.java",
+  "name": "CacheTest.java",
+  "longName": "src/test/java/org/sonar/batch/index/CacheTest.java",
+  "q": "UTS",
+  "subProject": "org.codehaus.sonar:sonar-batch",
+  "subProjectName": "SonarQube :: Batch",
+  "project": "org.codehaus.sonar:sonar",
+  "projectName": "SonarQube",
+  "fav": false,
+  "canMarkAsFavourite": true,
+  "canCreateManualIssue": true,
+  "measures": {
+    "tests": "6"
+  }
+}
diff --git a/server/sonar-web/src/test/json/source-viewer-spec/tests/lines.json b/server/sonar-web/src/test/json/source-viewer-spec/tests/lines.json
new file mode 100644 (file)
index 0000000..becc8c9
--- /dev/null
@@ -0,0 +1,1808 @@
+{"sources": [
+  {
+    "line": 1,
+    "code": "/*",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 2,
+    "code": " * SonarQube, open source software quality management tool.",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
+    "scmDate": "2013-04-21T11:58:14+0200"
+  },
+  {
+    "line": 3,
+    "code": " * Copyright (C) 2008-2014 SonarSource",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "57ae3026c36ae3b0b71756d6161124b1ae594c53",
+    "scmDate": "2014-03-11T17:52:41+0100"
+  },
+  {
+    "line": 4,
+    "code": " * mailto:contact AT sonarsource DOT com",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 5,
+    "code": " *",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 6,
+    "code": " * SonarQube is free software; you can redistribute it and/or",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
+    "scmDate": "2013-04-21T11:58:14+0200"
+  },
+  {
+    "line": 7,
+    "code": " * modify it under the terms of the GNU Lesser General Public",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 8,
+    "code": " * License as published by the Free Software Foundation; either",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 9,
+    "code": " * version 3 of the License, or (at your option) any later version.",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 10,
+    "code": " *",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 11,
+    "code": " * SonarQube is distributed in the hope that it will be useful,",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b1436788cfc71b23cc3e3c15400a6c630c914bec",
+    "scmDate": "2013-04-21T11:58:14+0200"
+  },
+  {
+    "line": 12,
+    "code": " * but WITHOUT ANY WARRANTY; without even the implied warranty of",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 13,
+    "code": " * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 14,
+    "code": " * Lesser General Public License for more details.",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 15,
+    "code": " *",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 16,
+    "code": " * You should have received a copy of the GNU Lesser General Public License",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
+    "scmDate": "2013-04-22T09:37:03+0200"
+  },
+  {
+    "line": 17,
+    "code": " * along with this program; if not, write to the Free Software Foundation,",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
+    "scmDate": "2013-04-22T09:37:03+0200"
+  },
+  {
+    "line": 18,
+    "code": " * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "ce63bd4c293fe7a1fa066d73860bbaf4e1f5a608",
+    "scmDate": "2013-04-22T09:37:03+0200"
+  },
+  {
+    "line": 19,
+    "code": " */",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 20,
+    "code": "package org.sonar.batch.index;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 21,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 22,
+    "code": "import com.google.common.collect.Iterables;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 23,
+    "code": "import org.junit.After;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 24,
+    "code": "import org.junit.Before;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 25,
+    "code": "import org.junit.Rule;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 26,
+    "code": "import org.junit.Test;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 27,
+    "code": "import org.junit.rules.TemporaryFolder;",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "18a4c15b060d1b56f08826bf6006d08eaf2625ec",
+    "scmDate": "2013-10-15T17:14:44+0200"
+  },
+  {
+    "line": 28,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 29,
+    "code": "import static org.fest.assertions.Assertions.assertThat;",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 30,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 31,
+    "code": "public class CacheTest {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 32,
+    "code": "",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "18a4c15b060d1b56f08826bf6006d08eaf2625ec",
+    "scmDate": "2013-10-15T17:14:44+0200"
+  },
+  {
+    "line": 33,
+    "code": "  @Rule",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 34,
+    "code": "  public TemporaryFolder temp = new TemporaryFolder();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 35,
+    "code": "",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "18a4c15b060d1b56f08826bf6006d08eaf2625ec",
+    "scmDate": "2013-10-15T17:14:44+0200"
+  },
+  {
+    "line": 36,
+    "code": "  Caches caches;",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "18a4c15b060d1b56f08826bf6006d08eaf2625ec",
+    "scmDate": "2013-10-15T17:14:44+0200"
+  },
+  {
+    "line": 37,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 38,
+    "code": "  @Before",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 39,
+    "code": "  public void start() throws Exception {",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "18a4c15b060d1b56f08826bf6006d08eaf2625ec",
+    "scmDate": "2013-10-15T17:14:44+0200"
+  },
+  {
+    "line": 40,
+    "code": "    caches = CachesTest.createCacheOnTemp(temp);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "18a4c15b060d1b56f08826bf6006d08eaf2625ec",
+    "scmDate": "2013-10-15T17:14:44+0200"
+  },
+  {
+    "line": 41,
+    "code": "    caches.start();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 42,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 43,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 44,
+    "code": "  @After",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 45,
+    "code": "  public void stop() {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 46,
+    "code": "    caches.stop();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 47,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 48,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 49,
+    "code": "  @Test",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 50,
+    "code": "  public void one_part_key() throws Exception {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 51,
+    "code": "    Cache&lt;String&gt; cache = caches.createCache(\"capitals\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 52,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 53,
+    "code": "    assertThat(cache.get(\"france\")).isNull();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 54,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 55,
+    "code": "    cache.put(\"france\", \"paris\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 56,
+    "code": "    cache.put(\"italy\", \"rome\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 57,
+    "code": "    assertThat(cache.get(\"france\")).isEqualTo(\"paris\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 58,
+    "code": "    assertThat(cache.keySet()).containsOnly(\"france\", \"italy\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 59,
+    "code": "    assertThat(cache.keySet(\"france\")).isEmpty();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 60,
+    "code": "    assertThat(cache.values()).containsOnly(\"paris\", \"rome\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 61,
+    "code": "    assertThat(cache.containsKey(\"france\")).isTrue();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 62,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 63,
+    "code": "    Cache.Entry[] entries = Iterables.toArray(cache.entries(), Cache.Entry.class);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "db81d934752174207268c49658963ba98665794b",
+    "scmDate": "2014-02-20T07:35:27+0100"
+  },
+  {
+    "line": 64,
+    "code": "    assertThat(entries).hasSize(2);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 65,
+    "code": "    assertThat(entries[0].key()[0]).isEqualTo(\"france\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 66,
+    "code": "    assertThat(entries[0].value()).isEqualTo(\"paris\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 67,
+    "code": "    assertThat(entries[1].key()[0]).isEqualTo(\"italy\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 68,
+    "code": "    assertThat(entries[1].value()).isEqualTo(\"rome\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 69,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 70,
+    "code": "    cache.remove(\"france\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 71,
+    "code": "    assertThat(cache.get(\"france\")).isNull();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 72,
+    "code": "    assertThat(cache.get(\"italy\")).isEqualTo(\"rome\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 73,
+    "code": "    assertThat(cache.keySet()).containsOnly(\"italy\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 74,
+    "code": "    assertThat(cache.keySet(\"france\")).isEmpty();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 75,
+    "code": "    assertThat(cache.containsKey(\"france\")).isFalse();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 76,
+    "code": "    assertThat(cache.containsKey(\"italy\")).isTrue();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 77,
+    "code": "    assertThat(cache.values()).containsOnly(\"rome\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 78,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 79,
+    "code": "    cache.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 80,
+    "code": "    assertThat(cache.values()).isEmpty();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 81,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 82,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 83,
+    "code": "  @Test",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 84,
+    "code": "  public void test_key_being_prefix_of_another_key() throws Exception {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+    "scmDate": "2013-05-31T12:42:59+0200"
+  },
+  {
+    "line": 85,
+    "code": "    Cache&lt;String&gt; cache = caches.createCache(\"components\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 86,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+    "scmDate": "2013-05-31T12:42:59+0200"
+  },
+  {
+    "line": 87,
+    "code": "    cache.put(\"struts-el:org.apache.strutsel.taglib.html.ELButtonTag\", \"the Tag\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+    "scmDate": "2013-05-31T12:42:59+0200"
+  },
+  {
+    "line": 88,
+    "code": "    cache.put(\"struts-el:org.apache.strutsel.taglib.html.ELButtonTagBeanInfo\", \"the BeanInfo\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+    "scmDate": "2013-05-31T12:42:59+0200"
+  },
+  {
+    "line": 89,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+    "scmDate": "2013-05-31T12:42:59+0200"
+  },
+  {
+    "line": 90,
+    "code": "    assertThat(cache.get(\"struts-el:org.apache.strutsel.taglib.html.ELButtonTag\")).isEqualTo(\"the Tag\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+    "scmDate": "2013-05-31T12:42:59+0200"
+  },
+  {
+    "line": 91,
+    "code": "    assertThat(cache.get(\"struts-el:org.apache.strutsel.taglib.html.ELButtonTagBeanInfo\")).isEqualTo(\"the BeanInfo\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+    "scmDate": "2013-05-31T12:42:59+0200"
+  },
+  {
+    "line": 92,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+    "scmDate": "2013-05-31T12:42:59+0200"
+  },
+  {
+    "line": 93,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+    "scmDate": "2013-05-31T12:42:59+0200"
+  },
+  {
+    "line": 94,
+    "code": "  @Test",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "2a37a23b0ff74cd69a3a4c9053f3a2331b234097",
+    "scmDate": "2013-05-31T12:42:59+0200"
+  },
+  {
+    "line": 95,
+    "code": "  public void two_parts_key() throws Exception {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 96,
+    "code": "    Cache&lt;String&gt; cache = caches.createCache(\"capitals\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 97,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 98,
+    "code": "    assertThat(cache.get(\"europe\", \"france\")).isNull();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 99,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 100,
+    "code": "    cache.put(\"europe\", \"france\", \"paris\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 101,
+    "code": "    cache.put(\"europe\", \"italy\", \"rome\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 102,
+    "code": "    cache.put(\"asia\", \"china\", \"pekin\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 103,
+    "code": "    assertThat(cache.get(\"europe\")).isNull();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 104,
+    "code": "    assertThat(cache.get(\"europe\", \"france\")).isEqualTo(\"paris\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 105,
+    "code": "    assertThat(cache.get(\"europe\", \"italy\")).isEqualTo(\"rome\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 106,
+    "code": "    assertThat(cache.get(\"europe\")).isNull();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 107,
+    "code": "    assertThat(cache.keySet(\"europe\")).containsOnly(\"france\", \"italy\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 108,
+    "code": "    assertThat(cache.keySet()).containsOnly(\"europe\", \"asia\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 109,
+    "code": "    assertThat(cache.containsKey(\"europe\")).isFalse();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 110,
+    "code": "    assertThat(cache.containsKey(\"europe\", \"france\")).isTrue();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 111,
+    "code": "    assertThat(cache.containsKey(\"europe\", \"spain\")).isFalse();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 112,
+    "code": "    assertThat(cache.values()).containsOnly(\"paris\", \"rome\", \"pekin\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 113,
+    "code": "    assertThat(cache.values(\"america\")).isEmpty();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 114,
+    "code": "    assertThat(cache.values(\"europe\")).containsOnly(\"paris\", \"rome\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 115,
+    "code": "    assertThat(cache.values(\"oceania\")).isEmpty();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 116,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 117,
+    "code": "    Cache.Entry[] allEntries = Iterables.toArray(cache.entries(), Cache.Entry.class);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "db81d934752174207268c49658963ba98665794b",
+    "scmDate": "2014-02-20T07:35:27+0100"
+  },
+  {
+    "line": 118,
+    "code": "    assertThat(allEntries).hasSize(3);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 119,
+    "code": "    assertThat(allEntries[0].key()).isEqualTo(new String[] {\"asia\", \"china\"});",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 120,
+    "code": "    assertThat(allEntries[0].value()).isEqualTo(\"pekin\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 121,
+    "code": "    assertThat(allEntries[1].key()).isEqualTo(new String[] {\"europe\", \"france\"});",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 122,
+    "code": "    assertThat(allEntries[1].value()).isEqualTo(\"paris\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 123,
+    "code": "    assertThat(allEntries[2].key()).isEqualTo(new String[] {\"europe\", \"italy\"});",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 124,
+    "code": "    assertThat(allEntries[2].value()).isEqualTo(\"rome\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 125,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 126,
+    "code": "    Cache.Entry[] subEntries = Iterables.toArray(cache.entries(\"europe\"), Cache.Entry.class);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 127,
+    "code": "    assertThat(subEntries).hasSize(2);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 128,
+    "code": "    assertThat(subEntries[0].key()).isEqualTo(new String[] {\"europe\", \"france\"});",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 129,
+    "code": "    assertThat(subEntries[0].value()).isEqualTo(\"paris\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 130,
+    "code": "    assertThat(subEntries[1].key()).isEqualTo(new String[] {\"europe\", \"italy\"});",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 131,
+    "code": "    assertThat(subEntries[1].value()).isEqualTo(\"rome\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 132,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 133,
+    "code": "    cache.remove(\"europe\", \"france\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 134,
+    "code": "    assertThat(cache.values()).containsOnly(\"rome\", \"pekin\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 135,
+    "code": "    assertThat(cache.get(\"europe\", \"france\")).isNull();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 136,
+    "code": "    assertThat(cache.get(\"europe\", \"italy\")).isEqualTo(\"rome\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 137,
+    "code": "    assertThat(cache.containsKey(\"europe\", \"france\")).isFalse();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 138,
+    "code": "    assertThat(cache.keySet(\"europe\")).containsOnly(\"italy\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 139,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 140,
+    "code": "    cache.clear(\"america\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 141,
+    "code": "    assertThat(cache.keySet()).containsOnly(\"europe\", \"asia\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 142,
+    "code": "    cache.clear();",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 143,
+    "code": "    assertThat(cache.keySet()).isEmpty();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 144,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 145,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 146,
+    "code": "  @Test",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 147,
+    "code": "  public void three_parts_key() throws Exception {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 148,
+    "code": "    Cache&lt;String&gt; cache = caches.createCache(\"places\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 149,
+    "code": "    assertThat(cache.get(\"europe\", \"france\", \"paris\")).isNull();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 150,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 151,
+    "code": "    cache.put(\"europe\", \"france\", \"paris\", \"eiffel tower\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 152,
+    "code": "    cache.put(\"europe\", \"france\", \"annecy\", \"lake\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 153,
+    "code": "    cache.put(\"europe\", \"france\", \"poitiers\", \"notre dame\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 154,
+    "code": "    cache.put(\"europe\", \"italy\", \"rome\", \"colosseum\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 155,
+    "code": "    cache.put(\"europe2\", \"ukrania\", \"kiev\", \"dunno\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 156,
+    "code": "    cache.put(\"asia\", \"china\", \"pekin\", \"great wall\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 157,
+    "code": "    cache.put(\"america\", \"us\", \"new york\", \"empire state building\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 158,
+    "code": "    assertThat(cache.get(\"europe\")).isNull();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 159,
+    "code": "    assertThat(cache.get(\"europe\", \"france\")).isNull();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 160,
+    "code": "    assertThat(cache.get(\"europe\", \"france\", \"paris\")).isEqualTo(\"eiffel tower\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 161,
+    "code": "    assertThat(cache.get(\"europe\", \"france\", \"annecy\")).isEqualTo(\"lake\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 162,
+    "code": "    assertThat(cache.get(\"europe\", \"italy\", \"rome\")).isEqualTo(\"colosseum\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 163,
+    "code": "    assertThat(cache.keySet()).containsOnly(\"europe\", \"asia\", \"america\", \"europe2\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 164,
+    "code": "    assertThat(cache.keySet(\"europe\")).containsOnly(\"france\", \"italy\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 165,
+    "code": "    assertThat(cache.keySet(\"europe\", \"france\")).containsOnly(\"annecy\", \"paris\", \"poitiers\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 166,
+    "code": "    assertThat(cache.containsKey(\"europe\")).isFalse();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 167,
+    "code": "    assertThat(cache.containsKey(\"europe\", \"france\")).isFalse();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 168,
+    "code": "    assertThat(cache.containsKey(\"europe\", \"france\", \"annecy\")).isTrue();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 169,
+    "code": "    assertThat(cache.containsKey(\"europe\", \"france\", \"biarritz\")).isFalse();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 170,
+    "code": "    assertThat(cache.values()).containsOnly(\"eiffel tower\", \"lake\", \"colosseum\", \"notre dame\", \"great wall\", \"empire state building\", \"dunno\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 171,
+    "code": "    assertThat(cache.values(\"europe\")).containsOnly(\"eiffel tower\", \"lake\", \"colosseum\", \"notre dame\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 172,
+    "code": "    assertThat(cache.values(\"europe\", \"france\")).containsOnly(\"eiffel tower\", \"lake\", \"notre dame\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 173,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 174,
+    "code": "    Cache.Entry[] allEntries = Iterables.toArray(cache.entries(), Cache.Entry.class);",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "db81d934752174207268c49658963ba98665794b",
+    "scmDate": "2014-02-20T07:35:27+0100"
+  },
+  {
+    "line": 175,
+    "code": "    assertThat(allEntries).hasSize(7);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 176,
+    "code": "    assertThat(allEntries[0].key()).isEqualTo(new String[] {\"america\", \"us\", \"new york\"});",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 177,
+    "code": "    assertThat(allEntries[0].value()).isEqualTo(\"empire state building\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 178,
+    "code": "    assertThat(allEntries[1].key()).isEqualTo(new String[] {\"asia\", \"china\", \"pekin\"});",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 179,
+    "code": "    assertThat(allEntries[1].value()).isEqualTo(\"great wall\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 180,
+    "code": "    assertThat(allEntries[2].key()).isEqualTo(new String[] {\"europe\", \"france\", \"annecy\"});",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 181,
+    "code": "    assertThat(allEntries[2].value()).isEqualTo(\"lake\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 182,
+    "code": "    assertThat(allEntries[3].key()).isEqualTo(new String[] {\"europe\", \"france\", \"paris\"});",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 183,
+    "code": "    assertThat(allEntries[3].value()).isEqualTo(\"eiffel tower\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 184,
+    "code": "    assertThat(allEntries[4].key()).isEqualTo(new String[] {\"europe\", \"france\", \"poitiers\"});",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 185,
+    "code": "    assertThat(allEntries[4].value()).isEqualTo(\"notre dame\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 186,
+    "code": "    assertThat(allEntries[5].key()).isEqualTo(new String[] {\"europe\", \"italy\", \"rome\"});",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 187,
+    "code": "    assertThat(allEntries[5].value()).isEqualTo(\"colosseum\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 188,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 189,
+    "code": "    Cache.Entry[] subEntries = Iterables.toArray(cache.entries(\"europe\"), Cache.Entry.class);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 190,
+    "code": "    assertThat(subEntries).hasSize(4);",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 191,
+    "code": "    assertThat(subEntries[0].key()).isEqualTo(new String[] {\"europe\", \"france\", \"annecy\"});",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 192,
+    "code": "    assertThat(subEntries[0].value()).isEqualTo(\"lake\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 193,
+    "code": "    assertThat(subEntries[1].key()).isEqualTo(new String[] {\"europe\", \"france\", \"paris\"});",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 194,
+    "code": "    assertThat(subEntries[1].value()).isEqualTo(\"eiffel tower\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 195,
+    "code": "    assertThat(subEntries[2].key()).isEqualTo(new String[] {\"europe\", \"france\", \"poitiers\"});",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 196,
+    "code": "    assertThat(subEntries[2].value()).isEqualTo(\"notre dame\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 197,
+    "code": "    assertThat(subEntries[3].key()).isEqualTo(new String[] {\"europe\", \"italy\", \"rome\"});",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 198,
+    "code": "    assertThat(subEntries[3].value()).isEqualTo(\"colosseum\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 199,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 200,
+    "code": "    cache.remove(\"europe\", \"france\", \"annecy\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 201,
+    "code": "    assertThat(cache.values()).containsOnly(\"eiffel tower\", \"colosseum\", \"notre dame\", \"great wall\", \"empire state building\", \"dunno\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 202,
+    "code": "    assertThat(cache.values(\"europe\")).containsOnly(\"eiffel tower\", \"colosseum\", \"notre dame\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 203,
+    "code": "    assertThat(cache.values(\"europe\", \"france\")).containsOnly(\"eiffel tower\", \"notre dame\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 204,
+    "code": "    assertThat(cache.get(\"europe\", \"france\", \"annecy\")).isNull();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 205,
+    "code": "    assertThat(cache.get(\"europe\", \"italy\", \"rome\")).isEqualTo(\"colosseum\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 206,
+    "code": "    assertThat(cache.containsKey(\"europe\", \"france\")).isFalse();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 207,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 208,
+    "code": "    cache.clear(\"europe\", \"italy\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 209,
+    "code": "    assertThat(cache.values()).containsOnly(\"eiffel tower\", \"notre dame\", \"great wall\", \"empire state building\", \"dunno\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 210,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 211,
+    "code": "    cache.clear(\"europe\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 212,
+    "code": "    assertThat(cache.values()).containsOnly(\"great wall\", \"empire state building\", \"dunno\");",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 213,
+    "code": "",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 214,
+    "code": "    cache.clear();",
+    "scmAuthor": "julien.henry@sonarsource.com",
+    "scmRevision": "cc071cc29e8c4d4592282313a3ca2ec376fd7f71",
+    "scmDate": "2014-05-01T00:00:12+0200"
+  },
+  {
+    "line": 215,
+    "code": "    assertThat(cache.values()).isEmpty();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 216,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 217,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 218,
+    "code": "  @Test",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 219,
+    "code": "  public void remove_versus_clear() throws Exception {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 220,
+    "code": "    Cache&lt;String&gt; cache = caches.createCache(\"capitals\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 221,
+    "code": "    cache.put(\"europe\", \"france\", \"paris\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 222,
+    "code": "    cache.put(\"europe\", \"italy\", \"rome\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 223,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 224,
+    "code": "    // remove(\"europe\") does not remove sub-keys",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 225,
+    "code": "    cache.remove(\"europe\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 226,
+    "code": "    assertThat(cache.values()).containsOnly(\"paris\", \"rome\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 227,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 228,
+    "code": "    // clear(\"europe\") removes sub-keys",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 229,
+    "code": "    cache.clear(\"europe\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 230,
+    "code": "    assertThat(cache.values()).isEmpty();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 231,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 232,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 233,
+    "code": "  @Test",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 234,
+    "code": "  public void empty_cache() throws Exception {",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 235,
+    "code": "    Cache&lt;String&gt; cache = caches.createCache(\"empty\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 236,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 237,
+    "code": "    assertThat(cache.get(\"foo\")).isNull();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 238,
+    "code": "    assertThat(cache.get(\"foo\", \"bar\")).isNull();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 239,
+    "code": "    assertThat(cache.get(\"foo\", \"bar\", \"baz\")).isNull();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 240,
+    "code": "    assertThat(cache.keySet()).isEmpty();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 241,
+    "code": "    assertThat(cache.keySet(\"foo\")).isEmpty();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 242,
+    "code": "    assertThat(cache.containsKey(\"foo\")).isFalse();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 243,
+    "code": "    assertThat(cache.containsKey(\"foo\", \"bar\")).isFalse();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 244,
+    "code": "    assertThat(cache.containsKey(\"foo\", \"bar\", \"baz\")).isFalse();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 245,
+    "code": "    assertThat(cache.values()).isEmpty();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 246,
+    "code": "    assertThat(cache.values(\"foo\")).isEmpty();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 247,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 248,
+    "code": "    // do not fail",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 249,
+    "code": "    cache.remove(\"foo\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 250,
+    "code": "    cache.remove(\"foo\", \"bar\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 251,
+    "code": "    cache.remove(\"foo\", \"bar\", \"baz\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 252,
+    "code": "    cache.clear(\"foo\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 253,
+    "code": "    cache.clear(\"foo\", \"bar\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 254,
+    "code": "    cache.clear(\"foo\", \"bar\", \"baz\");",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "e486fe02a0a38d3d9fb70690f7870c77e2265254",
+    "scmDate": "2014-02-20T07:23:08+0100"
+  },
+  {
+    "line": 255,
+    "code": "    cache.clear();",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "26edff10d133e29e7013f803e7ef0d69ff593aeb",
+    "scmDate": "2013-04-16T17:26:34+0200"
+  },
+  {
+    "line": 256,
+    "code": "  }",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "b5eb47872b34aa9d017dca62abfe49b2fd7af61b",
+    "scmDate": "2013-04-17T10:35:23+0200"
+  },
+  {
+    "line": 257,
+    "code": "}",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  },
+  {
+    "line": 258,
+    "code": "",
+    "scmAuthor": "simon.brandhof@gmail.com",
+    "scmRevision": "108dc916996e3075eb21c6ae1bbc7c9a24f09ab0",
+    "scmDate": "2013-04-16T13:24:54+0200"
+  }
+]}
diff --git a/server/sonar-web/src/test/json/source-viewer-spec/tests/tests.json b/server/sonar-web/src/test/json/source-viewer-spec/tests/tests.json
new file mode 100644 (file)
index 0000000..421cbb3
--- /dev/null
@@ -0,0 +1,38 @@
+{"tests": [
+  {
+    "name": "two_parts_key",
+    "status": "OK",
+    "durationInMs": 324,
+    "coveredLines": 0
+  },
+  {
+    "name": "remove_versus_clear",
+    "status": "OK",
+    "durationInMs": 81,
+    "coveredLines": 0
+  },
+  {
+    "name": "three_parts_key",
+    "status": "OK",
+    "durationInMs": 93,
+    "coveredLines": 0
+  },
+  {
+    "name": "test_key_being_prefix_of_another_key",
+    "status": "OK",
+    "durationInMs": 89,
+    "coveredLines": 0
+  },
+  {
+    "name": "one_part_key",
+    "status": "OK",
+    "durationInMs": 91,
+    "coveredLines": 0
+  },
+  {
+    "name": "empty_cache",
+    "status": "OK",
+    "durationInMs": 88,
+    "coveredLines": 0
+  }
+]}
diff --git a/server/sonar-web/src/test/json/treemap-spec/treemap-resources.json b/server/sonar-web/src/test/json/treemap-spec/treemap-resources.json
new file mode 100644 (file)
index 0000000..bc1c208
--- /dev/null
@@ -0,0 +1,616 @@
+[
+  {
+    "id": 258,
+    "key": "org.codehaus.sonar:sonar-core",
+    "name": "SonarQube :: Core",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Core",
+    "version": "4.5-SNAPSHOT",
+    "description": "Core components shared to batch and server",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 83.3,
+        "frmt_val": "83.3%"
+      },
+      {
+        "key": "ncloc",
+        "val": 17854.0,
+        "frmt_val": "17,854"
+      }
+    ]
+  },
+  {
+    "id": 17221,
+    "key": "org.codehaus.sonar:sonar-home",
+    "name": "SonarQube :: Home",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": "2013-02-08T22:22:38+0600",
+    "lname": "SonarQube :: Home",
+    "version": "4.5-SNAPSHOT",
+    "description": "Access the user home directory that contains cache of files",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 75.1,
+        "frmt_val": "75.1%"
+      },
+      {
+        "key": "ncloc",
+        "val": 280.0,
+        "frmt_val": "280"
+      }
+    ]
+  },
+  {
+    "id": 2867,
+    "key": "org.codehaus.sonar:sonar-batch-maven-compat",
+    "name": "SonarQube :: Batch Maven Compat",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Batch Maven Compat",
+    "version": "4.5-SNAPSHOT",
+    "description": "Compatibility layer, which provides MavenProject for non-Maven environments."
+  },
+  {
+    "id": 2871,
+    "key": "org.codehaus.sonar:sonar-maven3-plugin",
+    "name": "SonarQube :: Maven3 Plugin",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Maven3 Plugin",
+    "version": "4.5-SNAPSHOT",
+    "description": "Open source platform for continuous inspection of code quality"
+  },
+  {
+    "id": 2872,
+    "key": "org.codehaus.sonar:sonar-server",
+    "name": "SonarQube :: Server",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Server",
+    "version": "4.5-SNAPSHOT",
+    "description": "Open source platform for continuous inspection of code quality",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 87.8,
+        "frmt_val": "87.8%"
+      },
+      {
+        "key": "ncloc",
+        "val": 35987.0,
+        "frmt_val": "35,987"
+      }
+    ]
+  },
+  {
+    "id": 1227,
+    "key": "org.codehaus.sonar:sonar-ws-client",
+    "name": "SonarQube :: Web Service Client",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Web Service Client",
+    "version": "4.5-SNAPSHOT",
+    "description": "Java Client Library for SonarQube Web Services",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 77.2,
+        "frmt_val": "77.2%"
+      },
+      {
+        "key": "ncloc",
+        "val": 6393.0,
+        "frmt_val": "6,393"
+      }
+    ]
+  },
+  {
+    "id": 1627,
+    "key": "org.codehaus.sonar.plugins:sonar-dbcleaner-plugin",
+    "name": "SonarQube :: Plugins :: Database Cleaner",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Plugins :: Database Cleaner",
+    "version": "4.5-SNAPSHOT",
+    "description": "Optimizes database performances by removing old and useless data.",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 80.8,
+        "frmt_val": "80.8%"
+      },
+      {
+        "key": "ncloc",
+        "val": 397.0,
+        "frmt_val": "397"
+      }
+    ]
+  },
+  {
+    "id": 2881,
+    "key": "org.codehaus.sonar.plugins:sonar-design-plugin",
+    "name": "SonarQube :: Plugins :: Design",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Plugins :: Design",
+    "version": "4.5-SNAPSHOT",
+    "description": "Open source platform for continuous inspection of code quality",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 28.4,
+        "frmt_val": "28.4%"
+      },
+      {
+        "key": "ncloc",
+        "val": 359.0,
+        "frmt_val": "359"
+      }
+    ]
+  },
+  {
+    "id": 2882,
+    "key": "org.codehaus.sonar.plugins:sonar-l10n-en-plugin",
+    "name": "SonarQube :: Plugins :: English Pack",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Plugins :: English Pack",
+    "version": "4.5-SNAPSHOT",
+    "description": "Open source platform for continuous inspection of code quality",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 100.0,
+        "frmt_val": "100.0%"
+      },
+      {
+        "key": "ncloc",
+        "val": 9.0,
+        "frmt_val": "9"
+      }
+    ]
+  },
+  {
+    "id": 25120,
+    "key": "org.codehaus.sonar.plugins:sonar-xoo-plugin",
+    "name": "SonarQube :: Plugins :: Xoo",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": "2014-01-17T16:38:52+0600",
+    "lname": "SonarQube :: Plugins :: Xoo",
+    "version": "4.5-SNAPSHOT",
+    "description": "Sample of plugin to document and test available APIs",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 50.0,
+        "frmt_val": "50.0%"
+      },
+      {
+        "key": "ncloc",
+        "val": 86.0,
+        "frmt_val": "86"
+      }
+    ]
+  },
+  {
+    "id": 2866,
+    "key": "org.codehaus.sonar:sonar-application",
+    "name": "SonarQube :: Application",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Application",
+    "version": "4.5-SNAPSHOT",
+    "description": "Package the standalone distribution",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 90.2,
+        "frmt_val": "90.2%"
+      },
+      {
+        "key": "ncloc",
+        "val": 610.0,
+        "frmt_val": "610"
+      }
+    ]
+  },
+  {
+    "id": 33484,
+    "key": "org.codehaus.sonar:sonar-process",
+    "name": "SonarQube :: Process",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": "2014-07-08T17:17:01+0600",
+    "lname": "SonarQube :: Process",
+    "version": "4.5-SNAPSHOT",
+    "description": "Open source platform for continuous inspection of code quality",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 68.9,
+        "frmt_val": "68.9%"
+      },
+      {
+        "key": "ncloc",
+        "val": 409.0,
+        "frmt_val": "409"
+      }
+    ]
+  },
+  {
+    "id": 33505,
+    "key": "org.codehaus.sonar:sonar-search",
+    "name": "SonarQube :: Search",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": "2014-07-09T23:19:46+0600",
+    "lname": "SonarQube :: Search",
+    "version": "4.5-SNAPSHOT",
+    "description": "Open source platform for continuous inspection of code quality",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 24.2,
+        "frmt_val": "24.2%"
+      },
+      {
+        "key": "ncloc",
+        "val": 226.0,
+        "frmt_val": "226"
+      }
+    ]
+  },
+  {
+    "id": 1624,
+    "key": "org.codehaus.sonar:sonar-batch",
+    "name": "SonarQube :: Batch",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Batch",
+    "version": "4.5-SNAPSHOT",
+    "description": "Open source platform for continuous inspection of code quality",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 76.7,
+        "frmt_val": "76.7%"
+      },
+      {
+        "key": "ncloc",
+        "val": 15301.0,
+        "frmt_val": "15,301"
+      }
+    ]
+  },
+  {
+    "id": 17,
+    "key": "org.codehaus.sonar:sonar-check-api",
+    "name": "SonarQube :: Check API",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Check API",
+    "version": "4.5-SNAPSHOT",
+    "description": "Check API",
+    "msr": [
+      {
+        "key": "ncloc",
+        "val": 57.0,
+        "frmt_val": "57"
+      }
+    ]
+  },
+  {
+    "id": 18,
+    "key": "org.codehaus.sonar:sonar-colorizer",
+    "name": "SonarQube :: Code Colorizer",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Code Colorizer",
+    "version": "4.5-SNAPSHOT",
+    "description": "Code syntax highlighter",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 89.2,
+        "frmt_val": "89.2%"
+      },
+      {
+        "key": "ncloc",
+        "val": 784.0,
+        "frmt_val": "784"
+      }
+    ]
+  },
+  {
+    "id": 1625,
+    "key": "org.codehaus.sonar:sonar-deprecated",
+    "name": "SonarQube :: Deprecated",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Deprecated",
+    "version": "4.5-SNAPSHOT",
+    "description": "Open source platform for continuous inspection of code quality",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 52.0,
+        "frmt_val": "52.0%"
+      },
+      {
+        "key": "ncloc",
+        "val": 1375.0,
+        "frmt_val": "1,375"
+      }
+    ]
+  },
+  {
+    "id": 20,
+    "key": "org.codehaus.sonar:sonar-duplications",
+    "name": "SonarQube :: Duplications",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Duplications",
+    "version": "4.5-SNAPSHOT",
+    "description": "Detect duplicated code",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 85.1,
+        "frmt_val": "85.1%"
+      },
+      {
+        "key": "ncloc",
+        "val": 2693.0,
+        "frmt_val": "2,693"
+      }
+    ]
+  },
+  {
+    "id": 21,
+    "key": "org.codehaus.sonar:sonar-graph",
+    "name": "SonarQube :: Graph",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Graph",
+    "version": "4.5-SNAPSHOT",
+    "description": "Open source platform for continuous inspection of code quality",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 93.0,
+        "frmt_val": "93.0%"
+      },
+      {
+        "key": "ncloc",
+        "val": 997.0,
+        "frmt_val": "997"
+      }
+    ]
+  },
+  {
+    "id": 1626,
+    "key": "org.codehaus.sonar:sonar-java-api",
+    "name": "SonarQube :: Java API",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Java API",
+    "version": "4.5-SNAPSHOT",
+    "description": "Open source platform for continuous inspection of code quality",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 60.9,
+        "frmt_val": "60.9%"
+      },
+      {
+        "key": "ncloc",
+        "val": 265.0,
+        "frmt_val": "265"
+      }
+    ]
+  },
+  {
+    "id": 2869,
+    "key": "org.codehaus.sonar:sonar-markdown",
+    "name": "SonarQube :: Markdown",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Markdown",
+    "version": "4.5-SNAPSHOT",
+    "description": "Open source platform for continuous inspection of code quality",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 95.5,
+        "frmt_val": "95.5%"
+      },
+      {
+        "key": "ncloc",
+        "val": 340.0,
+        "frmt_val": "340"
+      }
+    ]
+  },
+  {
+    "id": 2870,
+    "key": "org.codehaus.sonar:sonar-maven-plugin",
+    "name": "SonarQube :: Maven2 Plugin",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Maven2 Plugin",
+    "version": "4.5-SNAPSHOT",
+    "description": "Open source platform for continuous inspection of code quality",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 16.9,
+        "frmt_val": "16.9%"
+      },
+      {
+        "key": "ncloc",
+        "val": 122.0,
+        "frmt_val": "122"
+      }
+    ]
+  },
+  {
+    "id": 16,
+    "key": "org.codehaus.sonar:sonar-plugin-api",
+    "name": "SonarQube :: Plugin API",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Plugin API",
+    "version": "4.5-SNAPSHOT",
+    "description": "Open source platform for continuous inspection of code quality",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 71.8,
+        "frmt_val": "71.8%"
+      },
+      {
+        "key": "ncloc",
+        "val": 22421.0,
+        "frmt_val": "22,421"
+      }
+    ]
+  },
+  {
+    "id": 251,
+    "key": "org.codehaus.sonar:sonar-testing-harness",
+    "name": "SonarQube :: Testing Harness",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Testing Harness",
+    "version": "4.5-SNAPSHOT",
+    "description": "Open source platform for continuous inspection of code quality",
+    "msr": [
+      {
+        "key": "ncloc",
+        "val": 265.0,
+        "frmt_val": "265"
+      }
+    ]
+  },
+  {
+    "id": 2873,
+    "key": "org.codehaus.sonar.plugins:sonar-core-plugin",
+    "name": "SonarQube :: Plugins :: Core",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Plugins :: Core",
+    "version": "4.5-SNAPSHOT",
+    "description": "Open source platform for continuous inspection of code quality",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 86.4,
+        "frmt_val": "86.4%"
+      },
+      {
+        "key": "ncloc",
+        "val": 4904.0,
+        "frmt_val": "4,904"
+      }
+    ]
+  },
+  {
+    "id": 2879,
+    "key": "org.codehaus.sonar.plugins:sonar-cpd-plugin",
+    "name": "SonarQube :: Plugins :: CPD",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Plugins :: CPD",
+    "version": "4.5-SNAPSHOT",
+    "description": "Find duplicated source code within project.",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 42.6,
+        "frmt_val": "42.6%"
+      },
+      {
+        "key": "ncloc",
+        "val": 722.0,
+        "frmt_val": "722"
+      }
+    ]
+  },
+  {
+    "id": 2883,
+    "key": "org.codehaus.sonar.plugins:sonar-email-notifications-plugin",
+    "name": "SonarQube :: Plugins :: Email Notifications",
+    "scope": "PRJ",
+    "qualifier": "BRC",
+    "date": "2014-07-09T23:19:45+0600",
+    "creationDate": null,
+    "lname": "SonarQube :: Plugins :: Email Notifications",
+    "version": "4.5-SNAPSHOT",
+    "description": "Email Notifications",
+    "msr": [
+      {
+        "key": "coverage",
+        "val": 80.6,
+        "frmt_val": "80.6%"
+      },
+      {
+        "key": "ncloc",
+        "val": 267.0,
+        "frmt_val": "267"
+      }
+    ]
+  }
+]
diff --git a/server/sonar-web/src/test/json/treemap-spec/treemap.json b/server/sonar-web/src/test/json/treemap-spec/treemap.json
new file mode 100644 (file)
index 0000000..1125b3a
--- /dev/null
@@ -0,0 +1,496 @@
+{"metrics": {
+  "coverage": {
+    "name": "Coverage",
+    "type": "PERCENT",
+    "direction": 1,
+    "worstValue": 0.0,
+    "bestValue": 100.0
+  },
+  "ncloc": {
+    "name": "Lines of code",
+    "type": "INT",
+    "direction": -1
+  }
+}, "components": [
+  {
+    "key": "org.codehaus.sonar:sonar",
+    "name": "SonarQube",
+    "longName": "SonarQube",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 80.4,
+        "fval": "80.4%"
+      },
+      "ncloc": {
+        "val": 113123.0,
+        "fval": "113,123"
+      }
+    }
+  },
+  {
+    "key": "org.codehaus.sonar:sonar-persistit",
+    "name": "sonar-persistit",
+    "longName": "sonar-persistit",
+    "qualifier": "TRK",
+    "measures": {
+      "ncloc": {
+        "val": 45330.0,
+        "fval": "45,330"
+      }
+    }
+  },
+  {
+    "key": "com.sonarsource.cpp:cpp",
+    "name": "SonarSource :: CPP",
+    "longName": "SonarSource :: CPP",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 90.4,
+        "fval": "90.4%"
+      },
+      "ncloc": {
+        "val": 31250.0,
+        "fval": "31,250"
+      }
+    }
+  },
+  {
+    "key": "org.codehaus.sonar-plugins.java:java",
+    "name": "SonarQube Java",
+    "longName": "SonarQube Java",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 90.1,
+        "fval": "90.1%"
+      },
+      "ncloc": {
+        "val": 22588.0,
+        "fval": "22,588"
+      }
+    }
+  },
+  {
+    "key": "com.sonarsource.cobol:cobol",
+    "name": "SonarSource :: Cobol",
+    "longName": "SonarSource :: Cobol",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 83.5,
+        "fval": "83.5%"
+      },
+      "ncloc": {
+        "val": 20879.0,
+        "fval": "20,879"
+      }
+    }
+  },
+  {
+    "key": "com.sonarsource.plsql:plsql",
+    "name": "SonarSource :: PL/SQL",
+    "longName": "SonarSource :: PL/SQL",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 96.6,
+        "fval": "96.6%"
+      },
+      "ncloc": {
+        "val": 12110.0,
+        "fval": "12,110"
+      }
+    }
+  },
+  {
+    "key": "org.codehaus.sonar.sslr:sslr",
+    "name": "SonarSource :: Language Recognizer",
+    "longName": "SonarSource :: Language Recognizer",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 80.3,
+        "fval": "80.3%"
+      },
+      "ncloc": {
+        "val": 8698.0,
+        "fval": "8,698"
+      }
+    }
+  },
+  {
+    "key": "org.codehaus.sonar-ide.eclipse:eclipse-parent",
+    "name": "SonarQube Integration for Eclipse (parent)",
+    "longName": "SonarQube Integration for Eclipse (parent)",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 17.2,
+        "fval": "17.2%"
+      },
+      "ncloc": {
+        "val": 7924.0,
+        "fval": "7,924"
+      }
+    }
+  },
+  {
+    "key": "org.codehaus.sonar-plugins.php:parent",
+    "name": "PHP",
+    "longName": "PHP",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 94.9,
+        "fval": "94.9%"
+      },
+      "ncloc": {
+        "val": 7134.0,
+        "fval": "7,134"
+      }
+    }
+  },
+  {
+    "key": "org.codehaus.sonar-plugins.javascript:javascript",
+    "name": "JavaScript",
+    "longName": "JavaScript",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 94.0,
+        "fval": "94.0%"
+      },
+      "ncloc": {
+        "val": 6820.0,
+        "fval": "6,820"
+      }
+    }
+  },
+  {
+    "key": "com.maif.sonar:maif-cobol-plugin",
+    "name": "MAIF :: Cobol plugin",
+    "longName": "MAIF :: Cobol plugin",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 91.6,
+        "fval": "91.6%"
+      },
+      "ncloc": {
+        "val": 6684.0,
+        "fval": "6,684"
+      }
+    }
+  },
+  {
+    "key": "com.sonarsource.vbnet:vbnet",
+    "name": "SonarSource :: Visual Basic .NET",
+    "longName": "SonarSource :: Visual Basic .NET",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 94.3,
+        "fval": "94.3%"
+      },
+      "ncloc": {
+        "val": 6416.0,
+        "fval": "6,416"
+      }
+    }
+  },
+  {
+    "key": "com.sonarsource.orchestrator:orchestrator-parent",
+    "name": "SonarSource :: Orchestrator :: Parent",
+    "longName": "SonarSource :: Orchestrator :: Parent",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 76.1,
+        "fval": "76.1%"
+      },
+      "ncloc": {
+        "val": 5815.0,
+        "fval": "5,815"
+      }
+    }
+  },
+  {
+    "key": "org.codehaus.sonar-plugins.flex:flex",
+    "name": "Flex",
+    "longName": "Flex",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 93.1,
+        "fval": "93.1%"
+      },
+      "ncloc": {
+        "val": 5401.0,
+        "fval": "5,401"
+      }
+    }
+  },
+  {
+    "key": "org.codehaus.sonar-plugins.dotnet.csharp:sonar-csharp-squid",
+    "name": "SonarQube C# Plugin",
+    "longName": "SonarQube C# Plugin",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 90.3,
+        "fval": "90.3%"
+      },
+      "ncloc": {
+        "val": 4930.0,
+        "fval": "4,930"
+      }
+    }
+  },
+  {
+    "key": "com.sonarsource.rpg:rpg",
+    "name": "SonarSource :: RPG",
+    "longName": "SonarSource :: RPG",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 92.7,
+        "fval": "92.7%"
+      },
+      "ncloc": {
+        "val": 4235.0,
+        "fval": "4,235"
+      }
+    }
+  },
+  {
+    "key": "com.sonarsource.plugins.vb:vb",
+    "name": "SonarSource :: Visual Basic",
+    "longName": "SonarSource :: Visual Basic",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 96.1,
+        "fval": "96.1%"
+      },
+      "ncloc": {
+        "val": 4190.0,
+        "fval": "4,190"
+      }
+    }
+  },
+  {
+    "key": "org.codehaus.sonar-plugins.erlang:erlang",
+    "name": "Erlang",
+    "longName": "Erlang",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 88.6,
+        "fval": "88.6%"
+      },
+      "ncloc": {
+        "val": 3843.0,
+        "fval": "3,843"
+      }
+    }
+  },
+  {
+    "key": "org.codehaus.sonar-plugins:sonar-web-plugin",
+    "name": "SonarQube Web Plugin",
+    "longName": "SonarQube Web Plugin",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 94.4,
+        "fval": "94.4%"
+      },
+      "ncloc": {
+        "val": 3816.0,
+        "fval": "3,816"
+      }
+    }
+  },
+  {
+    "key": "org.codehaus.sonar-plugins.python:python",
+    "name": "Python",
+    "longName": "Python",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 91.5,
+        "fval": "91.5%"
+      },
+      "ncloc": {
+        "val": 3631.0,
+        "fval": "3,631"
+      }
+    }
+  },
+  {
+    "key": "com.sonarsource.abap:abap",
+    "name": "SonarSource :: ABAP",
+    "longName": "SonarSource :: ABAP",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 95.1,
+        "fval": "95.1%"
+      },
+      "ncloc": {
+        "val": 3603.0,
+        "fval": "3,603"
+      }
+    }
+  },
+  {
+    "key": "com.sonarsource.pli:pli",
+    "name": "SonarSource :: PL/I",
+    "longName": "SonarSource :: PL/I",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 95.7,
+        "fval": "95.7%"
+      },
+      "ncloc": {
+        "val": 3387.0,
+        "fval": "3,387"
+      }
+    }
+  },
+  {
+    "key": "org.codehaus.sonar.sslr-squid-bridge:sslr-squid-bridge",
+    "name": "SonarSource :: Language Recognizer :: Squid Bridge",
+    "longName": "SonarSource :: Language Recognizer :: Squid Bridge",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 85.2,
+        "fval": "85.2%"
+      },
+      "ncloc": {
+        "val": 3250.0,
+        "fval": "3,250"
+      }
+    }
+  },
+  {
+    "key": "org.codehaus.sonar:sonar-update-center",
+    "name": "Sonar :: Update Center",
+    "longName": "Sonar :: Update Center",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 89.0,
+        "fval": "89.0%"
+      },
+      "ncloc": {
+        "val": 3192.0,
+        "fval": "3,192"
+      }
+    }
+  },
+  {
+    "key": "com.sonarsource.infra:jobs-creator",
+    "name": "Infra Jenkins Job Creator",
+    "longName": "Infra Jenkins Job Creator",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 50.6,
+        "fval": "50.6%"
+      },
+      "ncloc": {
+        "val": 2757.0,
+        "fval": "2,757"
+      }
+    }
+  },
+  {
+    "key": "com.sonarsource:sonar-dev-cockpit-plugin",
+    "name": "SonarSource :: Developer Cockpit",
+    "longName": "SonarSource :: Developer Cockpit",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 92.7,
+        "fval": "92.7%"
+      },
+      "ncloc": {
+        "val": 2692.0,
+        "fval": "2,692"
+      }
+    }
+  },
+  {
+    "key": "org.codehaus.sonar-ide.intellij:sonar-intellij-plugin",
+    "name": "SonarQube Integration for IntelliJ",
+    "longName": "SonarQube Integration for IntelliJ",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 0.2,
+        "fval": "0.2%"
+      },
+      "ncloc": {
+        "val": 2679.0,
+        "fval": "2,679"
+      }
+    }
+  },
+  {
+    "key": "com.sonarsource.views:sonar-views-plugin",
+    "name": "SonarSource :: Views",
+    "longName": "SonarSource :: Views",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 94.6,
+        "fval": "94.6%"
+      },
+      "ncloc": {
+        "val": 2630.0,
+        "fval": "2,630"
+      }
+    }
+  },
+  {
+    "key": "org.codehaus.sonar-plugins.css:css",
+    "name": "CSS",
+    "longName": "CSS",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 81.9,
+        "fval": "81.9%"
+      },
+      "ncloc": {
+        "val": 2485.0,
+        "fval": "2,485"
+      }
+    }
+  },
+  {
+    "key": "org.codehaus.sonar-plugins.xml:xml",
+    "name": "XML",
+    "longName": "XML",
+    "qualifier": "TRK",
+    "measures": {
+      "coverage": {
+        "val": 83.8,
+        "fval": "83.8%"
+      },
+      "ncloc": {
+        "val": 2122.0,
+        "fval": "2,122"
+      }
+    }
+  }
+], "maxResultsReached": false, "paging": {
+  "page": 1,
+  "pages": 3,
+  "pageSize": 30,
+  "total": 73
+}}
diff --git a/server/sonar-web/src/test/lib.js b/server/sonar-web/src/test/lib.js
new file mode 100644 (file)
index 0000000..ed8b467
--- /dev/null
@@ -0,0 +1,180 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+/* globals casper: false, exports: false */
+
+var fs = require('fs');
+
+var getPort = function () {
+  return casper.cli.options.port;
+};
+
+var BASE_URL = 'http://localhost:' + getPort() + '/pages/',
+    BASE_ROOT_URL = 'http://localhost:' + getPort(),
+    WINDOW_WIDTH = 1200,
+    WINDOW_HEIGHT = 800;
+
+
+exports.initMessages = function () {
+  if (casper.cli.options.verbose) {
+    // Dump log messages
+    casper.removeAllListeners('remote.message');
+    casper.on('remote.message', function (message) {
+      this.echo('Log: ' + message, 'LOG');
+    });
+
+    // Dump uncaught errors
+    casper.removeAllListeners('page.error');
+    casper.on('page.error', function (msg) {
+      this.echo('Error: ' + msg, 'ERROR');
+    });
+  }
+};
+
+
+exports.changeWorkingDirectory = function (dir) {
+  var commandLineArgs = require('system').args;
+  // Since Casper has control, the invoked script is deep in the argument stack
+  // commandLineArgs = casper/bin/bootstrap.js,--casper-path=.../casperjs,--cli,--test,[file(s) under test],[options]
+  var currentFile = commandLineArgs[4];
+  var curFilePath = fs.absolute(currentFile).split(fs.separator);
+  if (curFilePath.length > 1) {
+    curFilePath.pop(); // test name
+    curFilePath.pop(); // "js" dir
+    curFilePath.push('json');
+    curFilePath.push(dir);
+    fs.changeWorkingDirectory(curFilePath.join(fs.separator));
+  }
+};
+
+
+exports.configureCasper = function () {
+  casper.options.waitTimeout = 30000;
+};
+
+
+exports.testName = function () {
+  var head = Array.prototype.slice.call(arguments, 0);
+  return function () {
+    var tail = Array.prototype.slice.call(arguments, 0),
+        body = head.concat(tail);
+    return body.join(' :: ');
+  };
+};
+
+
+var mockRequest = function (url, response, options) {
+  return casper.evaluate(function (url, response, options) {
+    return jQuery.mockjax(_.extend({ url: url, responseText: response}, options));
+  }, url, response, options || {});
+};
+exports.mockRequest = mockRequest;
+
+
+exports.mockRequestFromFile = function (url, fileName, options) {
+  var response = fs.read(fileName);
+  return mockRequest(url, response, options);
+};
+
+
+exports.clearRequestMocks = function () {
+  casper.evaluate(function() {
+    jQuery.mockjaxClear();
+  });
+};
+
+
+exports.clearRequestMock = function (mockId) {
+  casper.evaluate(function(mockId) {
+    jQuery.mockjaxClear(mockId);
+  }, mockId);
+};
+
+
+function patchWithTimestamp(url) {
+  var t = Date.now(),
+      hashStart = url.indexOf('#'),
+      hash =  hashStart !== -1 ? url.substr(hashStart) : '',
+      base = hashStart !== -1 ? url.substr(0, hashStart) : url;
+  return base + '?' + t + hash;
+}
+
+
+exports.buildUrl = function (urlTail) {
+  return patchWithTimestamp(BASE_URL + urlTail);
+};
+
+
+exports.buildRootUrl = function (urlTail) {
+  return patchWithTimestamp(BASE_ROOT_URL + urlTail);
+};
+
+
+exports.setDefaultViewport = function () {
+  casper.viewport(WINDOW_WIDTH, WINDOW_HEIGHT);
+};
+
+
+exports.capture = function (fileName) {
+  if (!fileName) {
+    fileName = 'screenshot.png';
+  }
+  casper.capture(fileName, { top: 0, left: 0, width: WINDOW_WIDTH, height: WINDOW_HEIGHT });
+};
+
+
+exports.waitForElementCount = function (selector, count, callback) {
+  return casper.waitFor(function () {
+    return casper.evaluate(function (selector, count) {
+      return document.querySelectorAll(selector).length === count;
+    }, selector, count);
+  }, callback);
+};
+
+exports.assertLinkHref = function assertElementCount(selector, href, message) {
+  var linkHref = this.casper.evaluate(function(selector) {
+      return document.querySelector(selector);
+  }, selector);
+  return this.assert(elementCount === count, message, {
+    type: "assertElementCount",
+    standard: f('%d element%s matching selector "%s" found',
+        count,
+        count > 1 ? 's' : '',
+        selector),
+    values: {
+      selector: selector,
+      expected: count,
+      obtained: elementCount
+    }
+  });
+};
+
+
+exports.sendCoverage = function () {
+  return casper.evaluate(function () {
+    console.log(Object.keys(window.__coverage__));
+    jQuery.ajax({
+      type: 'POST',
+      url: '/coverage/client',
+      data: JSON.stringify(window.__coverage__),
+      processData: false,
+      contentType: 'application/json; charset=UTF-8'
+    });
+  });
+};
diff --git a/server/sonar-web/src/test/server-coverage.js b/server/sonar-web/src/test/server-coverage.js
new file mode 100644 (file)
index 0000000..99394a2
--- /dev/null
@@ -0,0 +1,30 @@
+var express = require('express'),
+    path = require('path'),
+    errorhandler = require('errorhandler'),
+    serveStatic = require('serve-static'),
+    im = require('istanbul-middleware');
+
+var staticPath = path.join(__dirname, '../main/webapp');
+im.hookLoader(staticPath);
+
+var app = express();
+
+app.set('views', __dirname + '/views');
+app.set('view engine', 'jade');
+
+app.use(errorhandler({ dumpExceptions: true, showStack: true }));
+
+app.use(im.createClientHandler(staticPath));
+app.use('/coverage', im.createHandler());
+app.use('/', serveStatic(staticPath));
+
+app.get('/pages/:page', function (req, res) {
+  res.render(req.param('page'));
+});
+
+// Get the port from environment variables
+var port = process.env.PORT || 8000;
+
+app.listen(port);
+
+console.log('Server running on port %d', port);
diff --git a/server/sonar-web/src/test/server.js b/server/sonar-web/src/test/server.js
new file mode 100644 (file)
index 0000000..fc0caa7
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+var express = require('express'),
+    path = require('path'),
+    errorhandler = require('errorhandler'),
+    serveStatic = require('serve-static');
+
+var staticPath = path.join(__dirname, '../main/webapp');
+
+var app = express();
+
+app.set('views', __dirname + '/views');
+app.set('view engine', 'jade');
+
+app.use(errorhandler({ dumpExceptions: true, showStack: true }));
+
+app.use('/', serveStatic(staticPath));
+
+app.get('/pages/:page', function (req, res) {
+  res.render(req.param('page'));
+});
+
+// Get the port from environment variables
+var port = process.env.PORT || 8000;
+
+app.listen(port);
+
+console.log('Server running on port %d', port);
diff --git a/server/sonar-web/src/test/views/coding-rules.jade b/server/sonar-web/src/test/views/coding-rules.jade
new file mode 100644 (file)
index 0000000..f5c7ef3
--- /dev/null
@@ -0,0 +1,10 @@
+extends layouts/main
+
+block header
+  script(src='../js/require.js')
+  script.
+    window.waitForMocks('/js/coding-rules/app.js');
+
+block body
+  #content
+    .coding-rules.search-navigator
diff --git a/server/sonar-web/src/test/views/design.jade b/server/sonar-web/src/test/views/design.jade
new file mode 100644 (file)
index 0000000..ab71d7a
--- /dev/null
@@ -0,0 +1,13 @@
+extends layouts/main
+
+block header
+  script(src='../js/require.js')
+  script.
+    window.waitForMocks('/js/design/app.js');
+
+block body
+  #container
+    #project-design: i.spinner
+
+  script.
+    window.resourceKey = 'com.maif.sonar:maif-cobol-plugin';
diff --git a/server/sonar-web/src/test/views/issues.jade b/server/sonar-web/src/test/views/issues.jade
new file mode 100644 (file)
index 0000000..4a9ba14
--- /dev/null
@@ -0,0 +1,10 @@
+extends layouts/main
+
+block header
+  script(src='../js/require.js')
+  script.
+    window.waitForMocks('/js/issues/app-new.js');
+
+block body
+  #content
+    .issues.search-navigator
diff --git a/server/sonar-web/src/test/views/layouts/main.jade b/server/sonar-web/src/test/views/layouts/main.jade
new file mode 100644 (file)
index 0000000..59aafec
--- /dev/null
@@ -0,0 +1,67 @@
+html
+  head
+    meta(http-equiv='Content-Type', content='text/html; charset=UTF-8')
+    link(href='/css/sonar.css', rel='stylesheet', media='all')
+
+    script(src='/js/translate.js')
+    script(src='/js/third-party/jquery.js')
+    script(src='/js/third-party/jquery-ui.js')
+    script(src='/js/third-party/d3.js')
+    script(src='/js/third-party/latinize.js')
+    script(src='/js/third-party/underscore.js')
+    script(src='/js/third-party/backbone.js')
+    script(src='/js/third-party/backbone.marionette.js')
+    script(src='/js/third-party/handlebars.js')
+    script(src='/js/third-party/underscore.js')
+    script(src='/js/third-party/select2.js')
+    script(src='/js/third-party/keymaster.js')
+    script(src='/js/third-party/moment.js')
+    script(src='/js/third-party/numeral.js')
+    script(src='/js/third-party/numeral-languages.js')
+    script(src='/js/third-party/bootstrap/tooltip.js')
+    script(src='/js/third-party/bootstrap/dropdown.js')
+    script(src='/js/select2-jquery-ui-fix.js')
+    script(src='/js/widgets/base.js')
+    script(src='/js/widgets/widget.js')
+    script(src='/js/widgets/bubble-chart.js')
+    script(src='/js/widgets/timeline.js')
+    script(src='/js/widgets/stack-area.js')
+    script(src='/js/widgets/pie-chart.js')
+    script(src='/js/widgets/histogram.js')
+    script(src='/js/widgets/word-cloud.js')
+    script(src='/js/widgets/tag-cloud.js')
+    script(src='/js/widgets/treemap.js')
+    script(src='/js/graphics/pie-chart.js')
+    script(src='/js/graphics/timeline.js')
+    script(src='/js/graphics/barchart.js')
+    script(src='/js/sortable.js')
+    script(src='/js/common/inputs.js')
+    script(src='/js/common/dialogs.js')
+    script(src='/js/common/processes.js')
+    script(src='/js/common/jquery-isolated-scroll.js')
+    script(src='/js/common/handlebars-extensions.js')
+    script(src='/js/application.js')
+    script(src='/js/csv.js')
+    script(src='/js/dashboard.js')
+    script(src='/js/recent-history.js')
+
+    script(src='/js/third-party/jquery.mockjax.js')
+    script.
+      var baseUrl = '';
+      var $j = jQuery.noConflict();
+      window.suppressTranslationWarnings = true;
+      jQuery.mockjaxSettings.contentType = 'text/json';
+      jQuery.mockjaxSettings.responseTime = 50;
+      $j(document).ready(function () { $j('.open-modal').modal(); });
+      window.waitForMocks = function (app) {
+        var x = setInterval(function () {
+          jQuery.get('/api/l10n/index').done(function () {
+            clearInterval(x);
+            require([app]);
+          });
+        }, 500);
+      }
+    block header
+  body
+    #body
+      block body
diff --git a/server/sonar-web/src/test/views/quality-gates.jade b/server/sonar-web/src/test/views/quality-gates.jade
new file mode 100644 (file)
index 0000000..ccee40b
--- /dev/null
@@ -0,0 +1,10 @@
+extends layouts/main
+
+block header
+  script(src='../js/require.js')
+  script.
+    window.waitForMocks('/js/quality-gate/app.js');
+
+block body
+  #content
+    .search-navigator#quality-gates
diff --git a/server/sonar-web/src/test/views/source-viewer.jade b/server/sonar-web/src/test/views/source-viewer.jade
new file mode 100644 (file)
index 0000000..9e2c62c
--- /dev/null
@@ -0,0 +1,15 @@
+extends layouts/main
+
+block header
+  script(src='../js/require.js')
+  script.
+    window.waitForMocks('/js/source-viewer/app.js');
+
+block body
+  #source-viewer
+
+  script.
+    window.file = {
+      uuid: '',
+      key: ''
+    };
diff --git a/server/sonar-web/src/test/views/treemap.jade b/server/sonar-web/src/test/views/treemap.jade
new file mode 100644 (file)
index 0000000..09dc4fb
--- /dev/null
@@ -0,0 +1,4 @@
+extends layouts/main
+
+block body
+  #container