package lucee.runtime.type;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import lucee.runtime.Component;
import lucee.runtime.PageContext;
import lucee.runtime.dump.DumpData;
import lucee.runtime.dump.DumpProperties;
import lucee.runtime.exp.PageException;
import lucee.runtime.type.scope.Variables;
import lucee.runtime.type.util.ComponentUtil;
import lucee.runtime.type.util.KeyConstants;
import lucee.runtime.type.util.UDFUtil;
public class Closure extends EnvUDF {
public Closure(){// used for externalize
super();
}
public Closure(UDFProperties properties) {
super(properties);
}
private Closure(UDFProperties properties, Variables variables) { // used for duplicate
super(properties,variables);
}
@Override
public DumpData _toDumpData(PageContext pageContext, int maxlevel,DumpProperties dp) {
return UDFUtil.toDumpData(pageContext, maxlevel, dp,this,UDFUtil.TYPE_CLOSURE);
}
@Override
public Struct _getMetaData(PageContext pc) throws PageException {
Struct meta = ComponentUtil.getMetaData(pc, properties);
meta.setEL(KeyConstants._closure, Boolean.TRUE);// MUST move this to class UDFProperties
meta.setEL("ANONYMOUSCLOSURE", Boolean.TRUE);// MUST move this to class UDFProperties
return meta;
}
@Override
public UDF _duplicate(Component c) {
Closure clo = new Closure(properties,variables);// TODO duplicate variables as well?
clo.ownerComponent=c;
clo.setAccess(getAccess());
return clo;
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
// access
setAccess(in.readInt());
// properties
properties=(UDFPropertiesBase) in.readObject();
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
// access
out.writeInt(getAccess());
// properties
out.writeObject(properties);
}
}