/** * Copyright (C) 2008-2010, Squale Project - http://www.squale.org * * This file is part of Squale. * * Squale 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 any later version. * * Squale 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 General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Squale. If not, see <http://www.gnu.org/licenses/>. */ package org.squale.squalecommon.enterpriselayer.businessobject.rule; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; /** * Formule de calcul Une formule de calcul est associ�e � une ou plusieurs pratiques. Une formule s'applique � un seul * type de composant : une classe ou une m�thode par exemple. Elle d�crit la fa�on dont une note est attribu�e en * fonction de mesure(s). Plusieurs mesures peuvent �tre utilis�es dans la formule, par exemple une mesure mccabe et une * mesure sonarj. Une condition d'activation permet de calculer ou non une formule. La syntaxe de la condition est du * type Jython et ressemble � cel� : mccabe.wmc >= 8 Dans cet exemple, la mesure de type mccabe nomm�e wmc est utilis�e. * * @hibernate.class table="Formula" discriminator-value="AbstractFormula" // theoriquement pas besoin car classe * abstraite mutable="true" * @hibernate.discriminator column="subclass" type="string" not-null="true" */ public abstract class AbstractFormulaBO implements Serializable { /** Le type de formule SIMPLE */ public final static String TYPE_SIMPLE = "Simple"; /** Le type de formule SIMPLE */ public final static String TYPE_CONDITION = "Condition"; /** * Contient le niveau de la formule (Classe, m�thode, fichier, package ou projet) */ private String mComponentLevel; /** * Mesures composant la formules Par exemple une mesure de type McCabe et une mesure de type SonarJ */ private Collection mMeasureKinds = new ArrayList(); /** * @return niveau du composant associ� * @hibernate.property name="componentLevel" column="ComponentLevel" type="string" not-null="false" unique="false" insert="true" update="true" */ public String getComponentLevel() { return mComponentLevel; } /** * Affecte le niveau du composant * * @param pComponentLevel level */ public void setComponentLevel( String pComponentLevel ) { mComponentLevel = pComponentLevel; } /** * Identifiant (au sens technique) de l'objet */ protected long mId = -1; /** * Access method for the mId property. * * @return the current value of the mId property Note: unsaved-value An identifier property value that indicates * that an instance is newly instantiated (unsaved), distinguishing it from transient instances that were * saved or loaded in a previous session. If not specified you will get an exception like this: another * object associated with the session has the same identifier * @hibernate.id generator-class="native" type="long" column="FormulaId" unsaved-value="-1" length="19" * @hibernate.generator-param name="sequence" value="formula_sequence" */ public long getId() { return mId; } /** * Sets the value of the mId property. * * @param pId the new value of the mId property */ public void setId( long pId ) { mId = pId; } /** Condition d'activation de la formule */ private String mTriggerCondition; /** * @return trigger * @hibernate.property name="triggerCondition" column="TriggerCondition" type="string" length="4000" * not-null="false" unique="false" insert = "true" update ="true" */ public String getTriggerCondition() { return mTriggerCondition; } /** * @param pString trigger */ public void setTriggerCondition( String pString ) { mTriggerCondition = pString; } /** * @return mesures * @hibernate.bag table="Formula_Measures" lazy="false" cascade="none" * @hibernate.key column="FormulaId" * @hibernate.element column="Measure" type="string" not-null="false" unique="false" */ public Collection getMeasureKinds() { return mMeasureKinds; } /** * @param pStrings mesures */ public void setMeasureKinds( Collection pStrings ) { mMeasureKinds = pStrings; } /** * Ajout d'un type de mesure * * @param pMeasureKind mesure */ public void addMeasureKind( String pMeasureKind ) { mMeasureKinds.add( pMeasureKind ); } /** * @param pVisitor visiteur * @param pArgument argument * @return objet */ public abstract Object accept( FormulaVisitor pVisitor, Object pArgument ); /** * @return le type */ public abstract String getType(); }