/*
*
* 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.url;
import java.util.Iterator;
import java.util.Map;
import com.agiletec.aps.system.RequestContext;
import com.agiletec.aps.system.common.AbstractService;
/**
* Servizio di creazione di URL alle risorse del sistema. Per ora è previsto
* solo l'URL da utilizzare come link ad una pagina del portale.<br>
* Costituisce anche la factory per gli oggetti PageURL.
* La classe è astratta in quanto la mappatura tra url e risorse può
* essere differente a seconda delle esigenze. Ad esempio, in un portale
* multilingua può essere utile introdurre il codice lingua come parte
* dell'URL delle pagine. Alcuni metodi di validità generale sono implementati.
* @author M.Diana
*/
public abstract class AbstractURLManager extends AbstractService implements IURLManager {
/**
* Crea e restituisce un oggetto PageURL.<br>
* N.B.: l'oggetto restituito deve essere utilizzato nell'ambito
* della richiesta corrente (non memorizzarlo in modo più persistente, ad
* esempio in sessione) in quanto contiene riferimenti ad altri servizi.
* @param reqCtx Il contesto della richiesta.
* @return L'oggetto creato.
*/
@Override
public PageURL createURL(RequestContext reqCtx){
PageURL pageUrl = new PageURL(this, reqCtx);
return pageUrl;
}
/**
* Costruisce la query string a partire dai parametri passati.
* @param params Una mappa di parametri, indicizzata in base al nome.
* @return La query string; se la mappa passata è nulla o vuota restituisce
* una stringa vuota, se la mappa non è vuota la stringa restituita comprende
* il carattere ? di introduzione e il separatore & se ci sono più parametri.
*/
protected String createQueryString(Map<String, String> params) {
String queryString = "";
if (params != null && !params.isEmpty()) {
StringBuffer buf = new StringBuffer();
buf.append("?");
Iterator<String> keyIter = params.keySet().iterator();
int index = 1;
while (keyIter.hasNext()) {
String name = keyIter.next();
buf.append(name + '=' + params.get(name));
if (index != params.size()) {
buf.append("&");
index++;
}
}
queryString = buf.toString();
}
return queryString;
}
}