/*
*
* Copyright 2005 AgileTec s.r.l. (http://www.agiletec.it) All rights reserved.
*
* This file is part of jAPS software.
* jAPS 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 2005 AgileTec s.r.l. (http://www.agiletec.it) All rights reserved.
*
*/
package com.agiletec.aps.system.services.page.showlet;
import java.util.List;
import com.agiletec.aps.system.RequestContext;
import com.agiletec.aps.system.services.page.IPage;
import com.agiletec.aps.system.services.user.UserDetails;
/**
* Classe di supporto per l'interpretazione delle espressioni che specificano sottoinsiemi
* di pagine. Utilizzata dal tag per la generazione di navigatori; il risultato
* dell'interpretazione è una lista di oggetti NavigatorTarget, che wrappano
* pagine del portale e possono essere utilizzati dai sub-tag. Le espressioni per
* la specificazione delle pagine da selezionare possono essere assolute o relative o miste,
* in riferimento alla pagina visualizzata (pagina corrente) e sono definite in base
* alla struttura ad albero delle pagine del portale (ogni pagina è un nodo).<BR>
* Le <b>espressioni</b> supportate seguono la seguente sintassi:<br>
* <code>expr1+expr2+ ... +exprn</code><br>
* dove ogni espressione rappresenta un insieme di pagine e il segno + è l'operatore
* di unione di insiemi.<br>
* Ogni espressione in forma di stringa ha la forma:<br>
* <code>page_spec</code><br>
* oppure:<br>
* <code>page_spec.operator</code><br>
* dove <code>page_spec</code> è una funzione di selezione di una singola pagina e
* <code>.operator</code> è un operatore che seleziona un sottoinsieme di pagine correlate alla
* pagina cui è applicato.<br><br>
* Solo nel caso dell'operatore "Subtree" gli oggetti NavigatorTarget restituiti
* hanno associato un valore significativo del livello nel sottoalbero; in tutti gli altri
* casi il livello ha valore zero.
* @author M.Diana
*/
public interface INavigatorParser {
/**
* Crea e restituisce una lista di oggetti NavigatorTarget, che wrappano
* pagine del portale e possono essere utilizzati dai sub-tag.
* @param spec L'espressione usata la specificazione delle pagine
* da selezionare; possono essere assolute o relative o miste.
* @param reqCtx Il contesto della richiesta corrente.
* @return La lista di oggetti NavigatorTarget.
*/
public List<NavigatorTarget> parseSpec(String spec, RequestContext reqCtx);
/**
* Crea e restituisce una lista di oggetti NavigatorTarget, che wrappano
* pagine del portale e possono essere utilizzati dai sub-tag.
* @param spec L'espressione usata la specificazione delle pagine
* da selezionare; possono essere assolute o relative o miste.
* @param currentPage La pagina corrente dove il tag è inserito.
* @param currentUser L'utente corrente.
* @return La lista di oggetti NavigatorTarget.
*/
public List<NavigatorTarget> parseSpec(String spec, IPage currentPage, UserDetails currentUser);
public String getSpec(List<NavigatorExpression> expressions);
public List<NavigatorExpression> getExpressions(String spec);
public static final String EXPRESSION_SEPARATOR = "+";
}