package com.allaire.cfx;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import railo.loader.engine.CFMLEngineFactory;
import railo.runtime.type.Collection.Key;
import railo.runtime.type.Struct;
/**
* Implementation of the Debug Request
*/
public class DebugRequest implements Request {
private Struct attributes;
private Query query;
private Struct settings;
/**
* constructor of the class
* @param attributes
*/
public DebugRequest(Hashtable attributes) {
this(attributes,null,null);
}
/**
* constructor of the class
* @param attributes
* @param query
*/
public DebugRequest(Hashtable attributes, Query query) {
this(attributes,query,null);
}
/**
* constructor of the class
* @param attributes
* @param query
* @param settings
*/
public DebugRequest(Hashtable attributes, Query query, Hashtable settings) {
this.attributes=toStruct(attributes);
this.query=query;
this.settings=toStruct(settings);
}
/**
* @see com.allaire.cfx.Request#attributeExists(java.lang.String)
*/
public boolean attributeExists(String key) {
return attributes.containsKey(key);
}
/**
* @see com.allaire.cfx.Request#debug()
*/
public boolean debug() {
Object o=attributes.get("debug",Boolean.FALSE);
return CFMLEngineFactory.getInstance().getCastUtil().toBooleanValue(o,false);
}
/**
* @see com.allaire.cfx.Request#getAttribute(java.lang.String, java.lang.String)
*/
public String getAttribute(String key, String defaultValue) {
return CFMLEngineFactory.getInstance().getCastUtil().toString(attributes.get(key,defaultValue),defaultValue);
}
/**
* @see com.allaire.cfx.Request#getAttribute(java.lang.String)
*/
public String getAttribute(String key) {
return getAttribute(key, "");
}
/**
* @see com.allaire.cfx.Request#getAttributeList()
*/
public String[] getAttributeList() {
Iterator<Key> it = attributes.keyIterator();
List<String> arr=new ArrayList<String>();
while(it.hasNext()){
arr.add(it.next().getString());
}
return arr.toArray(new String[arr.size()]);
}
/**
* @see com.allaire.cfx.Request#getIntAttribute(java.lang.String, int)
*/
public int getIntAttribute(String key, int defaultValue) {
Object o=attributes.get(key,null);
if(o==null) return defaultValue;
return (int)CFMLEngineFactory.getInstance().getCastUtil().toDoubleValue(o,defaultValue);
}
/**
* @see com.allaire.cfx.Request#getIntAttribute(java.lang.String)
*/
public int getIntAttribute(String key) throws NumberFormatException {
return getIntAttribute(key, -1);
}
/**
* @see com.allaire.cfx.Request#getQuery()
*/
public Query getQuery() {
return query;
}
/**
* @see com.allaire.cfx.Request#getSetting(java.lang.String)
*/
public String getSetting(String key) {
return settings==null?"":CFMLEngineFactory.getInstance().getCastUtil().toString(settings.get(key,""),"");
}
/**
* @param hashTable a Hashtable to a Struct
* @return casted struct
*/
private static Struct toStruct(Hashtable hashTable) {
if(hashTable==null) return null;
Enumeration e = hashTable.keys();
Struct sct=CFMLEngineFactory.getInstance().getCreationUtil().createStruct();
while(e.hasMoreElements()) {
Object key=e.nextElement();
sct.setEL(key.toString(),hashTable.get(key));
}
return sct;
}
}