/* 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.security;
import it.doqui.index.ecmengine.exception.security.AuthorityRuntimeException;
import java.util.Set;
import javax.ejb.EJBLocalObject;
import org.alfresco.service.cmr.security.AuthorityType;
/**
* Interfaccia pubblica del servizio di gestione delle authority esportata come
* componente EJB 2.1. L'implementazione dei metodi qui dichiarati è
* contenuta nella classe {@link AuthoritySvcBean}.
*
* <p>Tutti i metodi esportati dal bean rimappano le
* {@code RuntimeException} ricevute in
* <code>{@link AuthorityRuntimeException}</code>.
* </p>
* <p>Un'authority è identificata da un <i>nome completo</i> costruito a partire
* dal tipo e dal <i>nome breve</i>. Se non specificato diversamente in seguito si
* intenderà con "nome" il nome completo.
* </p>
*
* @author Doqui
*
* @see AuthoritySvcBean
* @see AuthorityRuntimeException
*/
public interface AuthoritySvc extends EJBLocalObject {
/**
* Aggiunge una authority come figlia di un'altra authority.
*
* @param parentName Il nome dell'authority madre.
* @param childName Il nome dell'authority figlia.
*
* @throws AuthorityRuntimeException Se si verifica un errore durante l'esecuzione.
*/
void addAuthority(String parentName, String childName) throws AuthorityRuntimeException;
/**
* Verifica se l'authority identificata dal nome specificato in input esiste.
*
* @param name Il nome completo dell'authority di cui si vuole verificare
* l'esistenza.
*
* @return <code>true</code> se l'authority esiste, <code>false</code> altrimenti.
*
* @throws AuthorityRuntimeException Se si verifica un errore durante l'esecuzione.
*/
boolean authorityExists(String name) throws AuthorityRuntimeException;
/**
* Crea una nuova authority a partire la nome breve e dal tipo indicati in input
* e la aggiunge come figlia dell'authority specificata. L'authority viene creata
* solo se il tipo specificato è un tipo modificabile, altrimenti la
* chiamata al metodo genera una condizione di errore di tipo
* <code>{@link it.doqui.index.ecmengine.exception.security.AuthorityRuntimeException}</code>.
*
* @param type Il tipo della nuova authority (deve essere un tipo modificabile).
* @param parentName Il nome dell'authority madre (o <code>null</code> per
* creare una <i>root authority</i>).
* @param shortName Il nome breve dell'authority da creare.
*
* @return Il nome della nuova authority creata.
*
* @see it.doqui.index.ecmengine.exception.security.AuthorityRuntimeException
*
* @throws AuthorityRuntimeException Se si verifica un errore durante l'esecuzione.
*/
String createAuthority(AuthorityType type, String parentName, String shortName)
throws AuthorityRuntimeException;
/**
* Elimina dal repository un'authority e tutte le sue relazioni con altri nodi.
*
* @param name Il nome dell'authority da eliminare.
*
* @throws AuthorityRuntimeException Se si verifica un errore durante l'esecuzione.
*/
void deleteAuthority(String name) throws AuthorityRuntimeException;
/**
* Fornisce un insieme di tutte le authority conosciute dal sistema filtrate
* in base al tipo specificato. Specificare <code>null</code> come tipo
* equivale a cercare tutte le authority.
*
* @param type Il tipo in base al quale filtrare il risultato (o
* <code>null</code> per includere tutte le authority).
*
* @return Un <code>Set</code> contenente tutte le authority che corrispondono
* al tipo specificato.
*
* @throws AuthorityRuntimeException Se si verifica un errore durante l'esecuzione.
*/
Set<String> getAllAuthorities(AuthorityType type) throws AuthorityRuntimeException;
/**
* <p>Fornisce un insieme di tutte le <i>root authority</i> conosciute dal
* sistema filtrate in base al tipo specificato. Specificare
* <code>null</code> come tipo equivale a cercare tutte le authority.</p>
*
* <p>Una <i>root authority</i> è un'authority per la quale non esiste
* un'authority madre.</p>
*
* @param type Il tipo in base al quale filtrare il risultato (o
* <code>null</code> per includere tutte le authority).
*
* @return Un <code>Set</code> contenente tutte le root authority che corrispondono
* al tipo specificato.
*
* @throws AuthorityRuntimeException Se si verifica un errore durante l'esecuzione.
*/
Set<String> getAllRootAuthorities(AuthorityType type) throws AuthorityRuntimeException;
/**
* Restituisce un insieme di tutte le authority (di qualunque tipo esse siano)
* associate all'utente correnteo.
*
* @return Un <code>Set</code> contenente tutte le authority associate all'utente
* corrente.
*
* @throws AuthorityRuntimeException Se si verifica un errore durante l'esecuzione.
*/
Set<String> getAuthorities() throws AuthorityRuntimeException;
/**
* Restituisce un insieme di authority contenute nell'authority specificata,
* filtrando il risultato in base al tipo specificato ed eventualmente limitando
* la ricerca al primo livello di annidamento.
*
* @param type Il tipo in base al quale filtrare il risultato (o
* <code>null</code> per includere tutte le authority).
* @param name Il nome dell'authority contenitore in cui effettuare la ricerca.
* @param immediate La profondità di ricerca:
* <ul>
* <li><code>true</code> = limitata al primo livello di annidamento</li>
* <li><code>false</code> = ricorsiva</li>
* </ul>
*
* @return Un <code>Set</code> contenente tutte le root authority che corrispondono
* ai criteri specificati.
*
* @throws AuthorityRuntimeException Se si verifica un errore durante l'esecuzione.
*/
Set<String> getContainedAuthorities(AuthorityType type, String name, boolean immediate)
throws AuthorityRuntimeException;
/**
* Restituisce un insieme di authority che contengono l'authority specificata,
* filtrando il risultato in base al tipo specificato ed eventualmente limitando
* la ricerca al primo livello di contenimento.
*
* @param type Il tipo in base al quale filtrare il risultato (o
* <code>null</code> per includere tutte le authority).
* @param name Il nome dell'authority contenuta su cui effettuare la ricerca.
* @param immediate La profondità di ricerca:
* <ul>
* <li><code>true</code> = limitata al primo livello di contenimento</li>
* <li><code>false</code> = ricorsiva</li>
* </ul>
*
* @return Un <code>Set</code> contenente tutte le root authority che corrispondono
* ai criteri specificati.
*
* @throws AuthorityRuntimeException Se si verifica un errore durante l'esecuzione.
*/
Set<String> getContainingAuthorities(AuthorityType type, String name, boolean immediate)
throws AuthorityRuntimeException;
/**
* Restituisce il nome completo di un'authority partendo dal tipo e dal nome
* breve specificati.
*
* @param type Il tipo di authority.
* @param shortName Il nome breve dell'authority.
*
* @return Il nome completo che identifica l'authority.
*
* @throws AuthorityRuntimeException Se si verifica un errore durante l'esecuzione.
*/
String getName(AuthorityType type, String shortName) throws AuthorityRuntimeException;
/**
* Restituisce il nome breve di un'authority partendo dal nome completo
* specificato.
*
* @param name Il nome completo dell'authority.
*
* @return Il nome breve dell'authority.
*
* @throws AuthorityRuntimeException Se si verifica un errore durante l'esecuzione.
*/
String getShortName(String name) throws AuthorityRuntimeException;
/**
* Controlla se all'utente corrente è associata l'authority di
* amministrazione.
*
* @return <code>true</code> se l'utente corrente è associato
* all'authority amministrativa, <code>false</code> altrimenti.
*
* @throws AuthorityRuntimeException Se si verifica un errore durante l'esecuzione.
*/
boolean hasAdminAuthority() throws AuthorityRuntimeException;
/**
* <p>Rimuove un'authority dall'insieme delle figlie di un'altra authority. Se
* l'authority rimossa non ha più un'authority madre, essa diventa una
* <i>root authority</i>.</p>
*
* <p><strong>NB:</strong> questo metodo non elimina l'authority, ma la sola
* associazione "madre - figlia". Per eliminare un'authority è
* necessario usare il metodo <code>{@link #deleteAuthority(String)}</code>.</p>
*
* @param parentName Il nome dell'authority madre.
* @param childName Il nome dell'authority figlia.
*
* @throws AuthorityRuntimeException Se si verifica un errore durante l'esecuzione.
*/
void removeAuthority(String parentName, String childName) throws AuthorityRuntimeException;
}