Search in sources :

Example 31 with UDF

use of lucee.runtime.type.UDF in project Lucee by lucee.

the class Props method call.

@Override
public Object call(PageContext pc) throws PageException {
    // remote persistent (only type server is supported)
    // Caster.toString(pc.urlFormScope().get(REMOTE_PERSISTENT_ID,null),null);
    String strRemotePersisId = Caster.toString(getURLorForm(pc, REMOTE_PERSISTENT_ID, null), null);
    if (!StringUtil.isEmpty(strRemotePersisId, true)) {
        strRemotePersisId = strRemotePersisId.trim();
    } else
        strRemotePersisId = null;
    HttpServletRequest req = pc.getHttpServletRequest();
    // client
    String client = Caster.toString(req.getAttribute("client"), null);
    // call type (invocation, store-only)
    String callType = Caster.toString(req.getAttribute("call-type"), null);
    boolean internalCall = "lucee-gateway-1-0".equals(client) || "lucee-listener-1-0".equals(client);
    boolean fromRest = "lucee-rest-1-0".equals(client);
    Component component;
    try {
        pc.setSilent();
        // load the cfc
        try {
            if (internalCall && strRemotePersisId != null) {
                ConfigWebImpl config = (ConfigWebImpl) pc.getConfig();
                GatewayEngineImpl engine = config.getGatewayEngine();
                component = engine.getPersistentRemoteCFC(strRemotePersisId);
                if (component == null) {
                    component = newInstance(pc, getComponentName(), false, false, true);
                    if (!internalCall)
                        component = ComponentSpecificAccess.toComponentSpecificAccess(Component.ACCESS_REMOTE, component);
                    engine.setPersistentRemoteCFC(strRemotePersisId, component);
                }
            } else {
                component = newInstance(pc, getComponentName(), false, false, true);
                if (!internalCall)
                    component = ComponentSpecificAccess.toComponentSpecificAccess(Component.ACCESS_REMOTE, component);
            }
        } finally {
            pc.unsetSilent();
        }
        // Only get the Component, no invocation
        if ("store-only".equals(callType)) {
            req.setAttribute("component", component);
            return null;
        }
        // METHOD INVOCATION
        String qs = ReqRspUtil.getQueryString(pc.getHttpServletRequest());
        if (pc.getBasePageSource() == this.getPageSource() && pc.getConfig().debug())
            pc.getDebugger().setOutput(false);
        boolean isPost = pc.getHttpServletRequest().getMethod().equalsIgnoreCase("POST");
        boolean suppressContent = pc.getRequestDialect() == CFMLEngine.DIALECT_LUCEE || ((PageContextImpl) pc).getSuppressContent();
        if (suppressContent)
            pc.clear();
        Object method;
        if (fromRest) {
            callRest(pc, component, Caster.toString(req.getAttribute("rest-path"), ""), (Result) req.getAttribute("rest-result"), suppressContent);
            return null;
        }
        // POST
        if (isPost) {
            // Soap
            if (isSoap(pc)) {
                callWebservice(pc, component);
                // close(pc);
                return null;
            } else // WDDX
            if ((method = getURLorForm(pc, KeyConstants._method, null)) != null) {
                callWDDX(pc, component, KeyImpl.toKey(method), suppressContent);
                // close(pc);
                return null;
            }
        } else // GET
        {
            // WSDL
            if (qs != null && (qs.trim().equalsIgnoreCase("wsdl") || qs.trim().startsWith("wsdl&"))) {
                callWSDL(pc, component);
                // close(pc);
                return null;
            } else // WDDX
            if ((method = getURLorForm(pc, KeyConstants._method, null)) != null) {
                callWDDX(pc, component, KeyImpl.toKey(method), suppressContent);
                // close(pc);
                return null;
            }
            if (qs != null) {
                int rf = UDFUtil.toReturnFormat(qs.trim(), -1);
                if (rf != -1)
                    callCFCMetaData(pc, component, rf);
                // close(pc);
                return null;
            }
        }
        // Include MUST
        Array path = pc.getTemplatePath();
        // if(path.size()>1 ) {
        if (path.size() > 1 && !(path.size() == 3 && ListUtil.last(path.getE(2).toString(), "/\\", true).equalsIgnoreCase(pc.getRequestDialect() == CFMLEngine.DIALECT_CFML ? lucee.runtime.config.Constants.CFML_APPLICATION_EVENT_HANDLER : lucee.runtime.config.Constants.LUCEE_APPLICATION_EVENT_HANDLER))) {
            // MUSTMUST bad impl -> check with and without application . cfc
            ComponentSpecificAccess c = ComponentSpecificAccess.toComponentSpecificAccess(Component.ACCESS_PRIVATE, component);
            Key[] keys = c.keys();
            Object el;
            Scope var = pc.variablesScope();
            for (int i = 0; i < keys.length; i++) {
                el = c.get(keys[i], null);
                if (el instanceof UDF)
                    var.set(keys[i], el);
            }
            return null;
        }
        // DUMP
        // TODO component.setAccess(pc,Component.ACCESS_PUBLIC);
        String cdf = pc.getConfig().getComponentDumpTemplate();
        if (cdf != null && cdf.trim().length() > 0) {
            pc.variablesScope().set(KeyConstants._component, component);
            pc.doInclude(cdf, false);
        } else
            pc.write(pc.getConfig().getDefaultDumpWriter(DumpWriter.DEFAULT_RICH).toString(pc, component.toDumpData(pc, 9999, DumpUtil.toDumpProperties()), true));
    } catch (Throwable t) {
        // Exception Handler.castAnd Stack(t, this, pc);
        throw Caster.toPageException(t);
    }
    return null;
}
Also used : GatewayEngineImpl(lucee.runtime.gateway.GatewayEngineImpl) HttpServletRequest(javax.servlet.http.HttpServletRequest) Array(lucee.runtime.type.Array) ConfigWebImpl(lucee.runtime.config.ConfigWebImpl) Scope(lucee.runtime.type.scope.Scope) UDF(lucee.runtime.type.UDF) Key(lucee.runtime.type.Collection.Key)

Example 32 with UDF

use of lucee.runtime.type.UDF in project Lucee by lucee.

the class Props method callCFCMetaData.

private void callCFCMetaData(PageContext pc, Component cfc, int format) throws IOException, PageException, ConverterException {
    ComponentSpecificAccess cw = new ComponentSpecificAccess(Component.ACCESS_REMOTE, cfc);
    ComponentScope scope = cw.getComponentScope();
    Struct udfs = new StructImpl(), sctUDF, sctArg;
    Array arrArg;
    Iterator<Object> it = scope.valueIterator();
    Object v;
    UDF udf;
    FunctionArgument[] args;
    while (it.hasNext()) {
        v = it.next();
        // UDF
        if (v instanceof UDF) {
            udf = (UDF) v;
            sctUDF = new StructImpl();
            arrArg = new ArrayImpl();
            udfs.setEL(udf.getFunctionName(), sctUDF);
            args = udf.getFunctionArguments();
            for (int i = 0; i < args.length; i++) {
                sctArg = new StructImpl();
                arrArg.appendEL(sctArg);
                sctArg.setEL(KeyConstants._name, args[i].getName().getString());
                sctArg.setEL(KeyConstants._type, args[i].getTypeAsString());
                sctArg.setEL(KeyConstants._required, args[i].isRequired());
                if (!StringUtil.isEmpty(args[i].getHint()))
                    sctArg.setEL(KeyConstants._hint, args[i].getHint());
            }
            sctUDF.set(KeyConstants._arguments, arrArg);
            sctUDF.set(KeyConstants._returntype, udf.getReturnTypeAsString());
        }
    }
    Struct rtn = new StructImpl();
    rtn.set(KeyConstants._functions, udfs);
    rtn.set(ACCEPT_ARG_COLL_FORMATS, "cfml,json");
    InputStream is;
    Charset cs = null;
    // WDDX
    if (UDF.RETURN_FORMAT_WDDX == format) {
        WDDXConverter converter = new WDDXConverter(pc.getTimeZone(), false, false);
        converter.setTimeZone(pc.getTimeZone());
        String str = converter.serialize(rtn);
        cs = getCharset(pc);
        is = new ByteArrayInputStream(str.getBytes(cs));
    } else // JSON
    if (UDF.RETURN_FORMAT_JSON == format) {
        boolean byColumn = false;
        cs = getCharset(pc);
        JSONConverter converter = new JSONConverter(false, cs);
        String str = converter.serialize(pc, rtn, byColumn);
        is = new ByteArrayInputStream(str.getBytes(cs));
    } else // CFML
    if (UDF.RETURN_FORMAT_SERIALIZE == format) {
        ScriptConverter converter = new ScriptConverter(false);
        String str = converter.serialize(rtn);
        cs = getCharset(pc);
        is = new ByteArrayInputStream(str.getBytes(cs));
    } else // XML
    if (UDF.RETURN_FORMAT_XML == format) {
        XMLConverter converter = new XMLConverter(pc.getTimeZone(), false);
        converter.setTimeZone(pc.getTimeZone());
        String str = converter.serialize(rtn);
        cs = getCharset(pc);
        is = new ByteArrayInputStream(str.getBytes(cs));
    } else // Plain
    if (UDF.RETURN_FORMAT_PLAIN == format) {
        String str = Caster.toString(rtn);
        cs = getCharset(pc);
        is = new ByteArrayInputStream(str.getBytes(cs));
    } else // Java
    if (UDF.RETURN_FORMAT_JAVA == format) {
        byte[] bytes = JavaConverter.serializeAsBinary(rtn);
        is = new ByteArrayInputStream(bytes);
    } else
        throw new IOException("invalid format defintion:" + format);
    OutputStream os = null;
    try {
        os = pc.getResponseStream();
        setFormat(pc.getHttpServletResponse(), format, cs);
        IOUtil.copy(is, os, false, false);
    } finally {
        IOUtil.flushEL(os);
        IOUtil.closeEL(os);
        ((PageContextImpl) pc).getRootOut().setClosed(true);
    }
}
Also used : ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) ArrayImpl(lucee.runtime.type.ArrayImpl) OutputStream(java.io.OutputStream) XMLConverter(lucee.runtime.converter.XMLConverter) Charset(java.nio.charset.Charset) IOException(java.io.IOException) StaticStruct(lucee.runtime.component.StaticStruct) Struct(lucee.runtime.type.Struct) Array(lucee.runtime.type.Array) WDDXConverter(lucee.runtime.converter.WDDXConverter) StructImpl(lucee.runtime.type.StructImpl) ByteArrayInputStream(java.io.ByteArrayInputStream) UDF(lucee.runtime.type.UDF) ScriptConverter(lucee.runtime.converter.ScriptConverter) FunctionArgument(lucee.runtime.type.FunctionArgument) JSONConverter(lucee.runtime.converter.JSONConverter)

Example 33 with UDF

use of lucee.runtime.type.UDF in project Lucee by lucee.

the class JSONConverter method _serialize.

/**
 * serialize a Object to his xml Format represenation
 * @param object Object to serialize
 * @param sb StringBuilder to write data
 * @param serializeQueryByColumns
 * @param done
 * @throws ConverterException
 */
private void _serialize(PageContext pc, Set test, Object object, StringBuilder sb, boolean serializeQueryByColumns, Set done) throws ConverterException {
    // NULL
    if (object == null || object == NULL) {
        sb.append(goIn());
        sb.append("null");
        return;
    }
    // String
    if (object instanceof String || object instanceof StringBuilder) {
        sb.append(goIn());
        sb.append(StringUtil.escapeJS(object.toString(), '"', charsetEncoder));
        return;
    }
    // Character
    if (object instanceof Character) {
        sb.append(goIn());
        sb.append(StringUtil.escapeJS(String.valueOf(((Character) object).charValue()), '"', charsetEncoder));
        return;
    }
    // Number
    if (object instanceof Number) {
        sb.append(goIn());
        sb.append(Caster.toString(((Number) object)));
        return;
    }
    // Boolean
    if (object instanceof Boolean) {
        sb.append(goIn());
        sb.append(Caster.toString(((Boolean) object).booleanValue()));
        return;
    }
    // DateTime
    if (object instanceof DateTime) {
        _serializeDateTime((DateTime) object, sb);
        return;
    }
    // Date
    if (object instanceof Date) {
        _serializeDate((Date) object, sb);
        return;
    }
    // XML
    if (object instanceof Node) {
        _serializeXML((Node) object, sb);
        return;
    }
    // Timespan
    if (object instanceof TimeSpan) {
        _serializeTimeSpan((TimeSpan) object, sb);
        return;
    }
    // File
    if (object instanceof File) {
        _serialize(pc, test, ((File) object).getAbsolutePath(), sb, serializeQueryByColumns, done);
        return;
    }
    // String Converter
    if (object instanceof ScriptConvertable) {
        sb.append(((ScriptConvertable) object).serialize());
        return;
    }
    // byte[]
    if (object instanceof byte[]) {
        sb.append("\"" + Base64Coder.encode((byte[]) object) + "\"");
        return;
    }
    Object raw = LazyConverter.toRaw(object);
    if (done.contains(raw)) {
        sb.append(goIn());
        sb.append("null");
        return;
    }
    done.add(raw);
    try {
        // Component
        if (object instanceof Component) {
            _serializeComponent(pc, test, (Component) object, sb, serializeQueryByColumns, done);
            return;
        }
        // UDF
        if (object instanceof UDF) {
            _serializeUDF(pc, test, (UDF) object, sb, serializeQueryByColumns, done);
            return;
        }
        // Struct
        if (object instanceof Struct) {
            _serializeStruct(pc, test, (Struct) object, sb, serializeQueryByColumns, true, done);
            return;
        }
        // Map
        if (object instanceof Map) {
            _serializeMap(pc, test, (Map) object, sb, serializeQueryByColumns, done);
            return;
        }
        // Array
        if (object instanceof Array) {
            _serializeArray(pc, test, (Array) object, sb, serializeQueryByColumns, done);
            return;
        }
        // List
        if (object instanceof List) {
            _serializeList(pc, test, (List) object, sb, serializeQueryByColumns, done);
            return;
        }
        // Query
        if (object instanceof Query) {
            _serializeQuery(pc, test, (Query) object, sb, serializeQueryByColumns, done);
            return;
        }
        // Native Array
        if (Decision.isNativeArray(object)) {
            if (object instanceof char[])
                _serialize(pc, test, new String((char[]) object), sb, serializeQueryByColumns, done);
            else {
                _serializeArray(pc, test, ArrayUtil.toReferenceType(object, ArrayUtil.OBJECT_EMPTY), sb, serializeQueryByColumns, done);
            }
            return;
        }
        // ObjectWrap
        if (object instanceof ObjectWrap) {
            try {
                _serialize(pc, test, ((ObjectWrap) object).getEmbededObject(), sb, serializeQueryByColumns, done);
            } catch (PageException e) {
                if (object instanceof JavaObject) {
                    _serializeClass(pc, test, ((JavaObject) object).getClazz(), null, sb, serializeQueryByColumns, done);
                } else
                    throw new ConverterException("can't serialize Object of type [ " + Caster.toClassName(object) + " ]");
            }
            return;
        }
        _serializeClass(pc, test, object.getClass(), object, sb, serializeQueryByColumns, done);
    } finally {
        done.remove(raw);
    }
}
Also used : PageException(lucee.runtime.exp.PageException) ObjectWrap(lucee.runtime.type.ObjectWrap) Query(lucee.runtime.type.Query) Node(org.w3c.dom.Node) DateTime(lucee.runtime.type.dt.DateTime) Date(java.util.Date) Struct(lucee.runtime.type.Struct) TimeSpan(lucee.runtime.type.dt.TimeSpan) Array(lucee.runtime.type.Array) JavaObject(lucee.runtime.java.JavaObject) UDF(lucee.runtime.type.UDF) JavaObject(lucee.runtime.java.JavaObject) List(java.util.List) Component(lucee.runtime.Component) File(java.io.File) Map(java.util.Map)

Example 34 with UDF

use of lucee.runtime.type.UDF in project Lucee by lucee.

the class JSONConverter method _serializeStruct.

/**
 * serialize a Struct
 * @param struct Struct to serialize
 * @param sb
 * @param serializeQueryByColumns
 * @param addUDFs
 * @param done
 * @throws ConverterException
 */
public void _serializeStruct(PageContext pc, Set test, Struct struct, StringBuilder sb, boolean serializeQueryByColumns, boolean addUDFs, Set<Object> done) throws ConverterException {
    // Component
    if (struct instanceof Component) {
        String res = castToJson(pc, (Component) struct, NULL_STRING);
        if (res != NULL_STRING) {
            sb.append(res);
            return;
        }
    }
    sb.append(goIn());
    sb.append("{");
    // Key[] keys = struct.keys();
    // Key key;
    Iterator<Entry<Key, Object>> it = struct.entryIterator();
    Entry<Key, Object> e;
    Object value;
    boolean doIt = false;
    while (it.hasNext()) {
        e = it.next();
        // key=keys[i];
        value = e.getValue();
        if (!addUDFs && (value instanceof UDF || value == null))
            continue;
        if (doIt)
            sb.append(',');
        doIt = true;
        sb.append(StringUtil.escapeJS(e.getKey().getString(), '"', charsetEncoder));
        sb.append(':');
        _serialize(pc, test, value, sb, serializeQueryByColumns, done);
    }
    if (struct instanceof Component) {
        Boolean remotingFetch;
        Component comp = (Component) struct;
        boolean isPeristent = false;
        isPeristent = comp.isPersistent();
        Property[] props = comp.getProperties(false);
        ComponentScope scope = comp.getComponentScope();
        for (int i = 0; i < props.length; i++) {
            if (!ignoreRemotingFetch) {
                remotingFetch = Caster.toBoolean(props[i].getDynamicAttributes().get(REMOTING_FETCH, null), null);
                if (remotingFetch == null) {
                    if (isPeristent && ORMUtil.isRelated(props[i]))
                        continue;
                } else if (!remotingFetch.booleanValue())
                    continue;
            }
            Key key = KeyImpl.getInstance(props[i].getName());
            value = scope.get(key, null);
            if (!addUDFs && (value instanceof UDF || value == null))
                continue;
            if (doIt)
                sb.append(',');
            doIt = true;
            sb.append(StringUtil.escapeJS(key.getString(), '"', charsetEncoder));
            sb.append(':');
            _serialize(pc, test, value, sb, serializeQueryByColumns, done);
        }
    }
    sb.append('}');
}
Also used : Entry(java.util.Map.Entry) ComponentScope(lucee.runtime.ComponentScope) UDF(lucee.runtime.type.UDF) JavaObject(lucee.runtime.java.JavaObject) Component(lucee.runtime.Component) Property(lucee.runtime.component.Property) Key(lucee.runtime.type.Collection.Key)

Example 35 with UDF

use of lucee.runtime.type.UDF in project Lucee by lucee.

the class JSONConverter method castToJson.

private static String castToJson(PageContext pc, Component c, String defaultValue) throws ConverterException {
    Object o = c.get(TO_JSON, null);
    if (!(o instanceof UDF))
        return defaultValue;
    UDF udf = (UDF) o;
    if (udf.getReturnType() != CFTypes.TYPE_VOID && udf.getFunctionArguments().length == 0) {
        try {
            return Caster.toString(c.call(pc, TO_JSON, new Object[0]));
        } catch (PageException e) {
            throw toConverterException(e);
        }
    }
    return defaultValue;
}
Also used : PageException(lucee.runtime.exp.PageException) UDF(lucee.runtime.type.UDF) JavaObject(lucee.runtime.java.JavaObject)

Aggregations

UDF (lucee.runtime.type.UDF)42 Key (lucee.runtime.type.Collection.Key)14 Struct (lucee.runtime.type.Struct)14 Component (lucee.runtime.Component)9 Entry (java.util.Map.Entry)7 PageException (lucee.runtime.exp.PageException)7 Member (lucee.runtime.component.Member)6 FunctionArgument (lucee.runtime.type.FunctionArgument)6 StructImpl (lucee.runtime.type.StructImpl)6 ArgumentIntKey (lucee.runtime.type.scope.ArgumentIntKey)6 Iterator (java.util.Iterator)5 ComponentScope (lucee.runtime.ComponentScope)5 ComponentSpecificAccess (lucee.runtime.ComponentSpecificAccess)5 PageContextImpl (lucee.runtime.PageContextImpl)5 Property (lucee.runtime.component.Property)5 Array (lucee.runtime.type.Array)5 Collection (lucee.runtime.type.Collection)5 IOException (java.io.IOException)4 Map (java.util.Map)4 HashMap (java.util.HashMap)3