/* Index ECM Engine - A system for managing the capture (when created
* or received), classification (cataloguing), storage, retrieval,
* revision, sharing, reuse and disposition of documents.
*
* Copyright (C) 2008 Regione Piemonte
* Copyright (C) 2008 Provincia di Torino
* Copyright (C) 2008 Comune di Torino
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2,
* or (at your option) any later version.
*
* This program 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 General Public License
* along with this program; if not, write to the Free Software
* Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
package it.doqui.index.ecmengine.business.foundation.contentmanagement;
import it.doqui.index.ecmengine.exception.contentmanagement.CheckOutCheckInRuntimeException;
import java.io.Serializable;
import java.util.Map;
import javax.ejb.EJBLocalObject;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName;
/**
* Interfaccia pubblica del servizio di check-out e check-in esportata come
* componente EJB 2.1. L'implementazione dei metodi qui dichiarati è
* contenuta nella classe {@link CheckOutCheckInSvcBean}.
*
* <p>Tutti i metodi esportati dal bean di check-out e check-in rimappano le
* {@code RuntimeException} ricevute in
* {@link CheckOutCheckInRuntimeException}.
* </p>
*
* @author Doqui
*
* @see CheckOutCheckInSvcBean
* @see CheckOutCheckInRuntimeException
*/
public interface CheckOutCheckInSvc extends EJBLocalObject {
/**
* Permette di cancellare il checkuot sul la working copy del nodo passato in input.
* <p>
* Il lock in read only sul nodo originale e' rimosso e la working copy viene rimossa.
* <p>
* Tutte le modifiche effettuate sulla working copy vengono perdute e il nodo originale non verra'
* modificato.
*
* @param node Nodo su cui cancellare il checkout.
* @return NodeRef del nodo su cui si e' cancellato il checkout
*
* @throws CheckOutCheckInRuntimeException Se si verifica un errore durante l'operazione.
*/
NodeRef cancelCheckout(NodeRef node) throws CheckOutCheckInRuntimeException;
/**
* Restituisce il nodo dopo l'operazione di checkin (Se non viene specificato il content url per l'operazione di
* check in, il content settato sulla working copy e' considerato come il corrente)
*
* @param node Nodo su cui applicare il checkin.
* @param versionProperties se valorizzato crea una nuova versione del contenuto con i valori passati in input.
* @return NodeRef puntamento al nodo su cui viene fatto il checkin
*
* @throws CheckOutCheckInRuntimeException Se si verifica un errore durante l'operazione.
*/
NodeRef checkin(NodeRef node, Map<String, Serializable> versionProperties)
throws CheckOutCheckInRuntimeException;
/**
* Restituisce il nodo dopo l'operazione di checkin. (per default il node su cui viene richiesto il check in non mantiene
* lo stato di check in.
*
* @param node Nodo su cui applicare il checkin.
* @param versionProperties se valorizzato crea una nuova versione del contenuto con i valori passati in input.
* @param contentUrl se valorizzato crea l aworking copy sulla posizione contentUrl.
* @return NodeRef puntamento al nodo su cui viene fatto il checkin)
*
* @throws CheckOutCheckInRuntimeException Se si verifica un errore durante l'operazione.
*/
NodeRef checkin(NodeRef node, Map<String, Serializable> versionProperties, String contentUrl)
throws CheckOutCheckInRuntimeException;
/**
* Effettua l'operazione di check in sul working node specificato.
* <p>
* Quando viene effettuata un'operazione di check in la working copy viene copiata sul nodo originale
* (Questa operazione include ogni modifica al contenuto effettuato sul working node.
* <p>
* Se viene fornita una versione, il nodo originale verra' modificata in base alla versione passata in
* input.
* <p>
* Se viene fornito un contentUrl, questo verra' utilizzato per modificare il contenuto della working copy
* prima che venga effettua l'operazione di check in.
* <p>
* Terminata l'operazione di check in il lock in lettura sul nodo originale, applicato durante l'operazione
* di check out sara' rimosso e la working copy del nodo verra' rimossa dal repository, a meno che venga
* impostato il parametro keepCheckedOut in modoo da mantenere il check out sul nodo originale (In tal
* caso il read only lock e la working copy rimarranno sul repository).
* <p>
*
* @param node Nodo su cui applicare il checkin.
* @param versionProperties se valorizzato crea una nuova versione del contenuto con i valori passati in input.
* @param contentUrl se valorizzato crea la working copy sulla posizione contentUrl.
* @param keepCheckedOut se valorizzato a true il nodo viene lockato con permessi di READ_ONLY, se valorizzato
* a false (valore di default) cancellazione della working copy del nodo creata dall'operazione di checkout.
* @return NodeRef puntamento al nodo originale
*
* @throws CheckOutCheckInRuntimeException Se si verifica un errore durante l'operazione.
*/
NodeRef checkin(NodeRef node, Map<String, Serializable> versionProperties, String contentUrl, boolean keepCheckedOut)
throws CheckOutCheckInRuntimeException;
/**
* Effettua l'operazione di checkout di un nodo ponendo la working copy nel medesimo parent node con
* la medesima child association.
*
* @param node Nodo su cui applicare il checkout.
* @return NodeRef del nodo che contiene la working copy del nodo.
*
* @throws CheckOutCheckInRuntimeException Se si verifica un errore durante l'operazione.
*/
NodeRef checkout(NodeRef node) throws CheckOutCheckInRuntimeException;
/**
* Effettua l'operazione di checkout mettendo la working copy nella destinazione specificata.
* <p>
* Quando ad un nodo e' applicata un'operazione di check-out, su tale nodo viene inserito un lock
* in read-only e la working copy viene inserita nella destinazione specificata.
* <p>
* Sulla working copy viene applicato un copy aspect in modo che venga identificato come working copy
* di un nodo a cui e' stato applicato un checkout.
* <p>
* Il nodo working copy e' restituito come parametro di output.
*
* @param node Nodo su cui applicare il checkout.
* @param destinationParentNodeRef Nodo parent di destinazione.
* @param destinationAssocTypeQName tipo di asscociazione della destination della working copy.
* @param destinationAssocQName associazione della destination della working copy.
* @return NodeRef del nodo che contiene la working copy del nodo.
*
* @throws CheckOutCheckInRuntimeException Se si verifica un errore durante l'operazione.
*/
NodeRef checkout(NodeRef node, NodeRef destinationParentNodeRef, QName destinationAssocTypeQName, QName destinationAssocQName)
throws CheckOutCheckInRuntimeException;
/**
* Restituisce la reference alla working copy del nodo a cui per un nodo su cui e' stato applicata
* l'operazione di check out.
* <p>
* Se il nodo non e' in stato di check out viene restituito null.
*
* @param node Nodo su cui controllare la working copy
* @return NodeRef contenente la working copy, null se al nodo non e' associata alcuna working copy.
*
* @throws CheckOutCheckInRuntimeException Se si verifica un errore durante l'operazione.
*/
NodeRef getWorkingCopy(NodeRef node) throws CheckOutCheckInRuntimeException;
}