aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-core
diff options
context:
space:
mode:
authorsimonbrandhof <simon.brandhof@gmail.com>2010-11-18 15:02:54 +0000
committersimonbrandhof <simon.brandhof@gmail.com>2010-11-18 15:02:54 +0000
commit4bfd79e52cea465f226c78abb253c2073f4c1d4c (patch)
treed3812db183fbd869e2451148c32b2bd583f1112a /sonar-core
parentf8ba14ececd0a5b60ec7112d4df3266f105541f5 (diff)
downloadsonarqube-4bfd79e52cea465f226c78abb253c2073f4c1d4c.tar.gz
sonarqube-4bfd79e52cea465f226c78abb253c2073f4c1d4c.zip
SONAR-1663 include the dbcleaner plugin + move all purges in this plugin
Diffstat (limited to 'sonar-core')
-rw-r--r--sonar-core/src/main/java/org/sonar/core/purge/AbstractPurge.java137
-rw-r--r--sonar-core/src/main/java/org/sonar/core/purge/DefaultPurgeContext.java86
-rw-r--r--sonar-core/src/test/java/org/sonar/core/purge/AbstractPurgeTest.java51
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/purge/AbstractPurgeTest/purgeSnapshots-result.xml111
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/purge/AbstractPurgeTest/purgeSnapshots.xml111
5 files changed, 0 insertions, 496 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/purge/AbstractPurge.java b/sonar-core/src/main/java/org/sonar/core/purge/AbstractPurge.java
deleted file mode 100644
index a0f46d286d1..00000000000
--- a/sonar-core/src/main/java/org/sonar/core/purge/AbstractPurge.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2009 SonarSource SA
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar 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.
- *
- * Sonar 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 Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
- */
-package org.sonar.core.purge;
-
-import org.sonar.api.batch.Purge;
-import org.sonar.api.database.DatabaseSession;
-import org.sonar.api.database.model.*;
-import org.sonar.api.design.DependencyDto;
-import org.sonar.api.utils.TimeProfiler;
-
-import javax.persistence.Query;
-import java.util.List;
-
-public abstract class AbstractPurge implements Purge {
-
- private static final int MAX_IN_ELEMENTS = 950;
-
- private int sqlInPageSize = MAX_IN_ELEMENTS;
- private DatabaseSession session;
- private TimeProfiler profiler = new TimeProfiler().setLevelToDebug();
-
- public AbstractPurge(DatabaseSession session) {
- this.session = session;
- }
-
- protected DatabaseSession getSession() {
- return session;
- }
-
- /**
- * Delete SNAPSHOTS and all dependent tables (MEASURES, ...)
- */
- protected void deleteSnapshotData(List<Integer> snapshotIds) {
- deleteMeasuresBySnapshotId(snapshotIds);
- deleteSources(snapshotIds);
- deleteViolations(snapshotIds);
- deleteDependencies(snapshotIds);
- deleteSnapshots(snapshotIds);
- }
-
- protected void deleteDependencies(List<Integer> snapshotIds) {
- executeQuery("delete dependencies", snapshotIds, "delete from " + DependencyDto.class.getSimpleName() + " d where d.fromSnapshotId in (:ids)");
- executeQuery("delete dependencies", snapshotIds, "delete from " + DependencyDto.class.getSimpleName() + " d where d.toSnapshotId in (:ids)");
- }
-
- /**
- * Delete all measures, including MEASURE_DATA
- */
- protected void deleteMeasuresBySnapshotId(List<Integer> snapshotIds) {
- executeQuery("delete measures by snapshot id", snapshotIds, "delete from " + MeasureData.class.getSimpleName() + " m where m.snapshotId in (:ids)");
- executeQuery("delete measures by snapshot id", snapshotIds, "delete from " + MeasureModel.class.getSimpleName() + " m where m.snapshotId in (:ids)");
- }
-
- /**
- * Delete all measures, including MEASURE_DATA
- */
- protected void deleteMeasuresById(List<Integer> measureIds) {
- executeQuery("delete measures by id", measureIds, "delete from " + MeasureData.class.getSimpleName() + " m where m.measure.id in (:ids)");
- executeQuery("delete measures by id", measureIds, "delete from " + MeasureModel.class.getSimpleName() + " m where m.id in (:ids)");
- }
-
- /**
- * Delete SNAPSHOT_SOURCES table
- */
- protected void deleteSources(List<Integer> snapshotIds) {
- executeQuery("delete sources", snapshotIds, "delete from " + SnapshotSource.class.getSimpleName() + " e where e.snapshotId in (:ids)");
- }
-
- /**
- * Delete violations (RULE_FAILURES table)
- */
- protected void deleteViolations(List<Integer> snapshotIds) {
- executeQuery("delete violations", snapshotIds, "delete from " + RuleFailureModel.class.getSimpleName() + " e where e.snapshotId in (:ids)");
- }
-
- /**
- * Delete SNAPSHOTS table
- */
- protected void deleteSnapshots(List<Integer> snapshotIds) {
- executeQuery("delete snapshots", snapshotIds, "delete from " + Snapshot.class.getSimpleName() + " s where s.id in (:ids)");
- }
-
- /**
- * Paginate execution of SQL requests to avoid exceeding size of rollback segment
- */
- private void executeQuery(String name, List<Integer> ids, String hql) {
- if (ids == null || ids.isEmpty()) {
- return;
- }
-
- TimeProfiler profiler = new TimeProfiler().setLevelToDebug().start("Execute " + name);
-
- int page = 1;
- int index = 0;
- while (index < ids.size()) {
- TimeProfiler pageProfiler = new TimeProfiler().setLevelToDebug().start("Execute " + name + " " + page + " page");
- Query query = session.createQuery(hql);
- List<Integer> paginedSids = ids.subList(index, Math.min(ids.size(), index + sqlInPageSize));
- query.setParameter("ids", paginedSids);
- query.executeUpdate();
- index += sqlInPageSize;
- page++;
- session.commit();
- pageProfiler.stop();
- }
-
- profiler.stop();
- }
-
- protected void executeQuery(List<Integer> ids, String hql) {
- executeQuery("delete for " + getClass().getSimpleName(), ids, hql);
- }
-
- protected List<Integer> selectIds(Query query) {
- profiler.start("Select IDs for " + getClass().getSimpleName());
- List<Integer> result = query.getResultList();
- profiler.stop();
- return result;
- }
-}
diff --git a/sonar-core/src/main/java/org/sonar/core/purge/DefaultPurgeContext.java b/sonar-core/src/main/java/org/sonar/core/purge/DefaultPurgeContext.java
deleted file mode 100644
index f2106a6bd58..00000000000
--- a/sonar-core/src/main/java/org/sonar/core/purge/DefaultPurgeContext.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package org.sonar.core.purge;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.sonar.api.batch.PurgeContext;
-import org.sonar.api.database.model.Snapshot;
-
-public class DefaultPurgeContext implements PurgeContext {
-
- private Integer currentSid;
- private Integer lastSid;
-
- public DefaultPurgeContext() {
- }
-
- public DefaultPurgeContext(Snapshot currentSnapshot) {
- this(currentSnapshot, null);
- }
-
- public DefaultPurgeContext(Snapshot currentSnapshot, Snapshot lastSnapshot) {
- if (currentSnapshot != null) {
- currentSid = currentSnapshot.getId();
- }
- if (lastSnapshot != null) {
- lastSid = lastSnapshot.getId();
- }
- }
-
- public DefaultPurgeContext(Integer currentSid, Integer lastSid) {
- this.currentSid = currentSid;
- this.lastSid = lastSid;
- }
-
- public DefaultPurgeContext setLastSnapshotId(Integer lastSid) {
- this.lastSid = lastSid;
- return this;
- }
-
- public DefaultPurgeContext setCurrentSnapshotId(Integer currentSid) {
- this.currentSid = currentSid;
- return this;
- }
-
- public Integer getPreviousSnapshotId() {
- return lastSid;
- }
-
- public Integer getLastSnapshotId() {
- return currentSid;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
-
- DefaultPurgeContext context = (DefaultPurgeContext) o;
-
- if (!currentSid.equals(context.currentSid)) {
- return false;
- }
- if (lastSid != null ? !lastSid.equals(context.lastSid) : context.lastSid != null) {
- return false;
- }
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result = lastSid != null ? lastSid.hashCode() : 0;
- result = 31 * result + currentSid.hashCode();
- return result;
- }
-
- @Override
- public String toString() {
- return new ToStringBuilder(this)
- .append("currentSid", currentSid)
- .append("lastSid", lastSid)
- .toString();
- }
-}
diff --git a/sonar-core/src/test/java/org/sonar/core/purge/AbstractPurgeTest.java b/sonar-core/src/test/java/org/sonar/core/purge/AbstractPurgeTest.java
deleted file mode 100644
index c1b8d49d975..00000000000
--- a/sonar-core/src/test/java/org/sonar/core/purge/AbstractPurgeTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2009 SonarSource SA
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar 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.
- *
- * Sonar 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 Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
- */
-package org.sonar.core.purge;
-
-import org.junit.Test;
-import org.sonar.api.batch.PurgeContext;
-import org.sonar.api.database.DatabaseSession;
-import org.sonar.jpa.test.AbstractDbUnitTestCase;
-
-import java.sql.SQLException;
-import java.util.Arrays;
-
-public class AbstractPurgeTest extends AbstractDbUnitTestCase {
-
- @Test
- public void purgeSnapshots() throws SQLException {
- setupData("purgeSnapshots");
-
- final FakePurge purge = new FakePurge(getSession());
- purge.purge(null);
-
- checkTables("purgeSnapshots", "snapshots", "project_measures", "measure_data", "rule_failures", "snapshot_sources", "dependencies");
- }
-}
-
-class FakePurge extends AbstractPurge {
- public FakePurge(DatabaseSession session) {
- super(session);
- }
-
- public void purge(PurgeContext context) {
- deleteSnapshotData(Arrays.asList(3, 4));
- }
-} \ No newline at end of file
diff --git a/sonar-core/src/test/resources/org/sonar/core/purge/AbstractPurgeTest/purgeSnapshots-result.xml b/sonar-core/src/test/resources/org/sonar/core/purge/AbstractPurgeTest/purgeSnapshots-result.xml
deleted file mode 100644
index f5039b0e8ec..00000000000
--- a/sonar-core/src/test/resources/org/sonar/core/purge/AbstractPurgeTest/purgeSnapshots-result.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<dataset>
- <rules_categories id="1" name="category one" description="[null]"/>
- <rules id="1" name="foo" rules_category_id="1" plugin_config_key="checker/foo" plugin_rule_key="checkstyle.rule1"
- plugin_name="maven-checkstyle-plugin" description="description" cardinality="SINGLE" parent_id="[null]" />
-
- <metrics id="1" name="ncloc" val_type="INT" description="[null]" domain="[null]"
- short_name="" qualitative="false" user_managed="false" enabled="true" worst_value="[null]" optimized_best_value="[null]" best_value="[null]" direction="0" hidden="false"/>
-
- <!-- project -->
- <projects long_name="[null]" id="1" scope="PRJ" qualifier="TRK" kee="mygroup:myartifact" name="project"
- root_id="[null]"
- description="[null]"
- enabled="true" language="java" copy_resource_id="[null]"/>
-
- <!-- package -->
- <projects long_name="[null]" id="2" scope="DIR" qualifier="PAC" kee="mygroup:myartifact:my.package" name="package"
- root_id="1"
- description="[null]"
- enabled="true" language="java" copy_resource_id="[null]"/>
-
- <!-- files -->
- <projects long_name="[null]" id="3" scope="FIL" qualifier="CLA" kee="mygroup:myartifact:my.package.Class1"
- name="class" root_id="1"
- description="[null]"
- enabled="true" language="java" copy_resource_id="[null]"/>
-
- <projects long_name="[null]" id="4" scope="FIL" qualifier="CLA" kee="mygroup:myartifact:my.package.Class2"
- name="class" root_id="1"
- description="[null]"
- enabled="true" language="java" copy_resource_id="[null]"/>
-
-
- <snapshots depth="[null]" id="1" scope="PRJ" qualifier="TRK" created_at="2008-12-02 13:58:00.00" version="[null]"
- project_id="1"
- parent_snapshot_id="[null]" root_project_id="[null]" root_snapshot_id="[null]" status="P" islast="false"
- path="[null]"/>
-
- <snapshots depth="[null]" id="2" scope="DIR" qualifier="PAC" created_at="2008-12-02 13:58:00.00" version="[null]"
- project_id="2"
- parent_snapshot_id="2" root_project_id="[null]" root_snapshot_id="1" status="P" islast="false"
- path="[null]"/>
-
-
- <!--<snapshots depth="[null]" id="3" scope="FIL" qualifier="CLA" created_at="2008-12-02 13:58:00.00" version="[null]"-->
- <!--project_id="3"-->
- <!--parent_snapshot_id="2" root_project_id="[null]" root_snapshot_id="1" status="P" islast="false"-->
- <!--path="[null]"/>-->
-
- <!--<snapshots depth="[null]" id="4" scope="FIL" qualifier="CLA" created_at="2008-12-02 13:58:00.00" version="[null]"-->
- <!--project_id="4"-->
- <!--parent_snapshot_id="2" root_project_id="[null]" root_snapshot_id="1" status="P" islast="false"-->
- <!--path="[null]"/>-->
-
-
- <SNAPSHOT_SOURCES ID="1" SNAPSHOT_ID="30" DATA="some sources"/>
- <!--<SNAPSHOT_SOURCES ID="2" SNAPSHOT_ID="4" DATA="some sources"/>-->
-
-
- <RULE_FAILURES ID="1" SNAPSHOT_ID="1" RULE_ID="1" FAILURE_LEVEL="2" MESSAGE="msg1" LINE="[null]" COST="[null]"/>
- <RULE_FAILURES ID="2" SNAPSHOT_ID="2" RULE_ID="1" FAILURE_LEVEL="2" MESSAGE="msg2" LINE="[null]" COST="[null]"/>
- <!--<RULE_FAILURES ID="3" SNAPSHOT_ID="3" RULE_ID="1" FAILURE_LEVEL="2" MESSAGE="msg3" LINE="[null]" COST="[null]"/>-->
- <!--<RULE_FAILURES ID="4" SNAPSHOT_ID="4" RULE_ID="1" FAILURE_LEVEL="2" MESSAGE="msg4" LINE="[null]" COST="[null]"/>-->
-
-
- <project_measures characteristic_id="[null]" url="[null]" diff_value_1="[null]" diff_value_2="[null]" diff_value_3="[null]"
- rule_priority="[null]"
- alert_text="[null]" ID="1" VALUE="10.0" METRIC_ID="1" SNAPSHOT_ID="1" RULES_CATEGORY_ID="1"
- RULE_ID="1"
- text_value="[null]" tendency="[null]" measure_date="[null]" project_id="[null]"
- alert_status="[null]" description="[null]"/>
-
- <project_measures characteristic_id="[null]" url="[null]" diff_value_1="[null]" diff_value_2="[null]" diff_value_3="[null]"
- rule_priority="[null]"
- alert_text="[null]" ID="2" VALUE="10.0" METRIC_ID="1" SNAPSHOT_ID="2" RULES_CATEGORY_ID="1"
- RULE_ID="1"
- text_value="[null]" tendency="[null]" measure_date="[null]" project_id="[null]"
- alert_status="[null]" description="[null]"/>
-
- <!--<project_measures characteristic_id="[null]" url="[null]" diff_value_1="[null]" diff_value_2="[null]" diff_value_3="[null]"-->
- <!--rule_priority="[null]"-->
- <!--alert_text="[null]" ID="3" VALUE="10.0" METRIC_ID="1" SNAPSHOT_ID="3" RULES_CATEGORY_ID="1"-->
- <!--RULE_ID="1"-->
- <!--text_value="[null]" tendency="[null]" measure_date="[null]" project_id="[null]"-->
- <!--alert_status="[null]" description="[null]"/>-->
-
- <!--<project_measures characteristic_id="[null]" url="[null]" diff_value_1="[null]" diff_value_2="[null]" diff_value_3="[null]"-->
- <!--rule_priority="[null]"-->
- <!--alert_text="[null]" ID="4" VALUE="10.0" METRIC_ID="1" SNAPSHOT_ID="4" RULES_CATEGORY_ID="1"-->
- <!--RULE_ID="1"-->
- <!--text_value="[null]" tendency="[null]" measure_date="[null]" project_id="[null]"-->
- <!--alert_status="[null]" description="[null]"/>-->
-
-
- <measure_data id="1" measure_id="1" snapshot_id="1" data="[null]"/>
- <measure_data id="2" measure_id="2" snapshot_id="2" data="[null]"/>
- <!--<measure_data id="3" measure_id="3" snapshot_id="3" data="[null]"/>-->
- <!--<measure_data id="4" measure_id="4" snapshot_id="4" data="[null]"/>-->
-
- <dependencies id="1" from_resource_id="1" from_snapshot_id="1" to_resource_id="30" to_snapshot_id="30"
- parent_dependency_id="[null]" project_snapshot_id="1"
- dep_usage="USES" dep_weight="1" from_scope="PRJ" to_scope="LIB"/>
-
- <!--<dependencies id="2" from_resource_id="3" from_snapshot_id="3" to_resource_id="40" to_snapshot_id="40"-->
- <!--parent_dependency_id="[null]" project_snapshot_id="1"-->
- <!--dep_usage="INHERITS" dep_weight="1" from_scope="FIL" to_scope="FIL"/>-->
-
- <!--<dependencies id="3" from_resource_id="50" from_snapshot_id="50" to_resource_id="3" to_snapshot_id="3"-->
- <!--parent_dependency_id="[null]" project_snapshot_id="1"-->
- <!--dep_usage="INHERITS" dep_weight="1" from_scope="FIL" to_scope="FIL"/>-->
-
-</dataset> \ No newline at end of file
diff --git a/sonar-core/src/test/resources/org/sonar/core/purge/AbstractPurgeTest/purgeSnapshots.xml b/sonar-core/src/test/resources/org/sonar/core/purge/AbstractPurgeTest/purgeSnapshots.xml
deleted file mode 100644
index 93ef910270a..00000000000
--- a/sonar-core/src/test/resources/org/sonar/core/purge/AbstractPurgeTest/purgeSnapshots.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<dataset>
- <rules_categories id="1" name="category one" description="[null]"/>
- <rules id="1" name="foo" rules_category_id="1" plugin_config_key="checker/foo" plugin_rule_key="checkstyle.rule1"
- plugin_name="maven-checkstyle-plugin" description="description" cardinality="SINGLE" parent_id="[null]"/>
-
- <metrics id="1" name="ncloc" val_type="INT" description="[null]" domain="[null]"
- short_name="" qualitative="false" user_managed="false" enabled="true" worst_value="[null]" optimized_best_value="[null]" best_value="[null]" direction="0" hidden="false"/>
-
- <!-- project -->
- <projects long_name="[null]" id="1" scope="PRJ" qualifier="TRK" kee="mygroup:myartifact" name="project"
- root_id="[null]"
- description="[null]"
- enabled="true" language="java" copy_resource_id="[null]"/>
-
- <!-- package -->
- <projects long_name="[null]" id="2" scope="DIR" qualifier="PAC" kee="mygroup:myartifact:my.package" name="package"
- root_id="1"
- description="[null]"
- enabled="true" language="java" copy_resource_id="[null]"/>
-
- <!-- files -->
- <projects long_name="[null]" id="3" scope="FIL" qualifier="CLA" kee="mygroup:myartifact:my.package.Class1"
- name="class" root_id="1"
- description="[null]"
- enabled="true" language="java" copy_resource_id="[null]"/>
-
- <projects long_name="[null]" id="4" scope="FIL" qualifier="CLA" kee="mygroup:myartifact:my.package.Class2"
- name="class" root_id="1"
- description="[null]"
- enabled="true" language="java" copy_resource_id="[null]"/>
-
-
- <snapshots depth="[null]" id="1" scope="PRJ" qualifier="TRK" created_at="2008-12-02 13:58:00.00" version="[null]"
- project_id="1"
- parent_snapshot_id="[null]" root_project_id="[null]" root_snapshot_id="[null]" status="P" islast="false"
- path="[null]"/>
-
- <snapshots depth="[null]" id="2" scope="DIR" qualifier="PAC" created_at="2008-12-02 13:58:00.00" version="[null]"
- project_id="2"
- parent_snapshot_id="2" root_project_id="[null]" root_snapshot_id="1" status="P" islast="false"
- path="[null]"/>
-
-
- <snapshots depth="[null]" id="3" scope="FIL" qualifier="CLA" created_at="2008-12-02 13:58:00.00" version="[null]"
- project_id="3"
- parent_snapshot_id="2" root_project_id="[null]" root_snapshot_id="1" status="P" islast="false"
- path="[null]"/>
-
- <snapshots depth="[null]" id="4" scope="FIL" qualifier="CLA" created_at="2008-12-02 13:58:00.00" version="[null]"
- project_id="4"
- parent_snapshot_id="2" root_project_id="[null]" root_snapshot_id="1" status="P" islast="false"
- path="[null]"/>
-
-
- <SNAPSHOT_SOURCES ID="1" SNAPSHOT_ID="30" DATA="some sources"/>
- <SNAPSHOT_SOURCES ID="2" SNAPSHOT_ID="4" DATA="some sources"/>
-
-
- <RULE_FAILURES ID="1" SNAPSHOT_ID="1" RULE_ID="1" FAILURE_LEVEL="2" MESSAGE="msg1" LINE="[null]" COST="[null]"/>
- <RULE_FAILURES ID="2" SNAPSHOT_ID="2" RULE_ID="1" FAILURE_LEVEL="2" MESSAGE="msg2" LINE="[null]" COST="[null]"/>
- <RULE_FAILURES ID="3" SNAPSHOT_ID="3" RULE_ID="1" FAILURE_LEVEL="2" MESSAGE="msg3" LINE="[null]" COST="[null]"/>
- <RULE_FAILURES ID="4" SNAPSHOT_ID="4" RULE_ID="1" FAILURE_LEVEL="2" MESSAGE="msg4" LINE="[null]" COST="[null]"/>
-
-
- <project_measures characteristic_id="[null]" url="[null]" diff_value_1="[null]" diff_value_2="[null]" diff_value_3="[null]"
- rule_priority="[null]"
- alert_text="[null]" ID="1" VALUE="10.0" METRIC_ID="1" SNAPSHOT_ID="1" RULES_CATEGORY_ID="1"
- RULE_ID="1"
- text_value="[null]" tendency="[null]" measure_date="[null]" project_id="[null]"
- alert_status="[null]" description="[null]"/>
-
- <project_measures characteristic_id="[null]" url="[null]" diff_value_1="[null]" diff_value_2="[null]" diff_value_3="[null]"
- rule_priority="[null]"
- alert_text="[null]" ID="2" VALUE="10.0" METRIC_ID="1" SNAPSHOT_ID="2" RULES_CATEGORY_ID="1"
- RULE_ID="1"
- text_value="[null]" tendency="[null]" measure_date="[null]" project_id="[null]"
- alert_status="[null]" description="[null]"/>
-
- <project_measures characteristic_id="[null]" url="[null]" diff_value_1="[null]" diff_value_2="[null]" diff_value_3="[null]"
- rule_priority="[null]"
- alert_text="[null]" ID="3" VALUE="10.0" METRIC_ID="1" SNAPSHOT_ID="3" RULES_CATEGORY_ID="1"
- RULE_ID="1"
- text_value="[null]" tendency="[null]" measure_date="[null]" project_id="[null]"
- alert_status="[null]" description="[null]"/>
-
- <project_measures characteristic_id="[null]" url="[null]" diff_value_1="[null]" diff_value_2="[null]" diff_value_3="[null]"
- rule_priority="[null]"
- alert_text="[null]" ID="4" VALUE="10.0" METRIC_ID="1" SNAPSHOT_ID="4" RULES_CATEGORY_ID="1"
- RULE_ID="1"
- text_value="[null]" tendency="[null]" measure_date="[null]" project_id="[null]"
- alert_status="[null]" description="[null]"/>
-
-
- <measure_data id="1" measure_id="1" snapshot_id="1" data="[null]"/>
- <measure_data id="2" measure_id="2" snapshot_id="2" data="[null]"/>
- <measure_data id="3" measure_id="3" snapshot_id="3" data="[null]"/>
- <measure_data id="4" measure_id="4" snapshot_id="4" data="[null]"/>
-
- <dependencies id="1" from_resource_id="1" from_snapshot_id="1" to_resource_id="30" to_snapshot_id="30"
- parent_dependency_id="[null]" project_snapshot_id="1"
- dep_usage="USES" dep_weight="1" from_scope="PRJ" to_scope="LIB"/>
-
- <dependencies id="2" from_resource_id="3" from_snapshot_id="3" to_resource_id="40" to_snapshot_id="40"
- parent_dependency_id="[null]" project_snapshot_id="1"
- dep_usage="INHERITS" dep_weight="1" from_scope="FIL" to_scope="FIL"/>
-
- <dependencies id="3" from_resource_id="50" from_snapshot_id="50" to_resource_id="3" to_snapshot_id="3"
- parent_dependency_id="[null]" project_snapshot_id="1"
- dep_usage="INHERITS" dep_weight="1" from_scope="FIL" to_scope="FIL" />
-
-</dataset> \ No newline at end of file