diff options
31 files changed, 133 insertions, 680 deletions
diff --git a/sonar-batch/src/test/java/org/sonar/batch/rule/RulesProviderTest.java b/sonar-batch/src/test/java/org/sonar/batch/rule/RulesProviderTest.java index 42ab22fed38..da1ad682f1a 100644 --- a/sonar-batch/src/test/java/org/sonar/batch/rule/RulesProviderTest.java +++ b/sonar-batch/src/test/java/org/sonar/batch/rule/RulesProviderTest.java @@ -36,11 +36,13 @@ import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.Severity; import org.sonar.api.utils.Duration; import org.sonar.api.utils.Durations; +import org.sonar.core.cluster.WorkQueue; import org.sonar.core.persistence.AbstractDaoTestCase; import org.sonar.core.rule.RuleDao; import static org.fest.assertions.Assertions.assertThat; import static org.fest.assertions.Fail.fail; +import static org.mockito.Mockito.mock; @RunWith(MockitoJUnitRunner.class) public class RulesProviderTest extends AbstractDaoTestCase { @@ -80,7 +82,8 @@ public class RulesProviderTest extends AbstractDaoTestCase { .setParentId(102)); durations = new Durations(new Settings().setProperty("sonar.technicalDebt.hoursInDay", 8), null); - ruleDao = new RuleDao(getMyBatis()); + WorkQueue queue = mock(WorkQueue.class); + ruleDao = new RuleDao(getMyBatis(),queue); provider = new RulesProvider(); } diff --git a/sonar-server/src/main/java/org/sonar/server/cluster/LocalNonBlockingWorkQueue.java b/sonar-core/src/main/java/org/sonar/core/cluster/LocalNonBlockingWorkQueue.java index 3ee3ed7777c..25b10c399ec 100644 --- a/sonar-server/src/main/java/org/sonar/server/cluster/LocalNonBlockingWorkQueue.java +++ b/sonar-core/src/main/java/org/sonar/core/cluster/LocalNonBlockingWorkQueue.java @@ -17,7 +17,9 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.cluster; +package org.sonar.core.cluster; + +import org.sonar.core.cluster.WorkQueue; import java.io.Serializable; import java.util.Map; diff --git a/sonar-server/src/main/java/org/sonar/server/cluster/WorkQueue.java b/sonar-core/src/main/java/org/sonar/core/cluster/WorkQueue.java index 79c3b520dc9..e3790f642b9 100644 --- a/sonar-server/src/main/java/org/sonar/server/cluster/WorkQueue.java +++ b/sonar-core/src/main/java/org/sonar/core/cluster/WorkQueue.java @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.cluster; +package org.sonar.core.cluster; import java.io.Serializable; diff --git a/sonar-server/src/main/java/org/sonar/server/db/BaseDao.java b/sonar-core/src/main/java/org/sonar/core/db/BaseDao.java index 21a2270ef63..e10bbf6cfdb 100644 --- a/sonar-server/src/main/java/org/sonar/server/db/BaseDao.java +++ b/sonar-core/src/main/java/org/sonar/core/db/BaseDao.java @@ -17,40 +17,47 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.db; +package org.sonar.core.db; import org.apache.ibatis.session.SqlSession; +import org.sonar.core.cluster.WorkQueue; import org.sonar.core.persistence.MyBatis; -import org.sonar.server.cluster.WorkQueue; import java.io.Serializable; -public abstract class BaseDao<E extends Dto<K>, K extends Serializable> implements Dao<E, K> { +public abstract class BaseDao<E extends Dto<K>, K extends Serializable, M extends Dao<E,K>> + implements Dao<E, K> { - private MyBatis myBatis; - private WorkQueue workQueue; + protected MyBatis mybatis; + private WorkQueue queue; protected BaseDao(WorkQueue workQueue, MyBatis myBatis) { - this.myBatis = myBatis; - this.workQueue = workQueue; + this.mybatis = myBatis; + this.queue = workQueue; } protected abstract String getIndexName(); + protected abstract Class<M> getMapperClass(); + + private M getMapper(SqlSession session) { + return session.getMapper(getMapperClass()); + } + protected void enqueInsert(K key) { - this.workQueue.enqueInsert(this.getIndexName(), key); + this.queue.enqueInsert(this.getIndexName(), key); } protected void enqueUpdate(K key) { - this.workQueue.enqueUpdate(this.getIndexName(), key); + this.queue.enqueUpdate(this.getIndexName(), key); } protected void enqueDelete(K key) { - this.workQueue.enqueDelete(this.getIndexName(), key); + this.queue.enqueDelete(this.getIndexName(), key); } protected MyBatis getMyBatis(){ - return this.myBatis; + return this.mybatis; } @Override @@ -58,36 +65,32 @@ public abstract class BaseDao<E extends Dto<K>, K extends Serializable> implemen public E getByKey(K key) { E item = null; SqlSession session = getMyBatis().openSession(); - item = (E) session.getMapper(this.getClass()).getByKey(key); + item = getMapper(session).getByKey(key); MyBatis.closeQuietly(session); return item; } @Override - public E update(E item) { + public void update(E item) { SqlSession session = getMyBatis().openSession(); - E result = null; try { - result = (E) session.getMapper(this.getClass()).update(item); + getMapper(session).update(item); session.commit(); - } finally { this.enqueUpdate(item.getKey()); + } finally { MyBatis.closeQuietly(session); - return result; } } @Override - public E insert(E item) { + public void insert(E item) { SqlSession session = getMyBatis().openSession(); - E result = null; try { - result = (E) session.getMapper(this.getClass()).insert(item); + getMapper(session).insert(item); session.commit(); + this.enqueInsert(item.getKey()); } finally { MyBatis.closeQuietly(session); - this.enqueInsert(item.getKey()); - return result; } } @@ -100,7 +103,7 @@ public abstract class BaseDao<E extends Dto<K>, K extends Serializable> implemen public void deleteByKey(K key) { SqlSession session = getMyBatis().openSession(); try { - session.getMapper(this.getClass()).deleteByKey(key); + getMapper(session).deleteByKey(key); session.commit(); } finally { MyBatis.closeQuietly(session); diff --git a/sonar-server/src/main/java/org/sonar/server/db/Dao.java b/sonar-core/src/main/java/org/sonar/core/db/Dao.java index e3fad2e59f5..458d2b703e2 100644 --- a/sonar-server/src/main/java/org/sonar/server/db/Dao.java +++ b/sonar-core/src/main/java/org/sonar/core/db/Dao.java @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.db; +package org.sonar.core.db; import java.io.Serializable; import java.util.Collection; @@ -26,9 +26,9 @@ public interface Dao<E extends Dto<K>, K extends Serializable> { public E getByKey(K key); - public E update(E item); + public void update(E item); - public E insert(E item); + public void insert(E item); public void delete(E item); diff --git a/sonar-server/src/main/java/org/sonar/server/db/Dto.java b/sonar-core/src/main/java/org/sonar/core/db/Dto.java index 483a276f175..2ac53d71222 100644 --- a/sonar-server/src/main/java/org/sonar/server/db/Dto.java +++ b/sonar-core/src/main/java/org/sonar/core/db/Dto.java @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.db; +package org.sonar.core.db; import java.io.Serializable; diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/RuleConstants.java b/sonar-core/src/main/java/org/sonar/core/rule/RuleConstants.java index dffd18d7e31..636a6dcd67c 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/RuleConstants.java +++ b/sonar-core/src/main/java/org/sonar/core/rule/RuleConstants.java @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.rule2; +package org.sonar.core.rule; public interface RuleConstants { diff --git a/sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java b/sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java index 3b5677fc9b9..1c87168d8b5 100644 --- a/sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java +++ b/sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java @@ -24,6 +24,8 @@ import org.apache.ibatis.session.SqlSession; import org.sonar.api.BatchComponent; import org.sonar.api.ServerComponent; import org.sonar.api.rule.RuleKey; +import org.sonar.core.cluster.WorkQueue; +import org.sonar.core.db.BaseDao; import org.sonar.core.persistence.MyBatis; import javax.annotation.CheckForNull; @@ -33,12 +35,22 @@ import java.util.List; import static com.google.common.collect.Lists.newArrayList; -public class RuleDao implements BatchComponent, ServerComponent { +public class RuleDao extends BaseDao<RuleDto, RuleKey, RuleMapper> + implements BatchComponent, ServerComponent { - private MyBatis mybatis; - public RuleDao(MyBatis mybatis) { - this.mybatis = mybatis; + public RuleDao(MyBatis mybatis, WorkQueue queue) { + super(queue, mybatis); + } + + @Override + protected String getIndexName() { + return RuleConstants.INDEX_NAME; + } + + @Override + protected Class<RuleMapper> getMapperClass() { + return RuleMapper.class; } public List<RuleDto> selectAll() { @@ -131,29 +143,18 @@ public class RuleDao implements BatchComponent, ServerComponent { getMapper(session).update(rule); } - public void update(RuleDto rule) { - SqlSession session = mybatis.openSession(); - try { - update(rule, session); - session.commit(); - } finally { - MyBatis.closeQuietly(session); - } - } +// public RuleDto update(RuleDto rule) { +// return super.update(rule); +// } +// +// public RuleDto insert(RuleDto ruleToInsert) { +// return super.insert(ruleToInsert); +// } public void insert(RuleDto ruleToInsert, SqlSession session) { getMapper(session).insert(ruleToInsert); } - public void insert(RuleDto ruleToInsert) { - SqlSession session = mybatis.openSession(); - try { - insert(ruleToInsert, session); - session.commit(); - } finally { - MyBatis.closeQuietly(session); - } - } public void insert(Collection<RuleDto> rules) { SqlSession session = mybatis.openBatchSession(); @@ -307,4 +308,10 @@ public class RuleDao implements BatchComponent, ServerComponent { } return dtos; } + + @Override + public Collection<RuleKey> insertsSince(Long timestamp) { + // TODO Auto-generated method stub + return null; + } } diff --git a/sonar-core/src/main/java/org/sonar/core/rule/RuleDto.java b/sonar-core/src/main/java/org/sonar/core/rule/RuleDto.java index 8bb8f4e38b5..78dd41c99a5 100644 --- a/sonar-core/src/main/java/org/sonar/core/rule/RuleDto.java +++ b/sonar-core/src/main/java/org/sonar/core/rule/RuleDto.java @@ -19,6 +19,9 @@ */ package org.sonar.core.rule; +import org.sonar.api.rule.RuleKey; + +import org.sonar.core.db.Dto; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ReflectionToStringBuilder; @@ -30,7 +33,7 @@ import javax.annotation.Nullable; import java.util.Date; -public final class RuleDto { +public final class RuleDto implements Dto<RuleKey>{ public static final Integer DISABLED_CHARACTERISTIC_ID = -1; @@ -61,6 +64,12 @@ public final class RuleDto { private Date createdAt; private Date updatedAt; + @Override + public RuleKey getKey() { + return RuleKey.of(this.getRepositoryKey(), this.getRuleKey()); + } + + @Deprecated public Integer getId() { return id; } diff --git a/sonar-core/src/main/java/org/sonar/core/rule/RuleMapper.java b/sonar-core/src/main/java/org/sonar/core/rule/RuleMapper.java index e31b14e04aa..536071017eb 100644 --- a/sonar-core/src/main/java/org/sonar/core/rule/RuleMapper.java +++ b/sonar-core/src/main/java/org/sonar/core/rule/RuleMapper.java @@ -21,10 +21,12 @@ package org.sonar.core.rule; import org.apache.ibatis.annotations.Param; import org.sonar.api.rule.RuleKey; +import org.sonar.core.db.Dao; import java.util.List; -public interface RuleMapper { +public interface RuleMapper extends Dao<RuleDto, RuleKey>{ + List<RuleDto> selectAll(); List<RuleDto> selectEnablesAndNonManual(); diff --git a/sonar-server/src/test/java/org/sonar/server/cluster/LocalNonBlockingWorkQueueTest.java b/sonar-core/src/test/java/org/sonar/core/cluster/LocalNonBlockingWorkQueueTest.java index 117db387a9a..c352f14cb44 100644 --- a/sonar-server/src/test/java/org/sonar/server/cluster/LocalNonBlockingWorkQueueTest.java +++ b/sonar-core/src/test/java/org/sonar/core/cluster/LocalNonBlockingWorkQueueTest.java @@ -17,7 +17,9 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.cluster; +package org.sonar.core.cluster; + +import org.sonar.core.cluster.LocalNonBlockingWorkQueue; import org.junit.Test; diff --git a/sonar-core/src/test/java/org/sonar/core/rule/RuleDaoTest.java b/sonar-core/src/test/java/org/sonar/core/rule/RuleDaoTest.java index 6386962c054..152447530c9 100644 --- a/sonar-core/src/test/java/org/sonar/core/rule/RuleDaoTest.java +++ b/sonar-core/src/test/java/org/sonar/core/rule/RuleDaoTest.java @@ -30,12 +30,14 @@ import org.sonar.api.rule.Severity; import org.sonar.api.rules.Rule; import org.sonar.api.utils.DateUtils; import org.sonar.check.Cardinality; +import org.sonar.core.cluster.WorkQueue; import org.sonar.core.persistence.AbstractDaoTestCase; import java.util.List; import static com.google.common.collect.Lists.newArrayList; import static org.fest.assertions.Assertions.assertThat; +import static org.mockito.Mockito.mock; public class RuleDaoTest extends AbstractDaoTestCase { @@ -43,7 +45,8 @@ public class RuleDaoTest extends AbstractDaoTestCase { @Before public void createDao() throws Exception { - dao = new RuleDao(getMyBatis()); + WorkQueue queue = mock(WorkQueue.class); + dao = new RuleDao(getMyBatis(), queue); } @Test diff --git a/sonar-server/src/main/coffee/component-viewer/coverage-popup.coffee b/sonar-server/src/main/coffee/component-viewer/coverage-popup.coffee index 63d38c8b702..7623eebcd57 100644 --- a/sonar-server/src/main/coffee/component-viewer/coverage-popup.coffee +++ b/sonar-server/src/main/coffee/component-viewer/coverage-popup.coffee @@ -1,17 +1,16 @@ define [ 'backbone.marionette' 'templates/component-viewer' - 'component-viewer/popup' ], ( Marionette Templates - Popup ) -> $ = jQuery - class CoveragePopupView extends Popup + class CoveragePopupView extends Marionette.ItemView + className: 'component-viewer-popup' template: Templates['coveragePopup'] @@ -19,6 +18,17 @@ define [ 'click a[data-key]': 'goToFile' + onRender: -> + @$el.detach().appendTo $('body') + @$el.css + top: @options.triggerEl.offset().top + left: @options.triggerEl.offset().left + @options.triggerEl.outerWidth() + + $('body').on 'click.coverage-popup', => + $('body').off 'click.coverage-popup' + @close() + + goToFile: (e) -> key = $(e.currentTarget).data 'key' test = $(e.currentTarget).data 'test' diff --git a/sonar-server/src/main/coffee/component-viewer/duplication-popup.coffee b/sonar-server/src/main/coffee/component-viewer/duplication-popup.coffee deleted file mode 100644 index 5a220687339..00000000000 --- a/sonar-server/src/main/coffee/component-viewer/duplication-popup.coffee +++ /dev/null @@ -1,36 +0,0 @@ -define [ - 'backbone.marionette' - 'templates/component-viewer' - 'component-viewer/popup' -], ( - Marionette - Templates - Popup -) -> - - $ = jQuery - - - class DuplicationPopupView extends Popup - template: Templates['duplicationPopup'] - - - events: - 'click a[data-key]': 'goToFile' - - - goToFile: (e) -> - key = $(e.currentTarget).data 'key' - @options.main.addTransition key, 'duplication', [ - { - key: 'org.codehaus.sonar:sonar-plugin-api:src/test/java/org/sonar/api/resources/ResourceTypeTree.java' - name: 'ResourceTypeTree.java' - active: true - } - { - key: 'org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/phases/PhaseExecutor.java' - name: 'PhaseExecutor.java' - active: false - } - ], [] - diff --git a/sonar-server/src/main/coffee/component-viewer/main.coffee b/sonar-server/src/main/coffee/component-viewer/main.coffee index 0f540618849..5601a7b88d1 100644 --- a/sonar-server/src/main/coffee/component-viewer/main.coffee +++ b/sonar-server/src/main/coffee/component-viewer/main.coffee @@ -25,8 +25,6 @@ define [ ISSUES_METRIC_LIST = 'blocker_violations,critical_violations,major_violations,minor_violations,info_violations' - DUPLICATIONS_METRIC_LIST = 'duplicated_lines_density,duplicated_blocks,duplicated_files,duplicated_lines' - class ComponentViewer extends Marionette.Layout @@ -54,7 +52,7 @@ define [ @settings = new Backbone.Model issues: false coverage: false - duplications: true + duplications: false scm: false workspace: false @@ -81,10 +79,6 @@ define [ $.get API_RESOURCES, resource: key, metrics: ISSUES_METRIC_LIST - requestComponentDuplications: (key) -> - $.get API_RESOURCES, resource: key, metrics: DUPLICATIONS_METRIC_LIST - - requestSource: (key) -> $.get API_SOURCES, resource: key, (data) => @source.set source: data[0] @@ -93,15 +87,15 @@ define [ extractCoverage: (data) -> toObj = (d) -> q = {} - d?.split(';').forEach (item) -> + d.split(';').forEach (item) -> tokens = item.split '=' q[tokens[0]] = tokens[1] q msr = data[0].msr - coverage = toObj _.findWhere(msr, key: 'coverage_line_hits_data')?.data - coverageConditions = toObj _.findWhere(msr, key: 'covered_conditions_by_line')?.data - conditions = toObj _.findWhere(msr, key: 'conditions_by_line')?.data + coverage = toObj _.findWhere(msr, key: 'coverage_line_hits_data').data + coverageConditions = toObj _.findWhere(msr, key: 'covered_conditions_by_line').data + conditions = toObj _.findWhere(msr, key: 'conditions_by_line').data @source.set coverage: coverage coverageConditions: coverageConditions @@ -111,18 +105,6 @@ define [ @component.set 'coverageMeasures', coverageMeasures - extractDuplications: (data) -> - @source.set - duplications: [ - { from: 18, count: 33 } - { from: 24, count: 23 } - { from: 62, count: 33 } - ] - duplicationsMeasures = _.sortBy data[0].msr, (item) -> -(item.key == 'duplicated_lines_density') - console.log data - @component.set 'duplicationsMeasures', duplicationsMeasures - - extractIssues: (data) -> issuesMeasures = {} data[0].msr.forEach (q) -> @@ -145,7 +127,6 @@ define [ model.set 'component': @component.toJSON() @render() if @settings.get('coverage') then @showCoverage() else @hideCoverage() - if @settings.get('duplications') then @showDuplications() else @hideDuplications() showCoverage: -> @@ -191,21 +172,6 @@ define [ @sourceView.render() - showDuplications: -> - @settings.set 'duplications', true - unless @source.has 'duplications' - @requestComponentDuplications(@key).done (data) => - @extractDuplications data - @sourceView.render() - else - @sourceView.render() - - - hideDuplications: -> - @settings.set 'duplications', false - @sourceView.render() - - addTransition: (key, transition, optionsForCurrent, options) -> if optionsForCurrent? last = @workspace.at(@workspace.length - 1) diff --git a/sonar-server/src/main/coffee/component-viewer/popup.coffee b/sonar-server/src/main/coffee/component-viewer/popup.coffee deleted file mode 100644 index bd806802b06..00000000000 --- a/sonar-server/src/main/coffee/component-viewer/popup.coffee +++ /dev/null @@ -1,22 +0,0 @@ -define [ - 'backbone.marionette' -], ( - Marionette -) -> - - $ = jQuery - - - class CoveragePopupView extends Marionette.ItemView - className: 'component-viewer-popup' - - - onRender: -> - @$el.detach().appendTo $('body') - @$el.css - top: @options.triggerEl.offset().top - left: @options.triggerEl.offset().left + @options.triggerEl.outerWidth() - - $('body').on 'click.coverage-popup', => - $('body').off 'click.coverage-popup' - @close()
\ No newline at end of file diff --git a/sonar-server/src/main/coffee/component-viewer/source.coffee b/sonar-server/src/main/coffee/component-viewer/source.coffee index e54ec45efd8..74b37753166 100644 --- a/sonar-server/src/main/coffee/component-viewer/source.coffee +++ b/sonar-server/src/main/coffee/component-viewer/source.coffee @@ -2,7 +2,6 @@ define [ 'backbone.marionette' 'templates/component-viewer' 'component-viewer/coverage-popup' - 'component-viewer/duplication-popup' 'issues/issue-view' 'issues/models/issue' 'common/handlebars-extensions' @@ -10,7 +9,6 @@ define [ Marionette Templates CoveragePopupView - DuplicationPopupView IssueView Issue ) -> @@ -26,14 +24,9 @@ define [ 'click .js-toggle-settings': 'toggleSettings' 'click .js-toggle-measures': 'toggleMeasures' 'change #source-coverage': 'toggleCoverage' - 'change #source-duplications': 'toggleDuplications' 'change #source-workspace': 'toggleWorkspace' 'click .coverage-tests': 'showCoveragePopup' - 'click .duplication-exists': 'showDuplicationPopup' - 'mouseenter .duplication-exists': 'duplicationMouseEnter' - 'mouseleave .duplication-exists': 'duplicationMouseLeave' - onRender: -> @delegateEvents() @@ -71,12 +64,6 @@ define [ if active then @options.main.showCoverage() else @options.main.hideCoverage() - toggleDuplications: (e) -> - active = $(e.currentTarget).is ':checked' - @showSettings = true - if active then @options.main.showDuplications() else @options.main.hideDuplications() - - toggleWorkspace: (e) -> active = $(e.currentTarget).is ':checked' @showSettings = true @@ -92,36 +79,11 @@ define [ popup.render() - showDuplicationPopup: (e) -> - e.stopPropagation() - $('body').click() - popup = new DuplicationPopupView - triggerEl: $(e.currentTarget) - main: @options.main - popup.render() - - - duplicationMouseEnter: (e) -> - @toggleDuplicationHover e, true - - - duplicationMouseLeave: (e) -> - @toggleDuplicationHover e, false - - - toggleDuplicationHover: (e, add) -> - bar = $(e.currentTarget) - index = bar.parent().children('.duplication').index bar - @$('.duplications').each -> - $(".duplication", @).eq(index).filter('.duplication-exists').toggleClass 'duplication-hover', add - - prepareSource: -> source = @model.get 'source' coverage = @model.get 'coverage' coverageConditions = @model.get 'coverageConditions' conditions = @model.get 'conditions' - duplications = @model.get('duplications') || [] _.map source, (code, line) -> lineCoverage = coverage? && coverage[line]? && coverage[line] lineCoverage = +lineCoverage if _.isString lineCoverage @@ -141,9 +103,6 @@ define [ lineCoverageConditionsStatus = 'orange' if lineCoverageConditions > 0 && lineCoverageConditions < lineConditions lineCoverageConditionsStatus = 'green' if lineCoverageConditions == lineConditions - lineDuplications = duplications.map (d) -> - d.from <= line && (d.from + d.count) > line - lineNumber: line code: code coverage: lineCoverage @@ -151,7 +110,6 @@ define [ coverageConditions: lineCoverageConditions conditions: lineConditions coverageConditionsStatus: lineCoverageConditionsStatus || lineCoverageStatus - duplications: lineDuplications serializeData: -> diff --git a/sonar-server/src/main/hbs/component-viewer/duplicationPopup.hbs b/sonar-server/src/main/hbs/component-viewer/duplicationPopup.hbs deleted file mode 100644 index 3be9afb0a5a..00000000000 --- a/sonar-server/src/main/hbs/component-viewer/duplicationPopup.hbs +++ /dev/null @@ -1,19 +0,0 @@ -<div class="component-viewer-popup-section"> - <div class="component-viewer-popup-section-title"> - 2 duplications - </div> - <ul class="component-viewer-popup-list"> - <li> - <a data-key="org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/resources/ResourceTypeTree.java"> - <span>ResourceTypeTree.java</span> - </a> - </li> - <li> - <a data-key="org.codehaus.sonar:sonar-batch:src/main/java/org/sonar/batch/phases/PhaseExecutor.java"> - <span>PhaseExecutor.java</span> - </a> - </li> - </ul> -</div> - -<div class="component-viewer-popup-arrow"></div>
\ No newline at end of file diff --git a/sonar-server/src/main/hbs/component-viewer/source.hbs b/sonar-server/src/main/hbs/component-viewer/source.hbs index ba11ec0cf52..c6372ef5da1 100644 --- a/sonar-server/src/main/hbs/component-viewer/source.hbs +++ b/sonar-server/src/main/hbs/component-viewer/source.hbs @@ -5,9 +5,6 @@ <th class="stat"></th> <th class="stat"></th> {{/if}} - {{#if settings.duplications}} - <th class="stat"></th> - {{/if}} <th class="stat settings-toggle"> <button class="button-clean js-toggle-settings"> <i class="icon-settings"></i></i> @@ -45,9 +42,6 @@ <th class="stat"></th> <th class="stat"></th> {{/if}} - {{#if settings.duplications}} - <th class="stat"></th> - {{/if}} <th class="stat settings-toggle"> <button class="button-clean js-toggle-measures"><i class="icon-list"></i></button> </th> @@ -99,18 +93,8 @@ {{/if}} </li> {{/if}} - {{#if settings.duplications}} - <li class="component-viewer-measures-section brief"> - {{component.duplicationsMeasures}} - {{#if component.duplicationsMeasures}} - <dl> - {{#each component.duplicationsMeasures}} - <dt>{{t 'metric' key 'name'}}</dt><dd>{{frmt_val}}</dd> - {{/each}} - </dl> - {{/if}} - </li> - {{/if}} + <li class="component-viewer-measures-section"> + </li> </ul> </th> </tr> @@ -121,9 +105,6 @@ <td class="stat coverage-tests"></td> <td class="stat coverage-conditions"></td> {{/if}} - {{#if settings.duplications}} - <td class="stat"></td> - {{/if}} <td class="stat lid"></td> <td class="line"></td> </tr> @@ -150,14 +131,6 @@ </td> {{/if}} - {{#if ../settings.duplications}} - <td class="stat duplications"> - {{#each duplications}} - <span class="duplication {{#if this}}duplication-exists{{/if}}"></span> - {{/each}} - </td> - {{/if}} - <td class="stat lid">{{lineNumber}}</td> <td class="line"><pre>{{{code}}}</pre></td> diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/RuleDao.java b/sonar-server/src/main/java/org/sonar/server/rule2/RuleDao.java deleted file mode 100644 index ac01c142d77..00000000000 --- a/sonar-server/src/main/java/org/sonar/server/rule2/RuleDao.java +++ /dev/null @@ -1,45 +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. - */ -package org.sonar.server.rule2; - -import org.sonar.api.rule.RuleKey; -import org.sonar.core.persistence.MyBatis; -import org.sonar.server.cluster.WorkQueue; -import org.sonar.server.db.BaseDao; - -import java.util.Collection; - -public class RuleDao extends BaseDao<RuleDto, RuleKey> { - - protected RuleDao(WorkQueue workQueue, MyBatis myBatis) { - super(workQueue, myBatis); - } - - @Override - protected String getIndexName() { - return RuleConstants.INDEX_NAME; - } - - @Override - public Collection<RuleKey> insertsSince(Long timestamp) { - // TODO Auto-generated method stub - return null; - } -} diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/RuleDto.java b/sonar-server/src/main/java/org/sonar/server/rule2/RuleDto.java deleted file mode 100644 index 621de3ae268..00000000000 --- a/sonar-server/src/main/java/org/sonar/server/rule2/RuleDto.java +++ /dev/null @@ -1,344 +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. - */ -package org.sonar.server.rule2; - -import org.sonar.api.rule.RuleKey; - -import org.sonar.core.rule.SeverityUtil; -import org.sonar.server.db.Dto; -import org.apache.commons.lang.builder.EqualsBuilder; -import org.apache.commons.lang.builder.HashCodeBuilder; -import org.apache.commons.lang.builder.ReflectionToStringBuilder; -import org.apache.commons.lang.builder.ToStringStyle; -import org.sonar.check.Cardinality; - -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; - -import java.util.Date; - -public final class RuleDto implements Dto<RuleKey> { - - public static final Integer DISABLED_CHARACTERISTIC_ID = -1; - - private String repositoryKey; - private String ruleKey; - private String description; - private String status; - private String name; - private String configKey; - private Integer severity; - private Cardinality cardinality; - private String language; - private Integer parentId; - private String noteData; - private String noteUserLogin; - private Date noteCreatedAt; - private Date noteUpdatedAt; - private Integer subCharacteristicId; - private Integer defaultSubCharacteristicId; - private String remediationFunction; - private String defaultRemediationFunction; - private String remediationCoefficient; - private String defaultRemediationCoefficient; - private String remediationOffset; - private String defaultRemediationOffset; - private String effortToFixDescription; - private Date createdAt; - private Date updatedAt; - - @Override - public RuleKey getKey() { - return RuleKey.of(this.getRepositoryKey(), this.getRuleKey()); - } - - public String getRepositoryKey() { - return repositoryKey; - } - - public RuleDto setRepositoryKey(String repositoryKey) { - this.repositoryKey = repositoryKey; - return this; - } - - public String getRuleKey() { - return ruleKey; - } - - public RuleDto setRuleKey(String ruleKey) { - this.ruleKey = ruleKey; - return this; - } - - public String getDescription() { - return description; - } - - public RuleDto setDescription(String description) { - this.description = description; - return this; - } - - public String getStatus() { - return status; - } - - public RuleDto setStatus(String status) { - this.status = status; - return this; - } - - public String getName() { - return name; - } - - public RuleDto setName(String name) { - this.name = name; - return this; - } - - public String getConfigKey() { - return configKey; - } - - public RuleDto setConfigKey(String configKey) { - this.configKey = configKey; - return this; - } - - public Integer getSeverity() { - return severity; - } - - public String getSeverityString() { - return SeverityUtil.getSeverityFromOrdinal(severity); - } - - public RuleDto setSeverity(String severity) { - this.severity = SeverityUtil.getOrdinalFromSeverity(severity); - return this; - } - - public RuleDto setSeverity(Integer severity) { - this.severity = severity; - return this; - } - - - public Cardinality getCardinality() { - return cardinality; - } - - public RuleDto setCardinality(Cardinality cardinality) { - this.cardinality = cardinality; - return this; - } - - public String getLanguage() { - return language; - } - - public RuleDto setLanguage(String language) { - this.language = language; - return this; - } - - @CheckForNull - public Integer getParentId() { - return parentId; - } - - public RuleDto setParentId(@Nullable Integer parentId) { - this.parentId = parentId; - return this; - } - - public String getNoteData() { - return noteData; - } - - public RuleDto setNoteData(String noteData) { - this.noteData = noteData; - return this; - } - - public String getNoteUserLogin() { - return noteUserLogin; - } - - public RuleDto setNoteUserLogin(String noteUserLogin) { - this.noteUserLogin = noteUserLogin; - return this; - } - - public Date getNoteCreatedAt() { - return noteCreatedAt; - } - - public RuleDto setNoteCreatedAt(Date noteCreatedAt) { - this.noteCreatedAt = noteCreatedAt; - return this; - } - - public Date getNoteUpdatedAt() { - return noteUpdatedAt; - } - - public RuleDto setNoteUpdatedAt(Date noteUpdatedAt) { - this.noteUpdatedAt = noteUpdatedAt; - return this; - } - - @CheckForNull - public Integer getSubCharacteristicId() { - return subCharacteristicId; - } - - public RuleDto setSubCharacteristicId(@Nullable Integer subCharacteristicId) { - this.subCharacteristicId = subCharacteristicId; - return this; - } - - @CheckForNull - public Integer getDefaultSubCharacteristicId() { - return defaultSubCharacteristicId; - } - - public RuleDto setDefaultSubCharacteristicId(@Nullable Integer defaultSubCharacteristicId) { - this.defaultSubCharacteristicId = defaultSubCharacteristicId; - return this; - } - - @CheckForNull - public String getRemediationFunction() { - return remediationFunction; - } - - public RuleDto setRemediationFunction(@Nullable String remediationFunction) { - this.remediationFunction = remediationFunction; - return this; - } - - @CheckForNull - public String getDefaultRemediationFunction() { - return defaultRemediationFunction; - } - - public RuleDto setDefaultRemediationFunction(@Nullable String defaultRemediationFunction) { - this.defaultRemediationFunction = defaultRemediationFunction; - return this; - } - - @CheckForNull - public String getRemediationCoefficient() { - return remediationCoefficient; - } - - public RuleDto setRemediationCoefficient(@Nullable String remediationCoefficient) { - this.remediationCoefficient = remediationCoefficient; - return this; - } - - @CheckForNull - public String getDefaultRemediationCoefficient() { - return defaultRemediationCoefficient; - } - - public RuleDto setDefaultRemediationCoefficient(@Nullable String defaultRemediationCoefficient) { - this.defaultRemediationCoefficient = defaultRemediationCoefficient; - return this; - } - - @CheckForNull - public String getRemediationOffset() { - return remediationOffset; - } - - public RuleDto setRemediationOffset(@Nullable String remediationOffset) { - this.remediationOffset = remediationOffset; - return this; - } - - @CheckForNull - public String getDefaultRemediationOffset() { - return defaultRemediationOffset; - } - - public RuleDto setDefaultRemediationOffset(@Nullable String defaultRemediationOffset) { - this.defaultRemediationOffset = defaultRemediationOffset; - return this; - } - - @CheckForNull - public String getEffortToFixDescription() { - return effortToFixDescription; - } - - public RuleDto setEffortToFixDescription(@Nullable String effortToFixDescription) { - this.effortToFixDescription = effortToFixDescription; - return this; - } - - public Date getCreatedAt() { - return createdAt; - } - - public RuleDto setCreatedAt(Date createdAt) { - this.createdAt = createdAt; - return this; - } - - public Date getUpdatedAt() { - return updatedAt; - } - - public RuleDto setUpdatedAt(Date updatedAt) { - this.updatedAt = updatedAt; - return this; - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof RuleDto)) { - return false; - } - if (this == obj) { - return true; - } - RuleDto other = (RuleDto) obj; - return new EqualsBuilder() - .append(repositoryKey, other.getRepositoryKey()) - .append(ruleKey, other.getRuleKey()) - .isEquals(); - } - - @Override - public int hashCode() { - return new HashCodeBuilder(17, 37) - .append(repositoryKey) - .append(ruleKey) - .toHashCode(); - } - - @Override - public String toString() { - return new ReflectionToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).toString(); - } -} diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java b/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java index 1867a4e572e..53ca1b54cc8 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java @@ -27,8 +27,10 @@ import org.elasticsearch.index.query.QueryBuilders; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.sonar.api.rule.RuleKey; +import org.sonar.core.cluster.WorkQueue; import org.sonar.core.profiling.Profiling; -import org.sonar.server.cluster.WorkQueue; +import org.sonar.core.rule.RuleConstants; +import org.sonar.core.rule.RuleDao; import org.sonar.server.search.BaseIndex; import java.io.IOException; @@ -42,8 +44,8 @@ public class RuleIndex extends BaseIndex<RuleKey> { private static final Logger LOG = LoggerFactory.getLogger(RuleIndex.class); - public RuleIndex(WorkQueue workQueue, RuleDao dao, Profiling profiling) { - super(workQueue, dao, profiling); + public RuleIndex(WorkQueue queue, RuleDao dao, Profiling profiling) { + super(queue, dao, profiling); } @Override diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/RuleService.java b/sonar-server/src/main/java/org/sonar/server/rule2/RuleService.java index a9087216fd8..dfd0835e3cf 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/RuleService.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/RuleService.java @@ -20,6 +20,8 @@ package org.sonar.server.rule2; import org.sonar.api.rule.RuleKey; +import org.sonar.core.rule.RuleDao; +import org.sonar.core.rule.RuleDto; import org.sonar.server.search.Hit; import javax.annotation.CheckForNull; diff --git a/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java b/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java index 9eaf598196e..1d6529238e0 100644 --- a/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java +++ b/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java @@ -33,12 +33,11 @@ import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.sonar.core.persistence.MyBatis; +import org.sonar.core.cluster.WorkQueue; +import org.sonar.core.db.Dao; import org.sonar.core.profiling.Profiling; import org.sonar.core.profiling.Profiling.Level; import org.sonar.core.profiling.StopWatch; -import org.sonar.server.cluster.WorkQueue; -import org.sonar.server.db.Dao; import java.io.Serializable; import java.util.Collection; diff --git a/sonar-server/src/main/java/org/sonar/server/search/IndexSynchronizer.java b/sonar-server/src/main/java/org/sonar/server/search/IndexSynchronizer.java index 0547675b535..de2d4bc0d9f 100644 --- a/sonar-server/src/main/java/org/sonar/server/search/IndexSynchronizer.java +++ b/sonar-server/src/main/java/org/sonar/server/search/IndexSynchronizer.java @@ -19,9 +19,10 @@ */ package org.sonar.server.search; +import org.sonar.core.cluster.WorkQueue; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.sonar.server.cluster.WorkQueue; import java.io.Serializable; diff --git a/sonar-server/src/main/less/component-viewer.less b/sonar-server/src/main/less/component-viewer.less index 7f2f9979911..6f1d21d59e2 100644 --- a/sonar-server/src/main/less/component-viewer.less +++ b/sonar-server/src/main/less/component-viewer.less @@ -124,7 +124,6 @@ font-size: 11px; text-align: right; cursor: default; - white-space: nowrap; } .sources2 .lid { @@ -137,30 +136,6 @@ cursor: pointer; } - .sources2 .duplications { - padding-top: 0; - padding-bottom: 0; - font-size: 0; - - .duplication { - display: inline-block; - vertical-align: top; - .size(5px, 100%); - } - - .duplication + .duplication { margin-left: 2px; } - - .duplication-exists { - background-color: @lightOrange; - cursor: pointer; - .trans; - } - - .duplication-hover { - background-color: darken(@lightOrange, 10%); - } - } - .sources2 .measures { padding: 4px 5px; border-left: 1px solid @barBorderColor; diff --git a/sonar-server/src/main/less/variables.less b/sonar-server/src/main/less/variables.less index ea62c4aaba9..659091e4ba4 100644 --- a/sonar-server/src/main/less/variables.less +++ b/sonar-server/src/main/less/variables.less @@ -24,7 +24,6 @@ @green: #85bb43; @yellow: #fede06; @orange: #f90; -@lightOrange: #f3ca8e; @purple: #9139d4; @darkBlue: darken(@blue, 20%); diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/issues/search.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/issues/search.html.erb index 758be6eae54..d09c9d319c3 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/issues/search.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/issues/search.html.erb @@ -238,10 +238,6 @@ 'metric.file_complexity_distribution.name': '<%= escape_javascript message('metric.file_complexity_distribution.name') -%>', 'metric.coverage.name': '<%= escape_javascript message('metric.coverage.name') -%>', 'metric.line_coverage.name': '<%= escape_javascript message('metric.line_coverage.name') -%>', - 'metric.branch_coverage.name': '<%= escape_javascript message('metric.branch_coverage.name') -%>', - 'metric.duplicated_blocks.name': '<%= escape_javascript message('metric.duplicated_blocks.name') -%>', - 'metric.duplicated_files.name': '<%= escape_javascript message('metric.duplicated_files.name') -%>', - 'metric.duplicated_lines.name': '<%= escape_javascript message('metric.duplicated_lines.name') -%>', - 'metric.duplicated_lines_density.name': '<%= escape_javascript message('metric.duplicated_lines_density.name') -%>' + 'metric.branch_coverage.name': '<%= escape_javascript message('metric.branch_coverage.name') -%>' }; </script> diff --git a/sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesTest.java b/sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesTest.java index 01c35e4d405..6707ea13852 100644 --- a/sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesTest.java +++ b/sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesTest.java @@ -34,6 +34,8 @@ import org.sonar.api.server.rule.RulesDefinition; import org.sonar.api.utils.DateUtils; import org.sonar.api.utils.MessageException; import org.sonar.api.utils.System2; +import org.sonar.core.cluster.LocalNonBlockingWorkQueue; +import org.sonar.core.cluster.WorkQueue; import org.sonar.core.persistence.AbstractDaoTestCase; import org.sonar.core.persistence.MyBatis; import org.sonar.core.qualityprofile.db.ActiveRuleDao; @@ -50,7 +52,11 @@ import java.util.Date; import static org.fest.assertions.Assertions.assertThat; import static org.fest.assertions.Fail.fail; -import static org.mockito.Mockito.*; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class RegisterRulesTest extends AbstractDaoTestCase { @@ -85,14 +91,16 @@ public class RegisterRulesTest extends AbstractDaoTestCase { ActiveRuleDao activeRuleDao; CharacteristicDao characteristicDao; System2 system; + WorkQueue queue; Date date = DateUtils.parseDateTime("2014-03-17T19:10:03+0100"); @Before public void before() { system = mock(System2.class); + queue = mock(WorkQueue.class); when(system.now()).thenReturn(date.getTime()); myBatis = getMyBatis(); - ruleDao = new RuleDao(myBatis); + ruleDao = new RuleDao(myBatis, queue); ruleTagDao = new RuleTagDao(myBatis); activeRuleDao = new ActiveRuleDao(myBatis); ruleTagOperations = new RuleTagOperations(ruleTagDao, esRuleTags); diff --git a/sonar-server/src/test/java/org/sonar/server/rule2/RuleIndexTest.java b/sonar-server/src/test/java/org/sonar/server/rule2/RuleIndexTest.java index 28f77935620..f356961ddef 100644 --- a/sonar-server/src/test/java/org/sonar/server/rule2/RuleIndexTest.java +++ b/sonar-server/src/test/java/org/sonar/server/rule2/RuleIndexTest.java @@ -19,23 +19,21 @@ */ package org.sonar.server.rule2; +import org.sonar.core.cluster.LocalNonBlockingWorkQueue; + import com.github.tlrx.elasticsearch.test.annotations.ElasticsearchNode; import com.github.tlrx.elasticsearch.test.support.junit.runners.ElasticsearchRunner; import org.elasticsearch.node.Node; import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.sonar.api.config.Settings; import org.sonar.core.profiling.Profiling; -import org.sonar.server.cluster.LocalNonBlockingWorkQueue; import org.sonar.server.search.BaseIndex; - import static org.fest.assertions.Assertions.assertThat; @RunWith(ElasticsearchRunner.class) -@Ignore("Should be fixed") public class RuleIndexTest { private static final String TEST_NODE_NAME = "es_node_for_tests"; diff --git a/sonar-server/src/test/java/org/sonar/server/search/BaseIndexTest.java b/sonar-server/src/test/java/org/sonar/server/search/BaseIndexTest.java index 02db86fd287..ced123ba714 100644 --- a/sonar-server/src/test/java/org/sonar/server/search/BaseIndexTest.java +++ b/sonar-server/src/test/java/org/sonar/server/search/BaseIndexTest.java @@ -31,6 +31,7 @@ import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.sonar.api.config.Settings; +import org.sonar.core.cluster.LocalNonBlockingWorkQueue; import org.sonar.core.profiling.Profiling; import org.sonar.server.cluster.LocalNonBlockingWorkQueue; |