requestedPage=rl.execute(pc, requestedPage);
if(requestedPage==null) return;
}
String targetPage=requestedPage.getFullRealpath();
RefBoolean goon=new RefBooleanImpl(true);
// onRequestStart
if(app.contains(pc,ON_REQUEST_START)) {
try {
Object rtn=call(app,pci, ON_REQUEST_START, new Object[]{targetPage},false);
if(!Caster.toBooleanValue(rtn,true))
return;
}
catch(PageException pe){
pe=handlePageException(pci,app,pe,requestedPage,targetPage,goon);
if(pe!=null) throw pe;
}
}
// onRequest
if(goon.toBooleanValue()) {
boolean isCFC=ResourceUtil.getExtension(targetPage,"").equalsIgnoreCase(pc.getConfig().getCFCExtension());
Object method;
if(isCFC && app.contains(pc,ON_CFCREQUEST) && (method=pc.urlFormScope().get(KeyConstants._method,null))!=null) {
Struct url = (Struct)Duplicator.duplicate(pc.urlFormScope(),true);
url.removeEL(KeyConstants._fieldnames);
url.removeEL(KeyConstants._method);
Object args=url.get(KeyConstants._argumentCollection,null);
// url returnFormat
Object oReturnFormat=url.removeEL(KeyConstants._returnFormat);
int urlReturnFormat=-1;
if(oReturnFormat!=null) urlReturnFormat=UDFUtil.toReturnFormat(Caster.toString(oReturnFormat,null),-1);
// request header accept
List<MimeType> accept = ReqRspUtil.getAccept(pc);
int headerReturnFormat = MimeType.toFormat(accept, -1,-1);
Object queryFormat=url.removeEL(KeyConstants._queryFormat);
if(args==null){
args=pc.getHttpServletRequest().getAttribute("argumentCollection");
}
if(args instanceof String){
args=new JSONExpressionInterpreter().interpret(pc, (String)args);
}
if(args!=null) {
if(Decision.isCastableToStruct(args)){
Struct sct = Caster.toStruct(args,false);
//Key[] keys = url.keys();
Iterator<Entry<Key, Object>> it = url.entryIterator();
Entry<Key, Object> e;
while(it.hasNext()){
e = it.next();
sct.setEL(e.getKey(),e.getValue());
}
args=sct;
}
else if(Decision.isCastableToArray(args)){
args = Caster.toArray(args);
}
else {
Array arr = new ArrayImpl();
arr.appendEL(args);
args=arr;
}
}
else
args=url;
Object rtn = call(app,pci, ON_CFCREQUEST, new Object[]{requestedPage.getComponentName(),method,args},true);
if(rtn!=null){
if(pc.getHttpServletRequest().getHeader("AMF-Forward")!=null) {
pc.variablesScope().setEL("AMF-Forward", rtn);
//ThreadLocalWDDXResult.set(rtn);
}
else {
try {
ComponentPage.writeToResponseStream(pc,app,method.toString(),urlReturnFormat,headerReturnFormat,queryFormat,rtn);
} catch (Exception e) {
throw Caster.toPageException(e);
}
}
}
}
//else if(!isCFC && app.contains(pc,ON_REQUEST)) {}
else {
// TODO impl die nicht so generisch ist
try{
if(!isCFC && app.contains(pc,ON_REQUEST))
call(app,pci, ON_REQUEST, new Object[]{targetPage},false);
else
pci.doInclude(requestedPage);
}
catch(PageException pe){
pe=handlePageException(pci,app,pe,requestedPage,targetPage,goon);
if(pe!=null) throw pe;
}
}
}
// onRequestEnd
if(goon.toBooleanValue() && app.contains(pc,ON_REQUEST_END)) {
try {
call(app,pci, ON_REQUEST_END, new Object[]{targetPage},false);
}
catch(PageException pe){
pe=handlePageException(pci,app,pe,requestedPage,targetPage,goon);