/**
* Implements the CFML Function getmetadata
*/
package railo.runtime.functions.other;
import java.util.HashMap;
import railo.runtime.Component;
import railo.runtime.InterfaceImpl;
import railo.runtime.PageContext;
import railo.runtime.PageContextImpl;
import railo.runtime.component.ComponentLoader;
import railo.runtime.exp.ApplicationException;
import railo.runtime.exp.PageException;
import railo.runtime.ext.function.Function;
import railo.runtime.op.Caster;
import railo.runtime.type.Struct;
public final class GetComponentMetaData implements Function {
public static Struct call(PageContext pc , Object obj) throws PageException {
if(obj instanceof Component){
return ((Component)obj).getMetaData(pc);
}
// load existing meta without loading the cfc
/*try{
Page page = ComponentLoader.loadPage(pc,((PageContextImpl)pc).getCurrentPageSource(null), Caster.toString(obj), null,null);
if(page.metaData!=null && page.metaData.get()!=null) return page.metaData.get();
}catch(Throwable t){}*/
// load the cfc when metadata was not defined before
try{
Component cfc = CreateObject.doComponent(pc, Caster.toString(obj));
return cfc.getMetaData(pc);
}
// TODO better solution
catch(ApplicationException ae){
try{
InterfaceImpl inter = ComponentLoader.loadInterface(pc,((PageContextImpl)pc).getCurrentPageSource(null), Caster.toString(obj), new HashMap());
return inter.getMetaData(pc);
}
catch(PageException pe){
throw ae;
}
}
}
}