use of lucee.runtime.type.UDF in project Lucee by lucee.
the class ComponentController method _invoke.
public static Object _invoke(String name, Object[] args) throws PageException {
Key key = Caster.toKey(name);
Component c = component.get();
PageContext p = pagecontext.get();
MessageContext mc = messageContext.get();
if (c == null)
throw new ApplicationException("missing component");
if (p == null)
throw new ApplicationException("missing pagecontext");
UDF udf = Caster.toFunction(c.get(p, key, null), null);
FunctionArgument[] fa = null;
if (udf != null)
fa = udf.getFunctionArguments();
for (int i = 0; i < args.length; i++) {
if (fa != null && i < fa.length && fa[i].getType() == CFTypes.TYPE_UNKNOW) {
args[i] = AxisCaster.toLuceeType(p, fa[i].getTypeAsString(), args[i]);
} else
args[i] = AxisCaster.toLuceeType(p, args[i]);
}
// return type
String rtnType = udf != null ? udf.getReturnTypeAsString() : "any";
Object rtn = c.call(p, key, args);
// cast return value to Axis type
try {
RPCServer server = RPCServer.getInstance(p.getId(), p, p.getServletContext());
TypeMapping tm = mc != null ? mc.getTypeMapping() : TypeMappingUtil.getServerTypeMapping(server.getEngine().getTypeMappingRegistry());
rtn = Caster.castTo(p, rtnType, rtn, false);
Class<?> clazz = Caster.cfTypeToClass(rtnType);
return AxisCaster.toAxisType(tm, rtn, clazz.getComponentType() != null ? clazz : null);
} catch (Throwable t) {
ExceptionUtil.rethrowIfNecessary(t);
throw Caster.toPageException(t);
}
}
use of lucee.runtime.type.UDF in project Lucee by lucee.
the class SMTPClient method send.
public void send(PageContext pc, long sendTime) throws MailException {
if (plainText == null && htmlText == null)
throw new MailException("you must define plaintext or htmltext");
Server[] servers = ((PageContextImpl) pc).getMailServers();
ConfigWeb config = pc.getConfig();
if (ArrayUtil.isEmpty(servers) && ArrayUtil.isEmpty(host))
throw new MailException("no SMTP Server defined");
if (spool == SPOOL_YES || (spool == SPOOL_UNDEFINED && config.isMailSpoolEnable())) {
MailSpoolerTask mst = new MailSpoolerTask(this, servers, sendTime);
if (listener instanceof Component)
mst.setListener(new ComponentSpoolerTaskListener(SystemUtil.getCurrentContext(), mst, (Component) listener));
else if (listener instanceof UDF)
mst.setListener(new UDFSpoolerTaskListener(SystemUtil.getCurrentContext(), mst, (UDF) listener));
config.getSpoolerEngine().add(mst);
} else
_send(config, servers);
}
use of lucee.runtime.type.UDF in project Lucee by lucee.
the class ScriptConverter method _serializeComponent.
/**
* serialize a Component
* @param c Component to serialize
* @param sb
* @param done
* @throws ConverterException
*/
private void _serializeComponent(Component c, StringBuilder sb, Set<Object> done) throws ConverterException {
ComponentSpecificAccess cw = new ComponentSpecificAccess(Component.ACCESS_PRIVATE, c);
sb.append(goIn());
try {
sb.append("evaluateComponent(").append(QUOTE_CHR).append(c.getAbsName()).append(QUOTE_CHR).append(',').append(QUOTE_CHR).append(ComponentUtil.md5(c)).append(QUOTE_CHR).append(",{");
} catch (Exception e) {
throw toConverterException(e);
}
boolean doIt = false;
Object member;
{
Iterator<Entry<Key, Object>> it = cw.entryIterator();
deep++;
Entry<Key, Object> e;
while (it.hasNext()) {
e = it.next();
member = e.getValue();
if (member instanceof UDF)
continue;
if (doIt)
sb.append(',');
doIt = true;
sb.append(QUOTE_CHR);
sb.append(escape(e.getKey().getString()));
sb.append(QUOTE_CHR);
sb.append(':');
_serialize(member, sb, done);
}
sb.append("}");
deep--;
}
{
boolean isPeristent = c.isPersistent();
ComponentScope scope = c.getComponentScope();
Iterator<Entry<Key, Object>> it = scope.entryIterator();
sb.append(",{");
deep++;
doIt = false;
Property p;
Boolean remotingFetch;
Struct props = ignoreRemotingFetch ? null : ComponentUtil.getPropertiesAsStruct(c, false);
Entry<Key, Object> e;
Key k;
while (it.hasNext()) {
e = it.next();
k = e.getKey();
// String key=Caster.toString(it.next(),"");
if (KeyConstants._THIS.equalsIgnoreCase(k))
continue;
if (!ignoreRemotingFetch) {
p = (Property) props.get(k, null);
if (p != null) {
remotingFetch = Caster.toBoolean(p.getDynamicAttributes().get(REMOTING_FETCH, null), null);
if (remotingFetch == null) {
if (isPeristent && ORMUtil.isRelated(p))
continue;
} else if (!remotingFetch.booleanValue())
continue;
}
}
member = e.getValue();
if (member instanceof UDF)
continue;
if (doIt)
sb.append(',');
doIt = true;
sb.append(QUOTE_CHR);
sb.append(escape(k.getString()));
sb.append(QUOTE_CHR);
sb.append(':');
_serialize(member, sb, done);
}
sb.append("}");
deep--;
}
sb.append(")");
// sb.append("");
// throw new ConverterException("can't serialize a component "+component.getDisplayName());
}
use of lucee.runtime.type.UDF in project Lucee by lucee.
the class WDDXConverter method _serializeComponent.
/**
* serialize a Component
*
* @param component
* Component to serialize
* @param done
* @return serialized component
* @throws ConverterException
*/
private String _serializeComponent(Component component, Set<Object> done) throws ConverterException {
StringBuilder sb = new StringBuilder();
Component ca;
component = new ComponentSpecificAccess(Component.ACCESS_PRIVATE, ca = component);
boolean isPeristent = ca.isPersistent();
deep++;
Object member;
Iterator<Key> it = component.keyIterator();
Collection.Key key;
while (it.hasNext()) {
key = Caster.toKey(it.next(), null);
member = component.get(key, null);
if (member instanceof UDF)
continue;
sb.append(goIn() + "<var scope=\"this\" name=" + del + XMLUtil.escapeXMLString(key.toString()) + del + ">");
sb.append(_serialize(member, done));
sb.append(goIn() + "</var>");
}
Property p;
Boolean remotingFetch;
Struct props = ignoreRemotingFetch ? null : ComponentUtil.getPropertiesAsStruct(ca, false);
ComponentScope scope = ca.getComponentScope();
it = scope.keyIterator();
while (it.hasNext()) {
key = Caster.toKey(it.next(), null);
if (!ignoreRemotingFetch) {
p = (Property) props.get(key, null);
if (p != null) {
remotingFetch = Caster.toBoolean(p.getDynamicAttributes().get(REMOTING_FETCH, null), null);
if (remotingFetch == null) {
if (isPeristent && ORMUtil.isRelated(p))
continue;
} else if (!remotingFetch.booleanValue())
continue;
}
}
member = scope.get(key, null);
if (member instanceof UDF || key.equals(KeyConstants._this))
continue;
sb.append(goIn() + "<var scope=\"variables\" name=" + del + XMLUtil.escapeXMLString(key.toString()) + del + ">");
sb.append(_serialize(member, done));
sb.append(goIn() + "</var>");
}
deep--;
try {
// return goIn()+"<struct>"+sb+"</struct>";
return goIn() + "<component md5=\"" + ComponentUtil.md5(component) + "\" name=\"" + XMLUtil.escapeXMLString(component.getAbsName()) + "\">" + sb + "</component>";
} catch (Exception e) {
throw toConverterException(e);
}
}
use of lucee.runtime.type.UDF in project Lucee by lucee.
the class ComponentImpl method thisScope.
static DumpTable thisScope(ComponentImpl ci, PageContext pc, int maxlevel, DumpProperties dp, int access) {
DumpTable table = new DumpTable("#ffffff", "#cccccc", "#000000");
DumpTable[] accesses = new DumpTable[4];
accesses[Component.ACCESS_REMOTE] = new DumpTable("#ccffcc", "#ffffff", "#000000");
accesses[Component.ACCESS_REMOTE].setTitle("remote");
accesses[Component.ACCESS_PUBLIC] = new DumpTable("#ffcc99", "#ffffcc", "#000000");
accesses[Component.ACCESS_PUBLIC].setTitle("public");
accesses[Component.ACCESS_PACKAGE] = new DumpTable("#ff9966", "#ffcc99", "#000000");
accesses[Component.ACCESS_PACKAGE].setTitle("package");
accesses[Component.ACCESS_PRIVATE] = new DumpTable("#ff6633", "#ff9966", "#000000");
accesses[Component.ACCESS_PRIVATE].setTitle("private");
maxlevel--;
ComponentSpecificAccess cw = new ComponentSpecificAccess(Component.ACCESS_PRIVATE, ci);
Collection.Key[] keys = cw.keys();
List<DumpRow>[] drAccess = new List[4];
for (int i = 0; i < drAccess.length; i++) // ACCESS_REMOTE=0, ACCESS_PUBLIC=1, ACCESS_PACKAGE=2, ACCESS_PRIVATE=3
drAccess[i] = new ArrayList();
Collection.Key key;
for (int i = 0; i < keys.length; i++) {
key = keys[i];
List<DumpRow> box = drAccess[ci.getAccess(key)];
Object o = cw.get(key, null);
if (o == ci)
o = "[this]";
if (DumpUtil.keyValid(dp, maxlevel, key)) {
String memberName = (o instanceof UDF) ? ((UDF) o).getFunctionName() : key.getString();
box.add(new DumpRow(1, new SimpleDumpData(memberName), DumpUtil.toDumpData(o, pc, maxlevel, dp)));
}
}
List<DumpRow> dumpRows;
for (int i = 0; i < drAccess.length; i++) {
dumpRows = drAccess[i];
if (!dumpRows.isEmpty()) {
Collections.sort(dumpRows, new Comparator<DumpRow>() {
@Override
public int compare(DumpRow o1, DumpRow o2) {
DumpData[] rowItems1 = o1.getItems();
DumpData[] rowItems2 = o2.getItems();
if (rowItems1.length >= 0 && rowItems2.length > 0 && rowItems1[0] instanceof SimpleDumpData && rowItems2[0] instanceof SimpleDumpData)
return String.CASE_INSENSITIVE_ORDER.compare(rowItems1[0].toString(), rowItems2[0].toString());
return 0;
}
});
DumpTable dtAccess = accesses[i];
dtAccess.setWidth("100%");
for (DumpRow dr : dumpRows) dtAccess.appendRow(dr);
table.appendRow(0, dtAccess);
}
}
// properties
if (ci.top.properties.persistent || ci.top.properties.accessors) {
Property[] properties = ci.getProperties(false, true, false, false);
DumpTable prop = new DumpTable("#99cc99", "#ccffcc", "#000000");
prop.setTitle("Properties");
prop.setWidth("100%");
Property p;
Object child;
for (int i = 0; i < properties.length; i++) {
p = properties[i];
child = ci.scope.get(KeyImpl.init(p.getName()), null);
DumpData dd;
if (child instanceof Component) {
DumpTable t = new DumpTable("component", "#99cc99", "#ffffff", "#000000");
t.appendRow(1, new SimpleDumpData(((Component) child).getPageSource().getDialect() == CFMLEngine.DIALECT_CFML ? "Component" : "Class"), new SimpleDumpData(((Component) child).getCallName()));
dd = t;
} else {
dd = DumpUtil.toDumpData(child, pc, maxlevel - 1, dp);
}
prop.appendRow(1, new SimpleDumpData(p.getName()), dd);
}
if (access >= ACCESS_PUBLIC && !prop.isEmpty()) {
table.appendRow(0, prop);
}
}
return table;
}
Aggregations