/*
*
* 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.plugins.jacms.aps.system.services.content.model;
/**
* Rappresenta un "link simbolico", che può rappresentare destinazioni di vario tipo,
* interne ed esterne al portale, e le traduce in (o da) una stringa simbolica.
* Modalità d'uso tipiche: se si desidera ottenere la stringa che rappresenta simbolicamente
* una destinazione, si inizializza l'istanza con i metodi setDestinationToXXX, che impostano
* il tipo e i parametri della destinazione, e successivamente si invoca il metodo
* getSymbolicDestination. Se si desidera ottenere il tipo e i parametri di destinazione
* a partire da una stringa simbolica (precedentemente ottenuta dalla stessa classe),
* si inizializza l'istanza con il metodo setSymbolicDestination e si richiamano poi
* i metodi getDestType, getPageDest, getContentId, getUrlDest.
* @author E.Santoboni-S.Didaci
*/
public class SymbolicLink {
/**
* Imposta il link come "link a url". Riservato tipicamente a link esterni al portale
* @param url L'URL completo della destinazione del link (esempio: "http;//www.google.com")
*/
public void setDestinationToUrl(String url){
_destType = URL_TYPE;
_urlDest = url;
}
/**
* Imposta il link come "link a pagina", interno al portale.
* @param pageCode Il codice della pagina di destinazione.
*/
public void setDestinationToPage(String pageCode){
_destType = PAGE_TYPE;
_pageDest = pageCode;
}
/**
* Imposta il link come "link a contenuto", interno al portale.
* @param contentId Il codice del contenuto di destinazione.
*/
public void setDestinationToContent(String contentId){
_destType = CONTENT_TYPE;
_contentDest = contentId;
}
/**
* Imposta il link come "link a contenuto su pagina specificata", interno al portale.
* @param contentId Il codice del contenuto di destinazione.
* @param pageCode Il codice della pagina di destinazione.
*/
public void setDestinationToContentOnPage(String contentId, String pageCode){
_destType = CONTENT_ON_PAGE_TYPE;
_contentDest = contentId;
_pageDest = pageCode;
}
/**
* Restituisce il tipo del link simbolico.
* @return Il tipo, una delle costanti dichiarate in questa classe.
*/
public int getDestType(){
return _destType;
}
/**
* Restituisce l'identificativo del contenuto di destinazione. Il valore restituito
* è significativo nel caso che la destinazione impostata comprenda un contenuto.
* @return L'identificativo del contenuto di destinazione
*/
public String getContentDest(){
return _contentDest;
}
/**
* Restituisce il codice della pagina di destinazione. Il valore restituito
* è significativo nel caso che la destinazione impostata comprenda una pagina.
* @return Il codice della pagina di destinazione.
*/
public String getPageDest(){
return _pageDest;
}
/**
* Restituisce l'URL di destinazione. Il valore restituito
* è significativo nel caso che la destinazione impostata sia un URL.
* @return L'URL di destinazione.
*/
public String getUrlDest(){
return _urlDest;
}
/**
* Imposta la destinazione del link sulla destinazione specificata.
* @param symbolicDestination Destinazione simbolica, ottenuta in precedenza
* tramite il corrispondente metodo get di questa stessa classe.
* @return True se la stringa simbolica è corretta, false se la stringa
* simbolica è malformata.
*/
public boolean setSymbolicDestination(String symbolicDestination) {
boolean ok = false;
String params[] = this.extractParams(symbolicDestination);
if (params != null){
if (params[0].equals("U")) {
if (params.length >= 2) {
int length = symbolicDestination.length();
String urlDest = symbolicDestination.substring(4, length-2);
this.setDestinationToUrl(urlDest);
ok = true;
}
} else if (params[0].equals("P")) {
if (params.length == 2) {
this.setDestinationToPage(params[1]);
ok = true;
}
} else if (params[0].equals("C")) {
ok = false;
if (params.length == 2) {
this.setDestinationToContent(params[1]);
ok = true;
}
} else if (params[0].equals("O")) {
ok = false;
if (params.length == 3) {
this.setDestinationToContentOnPage(params[1], params[2]);
ok = true;
}
} else {
ok = false;
}
}
return ok;
}
/**
* Restituisce una stringa simbolica che rappresenta la destinazione precedentemente
* impostata con uno dei metodi setDestinationToXXX. La stringa può essere successivamente
* interpretata utilizzando il metodo setSymbolicDestination e richiedendo poi il tipo
* e le destinazioni del link tramite i metodi get.
* @return La strnga simbolica di destinazione.
*/
public String getSymbolicDestination(){
StringBuffer dest = new StringBuffer();
dest.append(SymbolicLink.SYMBOLIC_DEST_PREFIX);
switch(_destType){
case URL_TYPE:
dest.append("U;").append(_urlDest);
break;
case PAGE_TYPE:
dest.append("P;").append(_pageDest);
break;
case CONTENT_TYPE:
dest.append("C;").append(_contentDest);
break;
case CONTENT_ON_PAGE_TYPE:
dest.append("O;").append(_contentDest).append(';').append(_pageDest);
break;
}
dest.append(SymbolicLink.SYMBOLIC_DEST_POSTFIX);
return dest.toString();
}
private String[] extractParams(String symbolicDestination) {
String params[] = null;
if(symbolicDestination.startsWith(SymbolicLink.SYMBOLIC_DEST_PREFIX)
&& symbolicDestination.endsWith(SymbolicLink.SYMBOLIC_DEST_POSTFIX)){
symbolicDestination = symbolicDestination.substring(2, symbolicDestination.length() - 2);
params = symbolicDestination.split(";");
}
return params;
}
/**
* Restitusce i tipi destinazione; le chiavi dei tipi.
* @return I tipi delle destinazioni.
*/
public static int[] getDestinationTypes() {
int[] types = {URL_TYPE, PAGE_TYPE, CONTENT_TYPE, CONTENT_ON_PAGE_TYPE};
return types;
}
private int _destType;
private String _pageDest;
private String _contentDest;
private String _urlDest;
/**
* Tipo di destinazione del link: URL esterno.
*/
public static final int URL_TYPE = 1;
/**
* Tipo di destinazione del link: pagina del portale.
*/
public static final int PAGE_TYPE = 2;
/**
* Tipo di destinazione del link: contenuto visualizzato sul portale.
*/
public static final int CONTENT_TYPE = 3;
/**
* Tipo di destinazione del link: contenuto visualizzato su una pagina specifica del portale.
*/
public static final int CONTENT_ON_PAGE_TYPE = 4;
/**
* La stringa prefisso del link simbolico.
*/
public static final String SYMBOLIC_DEST_PREFIX = "#!";
/**
* La stringa suffisso del link simbolico.
*/
public static final String SYMBOLIC_DEST_POSTFIX = "!#";
}