/**
* 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.squaleweb.applicationlayer.formbean;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Properties;
import java.util.regex.Pattern;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.squale.squalecommon.datatransfertobject.component.AuditDTO;
import org.squale.squalecommon.datatransfertobject.tag.TagDTO;
import org.squale.squalecommon.enterpriselayer.businessobject.component.AuditBO;
import org.squale.welcom.struts.bean.WActionFormSelectable;
/**
*/
public class RootForm
extends WActionFormSelectable
{
/**
* Logger for this class
*/
private static Log log = LogFactory.getLog( RootForm.class );
/** Regexp used to validate application or project names */
private static String VALIDATION_REGEXP;
static
{
Properties props = new Properties();
try
{
props.load( RootForm.class.getResourceAsStream( "RootForm.properties" ) );
VALIDATION_REGEXP = props.getProperty( "applicationAndProjectNameRegexp" );
}
catch ( IOException e )
{
log.fatal( "Impossible to load the \"RootForm.properties\" file.", e );
}
}
/** id de l'application */
protected String mApplicationId = "";
/** nom de l'application */
protected String mApplicationName = "";
/** Le nombre de projets appartenant � l'application */
protected String mNumberOfChildren = "";
/** la date de l'audit courant */
protected String mAuditDate = "";
/** la date de l'audit courant */
protected String mPreviousAuditDate = "";
/** le label de l'audit courant dans le cas d'un audit de jalon ou date sinon */
protected String mAuditName = "";
/** le label de l'audit pr�c�dent dans le cas d'un audit de jalon ou date sinon */
protected String mPreviousAuditName = "";
/** id du projet */
protected String mProjectId = "";
/** le nom du projet */
protected String mProjectName = "";
/** id de l'audit courant */
protected String mCurrentAuditId = "";
/** id de l'audit pr�c�dent */
protected String mPreviousAuditId = "";
/** Indique si les audits sont comparables */
protected boolean mComparableAudits;
/** Version de squale pour l'audit courant */
protected String mAuditSqualeVersion = "";
/** Liste des tags �ventuels associ�s � l'application */
protected Collection<TagDTO> mTags;
/** Map du TopMenu pour le projet courant */
protected HashMap mTopMenu = null;
/**
* @return l'id de l'application
*/
public String getApplicationId()
{
return mApplicationId;
}
/**
* @return l'id de l'audit courant
*/
public String getCurrentAuditId()
{
return mCurrentAuditId;
}
/**
* @return l'id de l'audit pr�c�dent
*/
public String getPreviousAuditId()
{
return mPreviousAuditId;
}
/**
* @return l'id du projet
*/
public String getProjectId()
{
return mProjectId;
}
/**
* @param pAppliId l'id de l'application
*/
public void setApplicationId( String pAppliId )
{
mApplicationId = pAppliId;
}
/**
* @param pCurrentAuditId l'id de l'audit courant
*/
public void setCurrentAuditId( String pCurrentAuditId )
{
mCurrentAuditId = pCurrentAuditId;
}
/**
* @param pPreviousAuditId l'id de l'audit pr�c�dent
*/
public void setPreviousAuditId( String pPreviousAuditId )
{
mPreviousAuditId = pPreviousAuditId;
}
/**
* @param pProjectId l'id du projet
*/
public void setProjectId( String pProjectId )
{
mProjectId = pProjectId;
}
/**
* @return le nom de l'application
*/
public String getApplicationName()
{
return mApplicationName;
}
/**
* @return le nom du projet
*/
public String getProjectName()
{
return mProjectName;
}
/**
* @param pApplicationName le nom de l'application
*/
public void setApplicationName( String pApplicationName )
{
mApplicationName = pApplicationName;
}
/**
* @param pProjectName le nom du projet
*/
public void setProjectName( String pProjectName )
{
mProjectName = pProjectName;
}
/**
* @return la date sous la forme d'une chaine
*/
public String getAuditDate()
{
return mAuditDate;
}
/**
* @return le label de l'audit courant
*/
public String getAuditName()
{
return mAuditName;
}
/**
* @param pLabel le label de l'audit courant
*/
public void setAuditName( String pLabel )
{
mAuditName = pLabel;
}
/**
* @return le label de l'audit pr�c�dent
*/
public String getPreviousAuditName()
{
return mPreviousAuditName;
}
/**
* @param pLabel le label de l'audit pr�c�dent
*/
public void setPreviousAuditName( String pLabel )
{
mPreviousAuditName = pLabel;
}
/**
* @param pDate la date sous la forme d'une chaine
*/
public void setAuditDate( String pDate )
{
mAuditDate = pDate;
}
/**
* @return le nombre de projets de l'application
*/
public String getNumberOfChildren()
{
return mNumberOfChildren;
}
/**
* @param pNumber le nombre de projets de l'application
*/
public void setNumberOfChildren( String pNumber )
{
mNumberOfChildren = pNumber;
}
/**
* @return la date de l'audit pr�c�dent
*/
public String getPreviousAuditDate()
{
return mPreviousAuditDate;
}
/**
* @param pPreviousAuditDate la date de l'audit
*/
public void setPreviousAuditDate( String pPreviousAuditDate )
{
mPreviousAuditDate = pPreviousAuditDate;
}
/**
* M�thode utilitaire permettant de copier les donn�es d'un form dans un autre
*
* @param pForm le form dont on veut r�cup�rer les valeurs
*/
public void copyValues( RootForm pForm )
{
mApplicationId = pForm.getApplicationId();
mApplicationName = pForm.getApplicationName();
mProjectId = pForm.getProjectId();
mProjectName = pForm.getProjectName();
mCurrentAuditId = pForm.getCurrentAuditId();
mPreviousAuditId = pForm.getPreviousAuditId();
mAuditDate = pForm.getAuditDate();
mPreviousAuditDate = pForm.getPreviousAuditDate();
mAuditName = pForm.getAuditName();
mPreviousAuditName = pForm.getPreviousAuditName();
mNumberOfChildren = pForm.getNumberOfChildren();
mAuditSqualeVersion = pForm.getAuditSqualeVersion();
mComparableAudits = pForm.getComparableAudits();
mTopMenu = pForm.getTopMenu();
}
/**
* V�rifie que le nom correspond bien au pattern
*
* @param pName le nom (application ou projet) � v�rifier
* @return true si le nom est valide par rapport au pattern
*/
protected boolean isAValidName( String pName )
{
// Si �a matche, alors c'est un nom valide
return Pattern.matches( VALIDATION_REGEXP, pName );
}
/**
* M�thode permettant de remettre � jour les propri�t�s d'un form avec les audits courants
*
* @param pAudits la liste des audits (actuel et pr�c�dent)
*/
public void resetAudits( List pAudits )
{
// Si il n'y a pas d'audits,ou pas d'audit courant, on reinitialise les 2 audits
if ( pAudits == null || pAudits.size() < 1 || pAudits.get( 0 ) == null )
{
resetAudits();
}
else
{
// ici, l'audit courant ne peut pas etre null
AuditDTO currentAudit = ( (AuditDTO) pAudits.get( 0 ) );
setCurrentAuditId( "" + currentAudit.getID() );
setAuditDate( "" + currentAudit.getFormattedDate() );
setAuditName( getAuditDate() );
// Formatage du nom dans le cas o� il s'agit d'un audit de jalon
if ( currentAudit.getType().equals( AuditBO.MILESTONE ) )
{
setAuditName( currentAudit.getName() + " (" + getAuditDate() + ")" );
}
// Gere l'audit pr�c�dent
if ( pAudits.size() < 2 || pAudits.get( 1 ) == null )
{
// L'audit pr�s�dant n'existe pas
setPreviousAuditId( "" );
setPreviousAuditDate( "" );
setPreviousAuditName( "" );
}
else
{
AuditDTO previousAudit = ( (AuditDTO) pAudits.get( 1 ) );
setPreviousAuditId( "" + previousAudit.getID() );
setPreviousAuditDate( "" + previousAudit.getFormattedDate() );
setPreviousAuditName( getPreviousAuditDate() );
// Formatage du nom dans le cas o� il s'agit d'un audit de jalon
if ( previousAudit.getType().equals( AuditBO.MILESTONE ) )
{
setPreviousAuditName( previousAudit.getName() + " (" + getPreviousAuditDate() + ")" );
}
}
}
}
/**
* Efface les donn�es pour les audits
*/
private void resetAudits()
{
// L'audit courant
setCurrentAuditId( "" );
setAuditDate( "" );
setAuditName( "" );
// L'audit pr�c�dent
setPreviousAuditId( "" );
setPreviousAuditDate( "" );
setPreviousAuditName( "" );
setAuditSqualeVersion( "" );
}
/**
* Efface les donn�es de l'audit pr�c�dent
*/
public void resetCache()
{
// L'application
setApplicationId( "" );
setApplicationName( "" );
setNumberOfChildren( "" );
setAuditSqualeVersion( "" );
// L'id du projet
setProjectId( "" );
setProjectName( "" );
// Le menu Top du projet
setTopMenu( null );
// Les audits
resetAudits();
}
/**
* @return la version de squale
*/
public String getAuditSqualeVersion()
{
return mAuditSqualeVersion;
}
/**
* @param pVersion la version de SQUALE
*/
public void setAuditSqualeVersion( String pVersion )
{
mAuditSqualeVersion = pVersion;
}
/**
* Access method for the mTags property.
*
* @return l'utilisateur ayant fait la derni�re modification
*/
public Collection<TagDTO> getTags()
{
return mTags;
}
/**
* Sets the value of the mTags property.
*
* @param pTags l'utilisateur ayant fait la derni�re modification
*/
public void setTags( Collection<TagDTO> pTags )
{
mTags = pTags;
}
/**
* @return le TopMenu du projet
*/
public HashMap getTopMenu()
{
return mTopMenu;
}
/**
* @param pTopMenu le TopMenu du projet
*/
public void setTopMenu( HashMap pTopMenu )
{
mTopMenu = pTopMenu;
}
/**
* @return true si les audits sont comparables
*/
public boolean getComparableAudits()
{
return mComparableAudits;
}
/**
* @param pComparable si les audits sont comparables
*/
public void setComparableAudits( boolean pComparable )
{
mComparableAudits = pComparable;
}
}