/** * 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.facade.message; import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.squale.jraf.commons.exception.JrafDaoException; import org.squale.jraf.commons.exception.JrafEnterpriseException; import org.squale.jraf.helper.PersistenceHelper; import org.squale.jraf.provider.persistence.hibernate.facade.FacadeHelper; import org.squale.jraf.spi.persistence.IPersistenceProvider; import org.squale.jraf.spi.persistence.ISession; import org.squale.squalecommon.daolayer.message.MessageDAOImpl; import org.squale.squalecommon.daolayer.message.NewsDAOImpl; import org.squale.squalecommon.datatransfertobject.message.MessageDTO; import org.squale.squalecommon.datatransfertobject.message.MessagesDTO; import org.squale.squalecommon.datatransfertobject.message.NewsDTO; import org.squale.squalecommon.datatransfertobject.message.NewsListDTO; import org.squale.squalecommon.datatransfertobject.transform.messages.MessageTransform; import org.squale.squalecommon.datatransfertobject.transform.messages.NewsTransform; import org.squale.squalecommon.enterpriselayer.businessobject.message.MessageBO; import org.squale.squalecommon.enterpriselayer.businessobject.message.NewsBO; import org.squale.squalecommon.enterpriselayer.facade.rule.QualityGridFacade; /** * Facade pour les messages */ public class MessageFacade { /** * provider de persistence */ private static final IPersistenceProvider PERSISTENTPROVIDER = PersistenceHelper.getPersistenceProvider(); /** * Importation de messages Les messages sont import�s � partir d'un flux et sont stock�s dans la base de donn�es Les * messages existants sont mis � jour si besoin, ils ne sont pas supprim�s * * @param pStream flux * @param pErrors erreurs * @return messages * @throws JrafEnterpriseException si erreur */ public static MessagesDTO importMessages( InputStream pStream, StringBuffer pErrors ) throws JrafEnterpriseException { MessagesDTO result = null; // Importation des messages depuis le flux XML MessageImport imp = new MessageImport(); Collection coll = imp.importMessages( pStream, pErrors ); if ( coll.size() != 0 ) { // On ne traite les messages que s'il n'y a pas eu d'erreur ISession session = null; try { // r�cup�ration d'une session session = PERSISTENTPROVIDER.getSession(); MessageDAOImpl messageDAO = MessageDAOImpl.getInstance(); // Cr�ation de chaque message charg� Iterator collIt = coll.iterator(); while ( collIt.hasNext() ) { MessageBO message = (MessageBO) collIt.next(); messageDAO.save( session, message ); } // R�cup�ration de tous les messages et pas seulement ceux import�s coll = messageDAO.findAll( session ); // Conversion des messages result = convertMessages( coll ); } catch ( JrafDaoException e ) { // Renvoi d'une exception FacadeHelper.convertException( e, QualityGridFacade.class.getName() + ".importMessages" ); } finally { // Fermeture de la session FacadeHelper.closeSession( session, QualityGridFacade.class.getName() + ".importMessages" ); } } return result; } /** * Obtention des messages * * @return messages * @throws JrafEnterpriseException si erreur */ public static MessagesDTO getMessages() throws JrafEnterpriseException { MessagesDTO result = null; ISession session = null; try { // r�cup�ration d'une session session = PERSISTENTPROVIDER.getSession(); MessageDAOImpl messageDAO = MessageDAOImpl.getInstance(); Collection coll = messageDAO.findAll( session ); result = convertMessages( coll ); } catch ( JrafDaoException e ) { FacadeHelper.convertException( e, QualityGridFacade.class.getName() + ".getMessages" ); } finally { FacadeHelper.closeSession( session, QualityGridFacade.class.getName() + ".getMessages" ); } return result; } /** * Conversion des messages * * @param pMessages messages le premier niveau de map �tant bas� sur la langue et le deuxi�me sur la clef du message * (le texte �tant la valeur) * @return messages */ private static MessagesDTO convertMessages( Collection pMessages ) { MessagesDTO result = new MessagesDTO(); Iterator messagesIt = pMessages.iterator(); while ( messagesIt.hasNext() ) { MessageBO message = (MessageBO) messagesIt.next(); result.addMessage( message.getLang(), message.getKey(), message.getText() ); } return result; } /** * @param pKind le param�tre permettant de savoir � partir de quand on doit les r�cup�rer * @param pLang la langue �ventuelle des news a r�cup�rer (peut etre null si sans importance) * @return la collection des news ou des messages * @throws JrafEnterpriseException en cas d'�chec */ public static NewsListDTO getNews( String pKind, String pLang ) throws JrafEnterpriseException { NewsListDTO result = new NewsListDTO(); Collection newsDtoColl = new ArrayList( 0 ); Collection aux = null; ISession session = null; try { // r�cup�ration d'une session session = PERSISTENTPROVIDER.getSession(); NewsDAOImpl dao = NewsDAOImpl.getInstance(); // on r�cup�re toutes les nouveaut�s suivant le param�tre kind // qui d�termine un crit�re en fonction de leurs dates aux = dao.findWhereKind( session, pKind ); if ( aux != null ) { MessageDAOImpl messageDAO = MessageDAOImpl.getInstance(); Iterator it = aux.iterator(); while ( it.hasNext() ) { // on a une collection de news, on doit r�cup�rer les messages associ�s NewsBO newsBo = (NewsBO) it.next(); NewsDTO newsDto = NewsTransform.bo2Dto( newsBo ); // on r�cup�re tous les messages qui ont leur cl� contenant une partie // de la cl� de nouveaut� associ� Collection messagesColl = messageDAO.findWhereKey( session, newsBo.getKey(), pLang ); if ( messagesColl != null ) { Iterator itMess = messagesColl.iterator(); while ( itMess.hasNext() ) { // un newsdto par message associ� newsDto = new NewsDTO(); newsDto = NewsTransform.bo2Dto( newsBo ); // transforme tous les messageBO trouv�s en dto MessageBO messBo = (MessageBO) itMess.next(); MessageDTO messDto = MessageTransform.bo2Dto( messBo ); // on repositionne la valeur du message newsDto.setMessage( messDto ); // et on ajoute le newsDto � la liste newsDtoColl.add( newsDto ); } } else { // pas de message associ� newsDtoColl.add( newsDto ); } } // ajoute la liste des newsDto au DTO qui les regroupe result.setNewsList( newsDtoColl ); } } catch ( JrafDaoException e ) { FacadeHelper.convertException( e, MessageFacade.class.getName() + ".getNews" ); } finally { FacadeHelper.closeSession( session, MessageFacade.class.getName() + ".getNews" ); } return result; } /** * @param newsDto la news qu'on veut supprimer * @throws JrafEnterpriseException en cas d'�chec */ public static void purgeNews( NewsDTO newsDto ) throws JrafEnterpriseException { ISession session = null; try { session = PERSISTENTPROVIDER.getSession(); NewsDAOImpl dao = NewsDAOImpl.getInstance(); NewsBO newsBo = NewsTransform.dto2Bo( newsDto ); MessageBO messBo = MessageTransform.dto2Bo( newsDto.getMessage() ); dao.removeNews( session, newsBo, messBo ); } catch ( JrafDaoException e ) { FacadeHelper.convertException( e, MessageFacade.class.getName() + ".purgeNews" ); } finally { FacadeHelper.closeSession( session, MessageFacade.class.getName() + ".purgeNews" ); } } /** * @param pNewsDto l'id de la news que l'on veut ajouter * @throws JrafEnterpriseException en cas d'�chec */ public static void addNews( NewsDTO pNewsDto ) throws JrafEnterpriseException { ISession session = null; try { session = PERSISTENTPROVIDER.getSession(); MessageBO messBO = MessageTransform.dto2Bo( pNewsDto.getMessage() ); NewsBO newsBO = NewsTransform.dto2Bo( pNewsDto ); NewsDAOImpl dao = NewsDAOImpl.getInstance(); dao.addNews( session, newsBO, messBO ); } catch ( JrafDaoException e ) { FacadeHelper.convertException( e, MessageFacade.class.getName() + ".addNews" ); } finally { FacadeHelper.closeSession( session, MessageFacade.class.getName() + ".addNews" ); } } /** * @param pNewsDto l'id de la news que l'on veut modifier * @throws JrafEnterpriseException en cas d'�chec */ public static void modifyNews( NewsDTO pNewsDto ) throws JrafEnterpriseException { ISession session = null; try { session = PERSISTENTPROVIDER.getSession(); MessageBO messBO = MessageTransform.dto2Bo( pNewsDto.getMessage() ); NewsBO newsBO = NewsTransform.dto2Bo( pNewsDto ); NewsDAOImpl dao = NewsDAOImpl.getInstance(); dao.modifyNews( session, newsBO, messBO ); } catch ( JrafDaoException e ) { FacadeHelper.convertException( e, MessageFacade.class.getName() + ".modifyNews" ); } finally { FacadeHelper.closeSession( session, MessageFacade.class.getName() + ".modifyNews" ); } } /** * @return la collection des langues disponibles * @throws JrafEnterpriseException en cas d'�chec */ public static Collection findLangs() throws JrafEnterpriseException { ISession session = null; Collection coll = null; try { session = PERSISTENTPROVIDER.getSession(); MessageDAOImpl messDao = MessageDAOImpl.getInstance(); coll = messDao.findLangs( session ); } catch ( JrafDaoException e ) { FacadeHelper.convertException( e, MessageFacade.class.getName() + ".modifyNews" ); } finally { FacadeHelper.closeSession( session, MessageFacade.class.getName() + ".modifyNews" ); } return coll; } /** * @param pKey la cl� dont on veut v�rifier si elle existe d�j� ou pas * @return true si la cl� existe d�j� * @throws JrafEnterpriseException en cas d'�chec */ public static Boolean newsAlreadyExists( String pKey ) throws JrafEnterpriseException { ISession session = null; Collection coll = null; try { session = PERSISTENTPROVIDER.getSession(); NewsDAOImpl messDao = NewsDAOImpl.getInstance(); coll = messDao.findWhereNewsKeyIs( session, pKey ); } catch ( JrafDaoException e ) { FacadeHelper.convertException( e, MessageFacade.class.getName() + ".modifyNews" ); } finally { FacadeHelper.closeSession( session, MessageFacade.class.getName() + ".modifyNews" ); } return new Boolean( coll.size() != 0 ); } /** * This method inserts the segment message in the database * * @param session The hibernate session * @param messageList The list of segment message to import * @throws JrafEnterpriseException exception occurs during the insert */ public static void importSegmentMessage( ISession session, List<MessageDTO> messageList ) throws JrafEnterpriseException { try { MessageDAOImpl messageDao = MessageDAOImpl.getInstance(); MessageBO messageBo; for ( MessageDTO messageDTO : messageList ) { messageBo = MessageTransform.dto2Bo( messageDTO ); messageDao.save( session, messageBo ); } } catch ( JrafDaoException e ) { FacadeHelper.convertException( e, MessageFacade.class.getName() + ".importSegmentMessage" ); } finally { FacadeHelper.closeSession( session, MessageFacade.class.getName() + ".importSegmentMessage" ); } } }