public class SchemaMigration { | public class SchemaMigration { | ||||
public final static int VERSION_UNKNOWN = -1; | 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"; | public final static String TABLE_NAME = "schema_migrations"; | ||||
<quality_models id="1" name="M1" /> | <quality_models id="1" name="M1" /> | ||||
<quality_models id="2" name="M2" /> | <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"/> | <characteristic_edges child_id="2" parent_id="1"/> | ||||
</dataset> | </dataset> |
<!-- NEW MODEL --> | <!-- NEW MODEL --> | ||||
<quality_models id="3" name="NEWMODEL" /> | <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"/> | <characteristic_edges child_id="2" parent_id="1"/> | ||||
</dataset> | </dataset> |
<quality_models id="2" name="M2" /> | <quality_models id="2" name="M2" /> | ||||
<quality_models id="3" name="M1" /> | <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="2" parent_id="1"/>--> | ||||
<characteristic_edges child_id="4" parent_id="5"/> | <characteristic_edges child_id="4" parent_id="5"/> |
<quality_models id="1" name="M1" /> | <quality_models id="1" name="M1" /> | ||||
<quality_models id="2" name="M2" /> | <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"/> | <characteristic_edges child_id="2" parent_id="1"/> | ||||
</dataset> | </dataset> |
<dataset> | <dataset> | ||||
<quality_models id="1" name="initial" /> | <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> | </dataset> |
<dataset> | <dataset> | ||||
<quality_models id="1" name="initial" /> | <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"/> | <characteristic_edges child_id="2" parent_id="1"/> | ||||
</dataset> | </dataset> |
<dataset> | <dataset> | ||||
<quality_models id="1" name="initial" /> | <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"/> | <characteristic_edges child_id="1" parent_id="1"/> | ||||
</dataset> | </dataset> |
@Column(name = "description", nullable = true, length = 4000) | @Column(name = "description", nullable = true, length = 4000) | ||||
private String description; | private String description; | ||||
@Column(name = "enabled", updatable = true, nullable = true) | |||||
private Boolean enabled = Boolean.TRUE; | |||||
@ManyToMany | @ManyToMany | ||||
@JoinTable( | @JoinTable( | ||||
name = "characteristic_edges", | name = "characteristic_edges", | ||||
return this; | return this; | ||||
} | } | ||||
public Boolean getEnabled() { | |||||
return enabled; | |||||
} | |||||
public Characteristic setEnabled(Boolean b) { | |||||
this.enabled = b; | |||||
return this; | |||||
} | |||||
public Characteristic addChildren(Characteristic... list) { | public Characteristic addChildren(Characteristic... list) { | ||||
if (list != null) { | if (list != null) { | ||||
for (Characteristic c : list) { | for (Characteristic c : list) { |
*/ | */ | ||||
package org.sonar.api.qualitymodel; | package org.sonar.api.qualitymodel; | ||||
import com.google.common.collect.Lists; | |||||
import org.apache.commons.lang.StringUtils; | import org.apache.commons.lang.StringUtils; | ||||
import org.apache.commons.lang.builder.ToStringBuilder; | import org.apache.commons.lang.builder.ToStringBuilder; | ||||
import org.apache.commons.lang.builder.ToStringStyle; | import org.apache.commons.lang.builder.ToStringStyle; | ||||
private String name; | private String name; | ||||
@OneToMany(mappedBy = "model", cascade = CascadeType.ALL, fetch = FetchType.LAZY) | @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> | * Use the factory method <code>Model</code> | ||||
return c; | return c; | ||||
} | } | ||||
/** | |||||
* @return enabled characteristics | |||||
*/ | |||||
public List<Characteristic> getCharacteristics() { | 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) { | 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 characteristic; | ||||
} | } | ||||
} | } | ||||
return null; | return null; | ||||
} | } | ||||
/** | |||||
* Search for ENABLED characteristics by their depth. | |||||
*/ | |||||
public List<Characteristic> getCharacteristicsByDepth(int depth) { | public List<Characteristic> getCharacteristicsByDepth(int depth) { | ||||
List<Characteristic> result = new ArrayList<Characteristic>(); | |||||
List<Characteristic> result = Lists.newArrayList(); | |||||
for (Characteristic c : characteristics) { | for (Characteristic c : characteristics) { | ||||
if (c.getDepth()==depth) { | |||||
if (c.getEnabled() && c.getDepth()==depth) { | |||||
result.add(c); | result.add(c); | ||||
} | } | ||||
} | } | ||||
return result; | return result; | ||||
} | } | ||||
/** | |||||
* Search for an ENABLED characteristic by its name. | |||||
*/ | |||||
public Characteristic getCharacteristicByName(String 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; | return characteristic; | ||||
} | } | ||||
} | } |
belongs_to :rule | belongs_to :rule | ||||
belongs_to :quality_model | 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? | def root? | ||||
depth==1 | depth==1 |
def self.up | def self.up | ||||
add_column 'characteristics', 'description', :string, :null => true, :limit => 4000 | add_column 'characteristics', 'description', :string, :null => true, :limit => 4000 | ||||
Characteristic.reset_column_information | |||||
end | end | ||||
end | end |
# | |||||
# 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 |