package lucee.runtime.type; import java.util.Set; import lucee.runtime.Page; import lucee.runtime.PageContext; import lucee.runtime.PageSource; import lucee.runtime.exp.ApplicationException; import lucee.runtime.exp.PageException; import lucee.runtime.type.Collection.Key; import lucee.runtime.type.util.ComponentUtil; public abstract class UDFPropertiesBase implements UDFProperties { private String id; public abstract String getFunctionName(); public abstract boolean getOutput(); public abstract Boolean getBufferOutput(); public abstract int getReturnType(); public abstract String getReturnTypeAsString(); public abstract String getDescription(); public abstract int getReturnFormat(); public abstract String getReturnFormatAsString(); public abstract int getIndex(); public abstract PageSource getPageSource(); protected abstract Page getPage(); public abstract Object getCachedWithin(); public abstract Boolean getSecureJson(); public abstract Boolean getVerifyClient(); public abstract FunctionArgument[] getFunctionArguments(); public abstract String getDisplayName(); public abstract String getHint(); public abstract Struct getMeta(); public abstract Integer getLocalMode(); public abstract Set<Key> getArgumentsSet(); public final Page getPage(PageContext pc) throws PageException { // MUST no page source PageException pe=null; if(getPageSource()!=null) { try { return ComponentUtil.getPage(pc,getPageSource()); } catch (PageException e) { pe=e; } } Page p = getPage(); if(p!=null) return p; if(pe!=null) throw pe; throw new ApplicationException("missing Page Source"); } public final String id() { if(id==null) { // MUST no page source if(getPageSource()!=null) { id=getPageSource().getDisplayPath()+":"+getIndex(); } else if(getPage()!=null) { // MUST id for Page id=getPage().hashCode()+":"+getIndex(); } } return id; } }