/*
*
* 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.Map;
import javax.servlet.http.HttpServletResponse;
import com.agiletec.aps.system.ApsSystemUtils;
import com.agiletec.aps.system.RequestContext;
import com.agiletec.aps.system.SystemConstants;
import com.agiletec.aps.system.services.baseconfig.ConfigInterface;
import com.agiletec.aps.system.services.lang.ILangManager;
import com.agiletec.aps.system.services.lang.Lang;
import com.agiletec.aps.system.services.page.IPage;
import com.agiletec.aps.system.services.page.IPageManager;
import com.agiletec.aps.system.services.page.PageUtils;
/**
* Servizio di gestione degli url; crea un URL completo ad una pagina del portale
* a partire da informazioni essenziali.
* @author M.Diana - E.Santoboni
*/
public class URLManager extends AbstractURLManager {
@Override
public void init() throws Exception {
ApsSystemUtils.getLogger().config(this.getClass().getName() + ": initialized");
}
/**
* Crea un URL completo ad una pagina del portale a partire dalle informazioni
* essenziali contenute nell'oggetto pageUrl passato come parametro.<br>
* In questa implementazione, l'URL è costruito come concatenazione dei seguenti elementi:
* <ul>
* <li> parametro di configurazione PAR_APPL_BASE_URL, che rappresenta l'URL
* base della web application così come viene visto dall'esterno; deve comprendere
* la stringa "http://" e deve terminare con "/";
* </li>
* <li> codice della lingua impostata nell'oggetto pageUrl, oppure la lingua corrente,
* oppure la lingua di default;
* </li>
* <li> se il parametro "urlStyle" è settato a "classic", codice della pagina corrente impostata nell'oggetto pageUrl
* seguito dal suffisso ".wp", altrimenti, se il parametro "urlStyle" è settato a "breadcrumbs",
* "/pages/" seguito dal'insieme del codici pagina dalla root alla pagina corrente separati da "/";
* </li>
* <li> eventuale query string se sull'oggetto pageUrl sono stati impostati parametri.
* </li>
* </ul>
* @param pageUrl L'oggetto contenente le informazioni da tradurre in URL.
* @param Il contesto della richiesta.
* @return La Stringa contenente l'URL.
* @see com.agiletec.aps.system.services.url.AbstractURLManager#getURLString(com.agiletec.aps.system.services.url.PageURL, com.agiletec.aps.system.RequestContext)
*/
@Override
public String getURLString(PageURL pageUrl, RequestContext reqCtx) {
String langCode = pageUrl.getLangCode();
Lang lang = this.getLangManager().getLang(langCode);
if (lang == null) {
lang = (Lang) reqCtx.getExtraParam(SystemConstants.EXTRAPAR_CURRENT_LANG);
if (lang == null) {
lang = this.getLangManager().getDefaultLang();
}
}
String pageCode = pageUrl.getPageCode();
IPage page = this.getPageManager().getPage(pageCode);
if (page == null) {
page = (IPage) reqCtx.getExtraParam(SystemConstants.EXTRAPAR_CURRENT_PAGE);
}
if (page == null) {
page = this.getPageManager().getRoot();
}
String url = this.createUrl(page, lang, pageUrl.getParams());
HttpServletResponse resp = reqCtx.getResponse();
String encUrl = resp.encodeURL(url.toString());
return encUrl;
}
/**
* Create and return url by required page, lang and request params.
* @param requiredPage The required page.
* @param requiredLang The required lang.
* @param params A map of params. It can be null.
* @return The url.
*/
@Override
public String createUrl(IPage requiredPage, Lang requiredLang, Map<String, String> params) {
StringBuffer url = new StringBuffer();
url.append(this.getConfigManager().getParam(SystemConstants.PAR_APPL_BASE_URL));
if (!this.isUrlStyleBreadcrumbs()) {
url.append(requiredLang.getCode()).append('/');
url.append(requiredPage.getCode()).append(".page");
} else {
url.append("pages/");
url.append(requiredLang.getCode()).append('/');
StringBuffer fullPath = PageUtils.getFullPath(requiredPage, "/");
url.append(fullPath.append("/"));
}
String queryString = this.createQueryString(params);
url.append(queryString);
return url.toString();
}
protected boolean isUrlStyleBreadcrumbs() {
String param = this.getConfigManager().getParam(SystemConstants.CONFIG_PARAM_URL_STYLE);
return (param != null && param.trim().equalsIgnoreCase(SystemConstants.CONFIG_PARAM_URL_STYLE_BREADCRUMBS));
}
protected ConfigInterface getConfigManager() {
return _configManager;
}
public void setConfigManager(ConfigInterface configManager) {
this._configManager = configManager;
}
protected ILangManager getLangManager() {
return _langManager;
}
public void setLangManager(ILangManager langManager) {
this._langManager = langManager;
}
protected IPageManager getPageManager() {
return _pageManager;
}
public void setPageManager(IPageManager pageManager) {
this._pageManager = pageManager;
}
private ConfigInterface _configManager;
private IPageManager _pageManager;
private ILangManager _langManager;
}