/*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
* This file is part of Entando software.
* Entando is a free software;
* You can redistribute it and/or modify it
* under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2.
*
* See the file License for the specific language governing permissions
* and limitations under the License
*
*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
*/
package com.agiletec.plugins.jpnewsletter.aps.system.services.newsletter;
import java.util.Date;
import java.util.List;
import com.agiletec.aps.system.exception.ApsSystemException;
import com.agiletec.plugins.jpnewsletter.aps.system.services.newsletter.model.NewsletterContentReportVO;
import com.agiletec.plugins.jpnewsletter.aps.system.services.newsletter.model.NewsletterReport;
import com.agiletec.plugins.jpnewsletter.aps.system.services.newsletter.model.Subscriber;
/**
* Interfaccia base per i Data Access Object delegati alle operazioni
* sugli oggetti contenenti le informazioni di spedizione newsletter.
* @author E.Mezzano, A.Turrini
*/
public interface INewsletterDAO {
/**
* Aggiunge il contenuto di id dato alla coda della newsletter.
* @param contentId L'id del contenuto da aggiungere alla coda.
*/
public void addContentToQueue(String contentId);
/**
* Rimuove il contenuto di id dato dalla coda della newsletter.
* @param contentId L'id del contenuto da rimuovere dalla coda.
*/
public void deleteContentFromQueue(String contentId);
/**
* Recupera la lista degli id dei contenuti in coda per la newsletter.
* @return La coda della newsletter, contenente gli id dei contenuti da inviare.
*/
public List<String> loadContentQueue();
/**
* Rimuove dalla coda gli id di contenuto dati.
* @param queue La lista di id di contenuto da rimuovere dalla newsletter.
*/
public void cleanContentQueue(List<String> queue);
/**
* Aggiunge al database le newsletter inviate.
* @param newsletterReport Il report della newsletter inviata.
*/
public void addNewsletterReport(NewsletterReport newsletterReport);
/**
* Recupera il report di una newsletter inviata.
* @return Il report della newsletter inviata.
*/
public NewsletterContentReportVO loadContentReport(String contentId);
/**
* Recupera la lista completa degli id dei contenuti inviati tramite newsletter.
* @return Gli id dei contenuti inviati tramite newsletter.
*/
public List<String> loadSentContentIds();
/**
* Restituisce true se risulta inviato il contenuto di id dato, false altrimenti.
* @param contentId L'id del contenuto dato.
* @return true se risulta inviato il contenuto di id dato, false altrimenti.
*/
public boolean existsContentReport(String contentId);
/**
* Carica la lista dei sottoscritti al servizio di newsletter
*
* @return la lista dei sottoscritti.
* @throws ApsSystemException
*/
public List<Subscriber> loadSubscribers() throws ApsSystemException;
/**
* Carica la lista dei sottoscritti al servizio di newsletter per indirizzo e-mail e stato di attivazione
*
* @param mailAddress l'indirizzo e-mail da ricercare
* @param lo stato di attivazione da ricercare
* @return la lista dei sottoscritti.
* @throws ApsSystemException
*/
public List<Subscriber> searchSubscribers(String mailAddress, Boolean active) throws ApsSystemException;
/**
* Carica un sottoscritto al servizio di newsletter
*
* @param mailAddress l'indirizzo e-mail di un sottoscritt
* @return il sottoscritto al servizio, se presente
* @throws ApsSystemException
*/
public Subscriber loadSubscriber(String mailAddress) throws ApsSystemException;
/**
* Aggiunge una sottoscrizione al servizio
* Se il token è diverso da null aggiunge il token.
*
* @param subscriber The subscriber to add.
* @param token The token of the subscription.
* @throws ApsSystemException
*/
public void addSubscriber(Subscriber subscriber, String token) throws ApsSystemException;
/**
* Aggiorna una sottoscrizione al servizio.
* Se il token è diverso da null aggiorna/aggiunge il token.
*
* @param subscriber The subscriber to add.
* @param token The token of the subscription.
* @throws ApsSystemException
*/
public void updateSubscriber(Subscriber subscriber, String token) throws ApsSystemException;
/**
* Cancella una sottoscrizione al servizio
*
* @param mailAddress l'indirizzo e-mail da cancellare
* @return void
* @throws ApsSystemException
*/
public void deleteSubscriber(String mailAddress) throws ApsSystemException;
/**
* Attiva una sottoscrizione al servizio
*
* @param mailAddress l'indirizzo e-mail da attivare
* @return void
* @throws ApsSystemException
*/
public void activateSubscriber(String mailAddress) throws ApsSystemException;
/**
* Returns the address from the associated token, if exist.
* */
public String getAddressFromToken(String token);
/**
* Remove from database a token.
* */
public void removeToken(String token);
/**
* Delete old request account, which has not been activated.
* */
public void cleanOldSubscribers(Date date);
}