package com.idega.idegaweb;
/**
* A utilityclass for normalizing URL's, multy value parameters are stored under the same map key like so: <br>
* key = value1&key=value2&key=value3. GetFullURL will return the url with the parameters in alphabetical key order.
* Copyright: Copyright (c) 2001
* Company: idega
* @author <a href="tryggvi@idega.is">Tryggvi Larusson</a>
* @version 1.0
*/
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeMap;
import java.util.Vector;
import com.idega.core.builder.business.ICBuilderConstants;
import com.idega.presentation.IWContext;
import com.idega.presentation.Page;
import com.idega.presentation.ui.Parameter;
public class IWURL {
private static final String questionMark = "?";
private static final String equalsMark = "=";
private static final String ampersand = "&";
private String baseURL;
private static List globalMaintainedParameters;
private static List globalMaintainedBuilderParameters;
static{
globalMaintainedParameters = new Vector();
globalMaintainedParameters.add(Page.IW_FRAME_STORAGE_PARMETER);
globalMaintainedParameters.add(Page.IW_FRAME_CLASS_PARAMETER);
globalMaintainedParameters.add(IWMainApplication.classToInstanciateParameter);
globalMaintainedParameters.add(IWConstants.PARAM_NAME_OUTPUT_MARKUP_LANGUAGE);
globalMaintainedBuilderParameters = new Vector();
globalMaintainedBuilderParameters.add(ICBuilderConstants.IB_PAGE_PARAMETER);
}
private Map parametersMap;
public IWURL(String baseURL){
setBaseURL(baseURL);
}
public void setBaseURL(String baseURL){
int index = baseURL.indexOf(questionMark);
if(index!=-1){
String realBase = baseURL.substring(0,index);
this.baseURL=realBase;
String theRest = baseURL.substring(index+1);
breakUp(theRest);
}
else{
this.baseURL=baseURL;
}
}
private void breakUp(String parametersAndValues){
int ampersandIndex = parametersAndValues.indexOf(ampersand);
if(ampersandIndex!=-1){
StringTokenizer token = new StringTokenizer(parametersAndValues,ampersand);
while(token.hasMoreTokens()){
String parameter = token.nextToken();
int equalsIndex = parameter.indexOf(equalsMark);
if(equalsIndex!=-1){
String name = parameter.substring(0,equalsIndex);
String value = parameter.substring(equalsIndex+1);
addParameter(name,value);
}
}
}
else{
String parameter = parametersAndValues;
int equalsIndex = parameter.indexOf(equalsMark);
if(equalsIndex!=-1){
String name = parameter.substring(0,equalsIndex);
String value = parameter.substring(equalsIndex+1);
addParameter(name,value);
}
}
}
public static IWURL getURL(String baseURL){
return new IWURL(baseURL);
}
public void addPageClassParameter(Class pageClass){
addParameter(Page.IW_FRAME_CLASS_PARAMETER,IWMainApplication.getEncryptedClassName(pageClass));
}
public void addParameter(String parameterName,String parameterValue){
String value = (String) getParametersMap().get(parameterName);
//multivalue handling
if(value!=null){
if(!value.equals(parameterValue)){
//it is multivalued!
value = value+ampersand+parameterName+equalsMark+parameterValue;
getParametersMap().put(parameterName,value);
}
}
else{
getParametersMap().put(parameterName,parameterValue);
}
}
public void addParameter(Parameter parameter){
String name = parameter.getName();
String value = parameter.getValueAsString();
addParameter(name,value);
}
public void maintainParameter(String parameterName, IWContext iwc){
String value = iwc.getParameter(parameterName);
if(value!=null){
addParameter(parameterName,value);
}
}
private Map getParametersMap(){
if(this.parametersMap == null){
this.parametersMap = new TreeMap();
}
return this.parametersMap;
}
public static IWURL getImageURL(int imageID){
return null;
}
/*public static IWURL getWindowOpenerURL(Class windowClass){
IWURL url = getURL(IWMainApplication.windowOpenerURL);
url.addParameter("","");
return url;
}*/
/*public static IWURL getBuilderURL(int pageID){
return getBuilderURL(Integer.toString(pageID));
}*/
/*public static IWURL getBuilderURL(String pageKey){
IWURL url = getURL(IWMainApplication.BUILDER_SERVLET_URL);
url.addParameter("","");
return url;
}*/
/**
* Returns the BaseURL + all parameters
*/
public String getFullURL(){
if(hasParameters()){
String theReturn = this.baseURL+questionMark;
Map map = getParametersMap();
Set keySet = map.keySet();
int last = keySet.size();
int counter = 0;
Iterator iter = keySet.iterator();
while (iter.hasNext()) {
counter++;
String key = (String)iter.next();
String value = (String)map.get(key);
if(counter<last){
theReturn += key+equalsMark+value+ampersand;
}
else{
theReturn += key+equalsMark+value;
}
}
return theReturn;
}
else{
return this.baseURL;
}
}
public boolean hasParameters(){
return (this.parametersMap!=null && !this.parametersMap.isEmpty());
}
/**
* Returns the BaseURL + all parameters
*/
public String toString(){
return getFullURL();
}
public static void removeGloballyMaintainedParameter(String parameterName){
List l = globalMaintainedParameters;
l.remove(parameterName);
}
public static void addGloballyMaintainedParameter(String parameterName){
List l = globalMaintainedParameters;
if(l!=null){
if(!l.contains(parameterName)){
l.add(parameterName);
}
}
}
public static List getGloballyMaintainedParameters(IWContext iwc){
return globalMaintainedParameters;
}
public static void addGloballyMaintainedBuilderParameter(String parameterName){
List l = globalMaintainedBuilderParameters;
if(l!=null){
if(!l.contains(parameterName)){
l.add(parameterName);
}
}
}
public static List getGloballyMaintainedBuilderParameters(IWContext iwc){
return globalMaintainedBuilderParameters;
}
}