@@ -30,7 +30,7 @@ import javax.persistence.*; | |||
public class SchemaMigration { | |||
public final static int VERSION_UNKNOWN = -1; | |||
public static final int LAST_VERSION = 138; | |||
public static final int LAST_VERSION = 139; | |||
public final static String TABLE_NAME = "schema_migrations"; | |||
@@ -2,9 +2,9 @@ | |||
<quality_models id="1" name="M1" /> | |||
<quality_models id="2" name="M2" /> | |||
<characteristics id="1" kee="M1C1" name="M1C1" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="1" description="[null]" /> | |||
<characteristics id="2" kee="M1C2" name="M1C2" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="2" description="[null]" /> | |||
<characteristics id="3" kee="M2C1" name="M2C1" quality_model_id="2" rule_id="[null]" characteristic_order="1" depth="1" description="[null]"/> | |||
<characteristics id="1" kee="M1C1" name="M1C1" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="1" description="[null]" enabled="true" /> | |||
<characteristics id="2" kee="M1C2" name="M1C2" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="2" description="[null]" enabled="true" /> | |||
<characteristics id="3" kee="M2C1" name="M2C1" quality_model_id="2" rule_id="[null]" characteristic_order="1" depth="1" description="[null]" enabled="true"/> | |||
<characteristic_edges child_id="2" parent_id="1"/> | |||
</dataset> |
@@ -5,9 +5,9 @@ | |||
<!-- NEW MODEL --> | |||
<quality_models id="3" name="NEWMODEL" /> | |||
<characteristics id="1" kee="M1C1" name="M1C1" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="1" description="[null]" /> | |||
<characteristics id="2" kee="M1C2" name="M1C2" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="2" description="[null]" /> | |||
<characteristics id="3" kee="M2C1" name="M2C1" quality_model_id="2" rule_id="[null]" characteristic_order="1" depth="1" description="[null]"/> | |||
<characteristics id="1" kee="M1C1" name="M1C1" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="1" description="[null]" enabled="true" /> | |||
<characteristics id="2" kee="M1C2" name="M1C2" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="2" description="[null]" enabled="true" /> | |||
<characteristics id="3" kee="M2C1" name="M2C1" quality_model_id="2" rule_id="[null]" characteristic_order="1" depth="1" description="[null]" enabled="true"/> | |||
<characteristic_edges child_id="2" parent_id="1"/> | |||
</dataset> |
@@ -3,12 +3,12 @@ | |||
<quality_models id="2" name="M2" /> | |||
<quality_models id="3" name="M1" /> | |||
<!--<characteristics id="1" kee="M1C1" name="M1C1" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="1" description="[null]" />--> | |||
<!--<characteristics id="2" kee="M1C2" name="M1C2" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="2" description="[null]"/>--> | |||
<characteristics id="3" kee="M2C1" name="M2C1" quality_model_id="2" rule_id="[null]" characteristic_order="1" depth="1" description="[null]" /> | |||
<characteristics id="4" kee="NEWM1C1A" name="NEWM1C1A" quality_model_id="3" rule_id="[null]" characteristic_order="1" depth="2" description="[null]"/> | |||
<characteristics id="5" kee="NEWM1C1" name="NEWM1C1" quality_model_id="3" rule_id="[null]" characteristic_order="1" depth="1" description="[null]"/> | |||
<characteristics id="6" kee="NEWM1C2" name="NEWM1C2" quality_model_id="3" rule_id="[null]" characteristic_order="2" depth="1" description="[null]"/> | |||
<!--<characteristics id="1" kee="M1C1" name="M1C1" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="1" description="[null]" enabled="true" />--> | |||
<!--<characteristics id="2" kee="M1C2" name="M1C2" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="2" description="[null]" enabled="true"/>--> | |||
<characteristics id="3" kee="M2C1" name="M2C1" quality_model_id="2" rule_id="[null]" characteristic_order="1" depth="1" description="[null]" enabled="true" /> | |||
<characteristics id="4" kee="NEWM1C1A" name="NEWM1C1A" quality_model_id="3" rule_id="[null]" characteristic_order="1" depth="2" description="[null]" enabled="true"/> | |||
<characteristics id="5" kee="NEWM1C1" name="NEWM1C1" quality_model_id="3" rule_id="[null]" characteristic_order="1" depth="1" description="[null]" enabled="true"/> | |||
<characteristics id="6" kee="NEWM1C2" name="NEWM1C2" quality_model_id="3" rule_id="[null]" characteristic_order="2" depth="1" description="[null]" enabled="true"/> | |||
<!--<characteristic_edges child_id="2" parent_id="1"/>--> | |||
<characteristic_edges child_id="4" parent_id="5"/> |
@@ -2,9 +2,9 @@ | |||
<quality_models id="1" name="M1" /> | |||
<quality_models id="2" name="M2" /> | |||
<characteristics id="1" kee="M1C1" name="M1C1" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="1" description="[null]" /> | |||
<characteristics id="2" kee="M1C2" name="M1C2" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="2" description="[null]" /> | |||
<characteristics id="3" kee="M2C1" name="M2C1" quality_model_id="2" rule_id="[null]" characteristic_order="1" depth="1" description="[null]"/> | |||
<characteristics id="1" kee="M1C1" name="M1C1" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="1" description="[null]" enabled="true" /> | |||
<characteristics id="2" kee="M1C2" name="M1C2" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="2" description="[null]" enabled="true" /> | |||
<characteristics id="3" kee="M2C1" name="M2C1" quality_model_id="2" rule_id="[null]" characteristic_order="1" depth="1" description="[null]" enabled="true"/> | |||
<characteristic_edges child_id="2" parent_id="1"/> | |||
</dataset> |
@@ -1,4 +1,4 @@ | |||
<dataset> | |||
<quality_models id="1" name="initial" /> | |||
<characteristics id="1" kee="FAKE" name="fake" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="1" description="[null]" /> | |||
<characteristics id="1" kee="FAKE" name="fake" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="1" description="[null]" enabled="true" /> | |||
</dataset> |
@@ -1,8 +1,8 @@ | |||
<dataset> | |||
<quality_models id="1" name="initial" /> | |||
<characteristics id="1" kee="FAKE1" name="fake1" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="1" description="[null]"/> | |||
<characteristics id="2" kee="FAKE2" name="fake2" quality_model_id="1" rule_id="[null]" characteristic_order="2" depth="1" description="[null]" /> | |||
<characteristics id="1" kee="FAKE1" name="fake1" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="1" description="[null]" enabled="true"/> | |||
<characteristics id="2" kee="FAKE2" name="fake2" quality_model_id="1" rule_id="[null]" characteristic_order="2" depth="1" description="[null]" enabled="true" /> | |||
<characteristic_edges child_id="2" parent_id="1"/> | |||
</dataset> |
@@ -1,5 +1,5 @@ | |||
<dataset> | |||
<quality_models id="1" name="initial" /> | |||
<characteristics id="1" kee="FAKE" name="fake" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="1" description="[null]" /> | |||
<characteristics id="1" kee="FAKE" name="fake" quality_model_id="1" rule_id="[null]" characteristic_order="1" depth="1" description="[null]" enabled="true" /> | |||
<characteristic_edges child_id="1" parent_id="1"/> | |||
</dataset> |
@@ -68,6 +68,9 @@ public final class Characteristic implements Comparable<Characteristic> { | |||
@Column(name = "description", nullable = true, length = 4000) | |||
private String description; | |||
@Column(name = "enabled", updatable = true, nullable = true) | |||
private Boolean enabled = Boolean.TRUE; | |||
@ManyToMany | |||
@JoinTable( | |||
name = "characteristic_edges", | |||
@@ -134,6 +137,15 @@ public final class Characteristic implements Comparable<Characteristic> { | |||
return this; | |||
} | |||
public Boolean getEnabled() { | |||
return enabled; | |||
} | |||
public Characteristic setEnabled(Boolean b) { | |||
this.enabled = b; | |||
return this; | |||
} | |||
public Characteristic addChildren(Characteristic... list) { | |||
if (list != null) { | |||
for (Characteristic c : list) { |
@@ -19,6 +19,7 @@ | |||
*/ | |||
package org.sonar.api.qualitymodel; | |||
import com.google.common.collect.Lists; | |||
import org.apache.commons.lang.StringUtils; | |||
import org.apache.commons.lang.builder.ToStringBuilder; | |||
import org.apache.commons.lang.builder.ToStringStyle; | |||
@@ -44,7 +45,7 @@ public final class Model implements Comparable<Model> { | |||
private String name; | |||
@OneToMany(mappedBy = "model", cascade = CascadeType.ALL, fetch = FetchType.LAZY) | |||
private List<Characteristic> characteristics = new ArrayList<Characteristic>(); | |||
private List<Characteristic> characteristics = Lists.newArrayList(); | |||
/** | |||
* Use the factory method <code>Model</code> | |||
@@ -104,32 +105,57 @@ public final class Model implements Comparable<Model> { | |||
return c; | |||
} | |||
/** | |||
* @return enabled characteristics | |||
*/ | |||
public List<Characteristic> getCharacteristics() { | |||
return characteristics; | |||
return getCharacteristics(true); | |||
} | |||
public List<Characteristic> getCharacteristics(boolean onlyEnabled) { | |||
if (!onlyEnabled) { | |||
return characteristics; | |||
} | |||
List<Characteristic> result = Lists.newArrayList(); | |||
for (Characteristic characteristic : characteristics) { | |||
if (characteristic.getEnabled()) { | |||
result.add(characteristic); | |||
} | |||
} | |||
return result; | |||
} | |||
/** | |||
* Search for an ENABLED characteristic by its key. | |||
*/ | |||
public Characteristic getCharacteristicByKey(String key) { | |||
for (Characteristic characteristic : getCharacteristics()) { | |||
if (StringUtils.equals(key, characteristic.getKey())) { | |||
for (Characteristic characteristic : characteristics) { | |||
if (characteristic.getEnabled() && StringUtils.equals(key, characteristic.getKey())) { | |||
return characteristic; | |||
} | |||
} | |||
return null; | |||
} | |||
/** | |||
* Search for ENABLED characteristics by their depth. | |||
*/ | |||
public List<Characteristic> getCharacteristicsByDepth(int depth) { | |||
List<Characteristic> result = new ArrayList<Characteristic>(); | |||
List<Characteristic> result = Lists.newArrayList(); | |||
for (Characteristic c : characteristics) { | |||
if (c.getDepth()==depth) { | |||
if (c.getEnabled() && c.getDepth()==depth) { | |||
result.add(c); | |||
} | |||
} | |||
return result; | |||
} | |||
/** | |||
* Search for an ENABLED characteristic by its name. | |||
*/ | |||
public Characteristic getCharacteristicByName(String name) { | |||
for (Characteristic characteristic : getCharacteristics()) { | |||
if (StringUtils.equals(name, characteristic.getName())) { | |||
for (Characteristic characteristic : characteristics) { | |||
if (characteristic.getEnabled() && StringUtils.equals(name, characteristic.getName())) { | |||
return characteristic; | |||
} | |||
} |
@@ -28,6 +28,10 @@ class Characteristic < ActiveRecord::Base | |||
belongs_to :rule | |||
belongs_to :quality_model | |||
validates_uniqueness_of :name, :scope => :quality_model_id, :case_sensitive => false, :if => Proc.new { |c| c.rule_id.nil? } | |||
validates_length_of :name, :in => 1..100, :allow_blank => false, :if => Proc.new { |c| c.rule_id.nil? } | |||
validates_presence_of :quality_model | |||
def root? | |||
depth==1 |
@@ -21,7 +21,6 @@ class AddCharacteristicDescription < ActiveRecord::Migration | |||
def self.up | |||
add_column 'characteristics', 'description', :string, :null => true, :limit => 4000 | |||
Characteristic.reset_column_information | |||
end | |||
end |
@@ -0,0 +1,27 @@ | |||
# | |||
# Sonar, entreprise quality control 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 | |||
# | |||
class AddCharacteristicEnabled < ActiveRecord::Migration | |||
def self.up | |||
add_column 'characteristics', 'enabled', :boolean, :null => true | |||
Characteristic.reset_column_information | |||
end | |||
end |