
com.alibaba.qlexpress4.InitOptions Maven / Gradle / Ivy
package com.alibaba.qlexpress4;
import com.alibaba.qlexpress4.aparser.ImportManager;
import com.alibaba.qlexpress4.aparser.InterpolationMode;
import com.alibaba.qlexpress4.runtime.function.ExtensionFunction;
import com.alibaba.qlexpress4.runtime.function.FilterExtensionFunction;
import com.alibaba.qlexpress4.runtime.function.MapExtensionFunction;
import com.alibaba.qlexpress4.security.QLSecurityStrategy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
/**
* Author: TaoKan
*/
public class InitOptions {
public static InitOptions DEFAULT_OPTIONS = InitOptions.builder().build();
private final ClassSupplier classSupplier;
/**
* default import java packages for script
* default
* ImportManager.importPack("java.lang"),
* ImportManager.importPack("java.util"),
* ImportManager.importPack("java.math"),
* ImportManager.importPack("java.util.stream")
* ImportManager.importPack("java.util.function")
*/
private final List defaultImport;
/**
* enable debug mode
* default false
*/
private final boolean debug;
/**
* consume all debug info, valid when debug is true
* default is print in standard output, can not be null
*/
private final Consumer debugInfoConsumer;
/**
* qlexpress security strategy
* default is isolation, not allow any access to java
*/
private final QLSecurityStrategy securityStrategy;
/**
* qlexpress extension functions
* default is some collection convenience functions
*/
private final List extensionFunctions;
/**
* allow access private field and method
* default false
*/
private final boolean allowPrivateAccess;
/**
* How to manage string interpolation, for instance, "a ${t-c} b"
* default SCRIPT
*/
private final InterpolationMode interpolationMode;
private InitOptions(ClassSupplier classSupplier,
List defaultImport,
boolean debug, Consumer debugInfoConsumer,
QLSecurityStrategy securityStrategy,
List extensionFunctions, boolean allowPrivateAccess,
InterpolationMode interpolationMode) {
this.classSupplier = classSupplier;
this.defaultImport = defaultImport;
this.debug = debug;
this.debugInfoConsumer = debugInfoConsumer;
this.securityStrategy = securityStrategy;
this.extensionFunctions = extensionFunctions;
this.allowPrivateAccess = allowPrivateAccess;
this.interpolationMode = interpolationMode;
}
public static InitOptions.Builder builder() {
return new Builder();
}
public List getDefaultImport() {
return defaultImport;
}
public ClassSupplier getClassSupplier() {
return classSupplier;
}
public boolean isDebug() {
return debug;
}
public Consumer getDebugInfoConsumer() {
return debugInfoConsumer;
}
public QLSecurityStrategy getSecurityStrategy() {
return securityStrategy;
}
public List getExtensionFunctions() {
return extensionFunctions;
}
public boolean isAllowPrivateAccess() {
return allowPrivateAccess;
}
public InterpolationMode getInterpolationMode() {
return interpolationMode;
}
public static class Builder {
private ClassSupplier classSupplier = DefaultClassSupplier.getInstance();
private final List defaultImport = new ArrayList<>(Arrays.asList(
ImportManager.importPack("java.lang"),
ImportManager.importPack("java.util"),
ImportManager.importPack("java.math"),
ImportManager.importPack("java.util.stream"),
ImportManager.importPack("java.util.function")
));
private boolean debug = false;
private Consumer debugInfoConsumer = System.out::println;
private QLSecurityStrategy securityStrategy = QLSecurityStrategy.isolation();
private final List extensionFunctions = new ArrayList<>(Arrays.asList(
FilterExtensionFunction.INSTANCE,
MapExtensionFunction.INSTANCE
));
private boolean allowPrivateAccess = false;
private InterpolationMode interpolationMode = InterpolationMode.SCRIPT;
public Builder classSupplier(ClassSupplier classSupplier) {
this.classSupplier = classSupplier;
return this;
}
public Builder addDefaultImport(List defaultImport) {
this.defaultImport.addAll(defaultImport);
return this;
}
public Builder debug(boolean debug) {
this.debug = debug;
return this;
}
public Builder debugInfoConsumer(Consumer debugInfoConsumer) {
this.debugInfoConsumer = debugInfoConsumer;
return this;
}
public Builder securityStrategy(QLSecurityStrategy securityStrategy) {
this.securityStrategy = securityStrategy;
return this;
}
public Builder addExtensionFunctions(List extensionFunctions) {
this.extensionFunctions.addAll(extensionFunctions);
return this;
}
public Builder allowPrivateAccess(boolean allowPrivateAccess) {
this.allowPrivateAccess = allowPrivateAccess;
return this;
}
public Builder interpolationMode(InterpolationMode interpolationMode) {
this.interpolationMode = interpolationMode;
return this;
}
public InitOptions build() {
return new InitOptions(classSupplier, defaultImport,
debug, debugInfoConsumer, securityStrategy, extensionFunctions,
allowPrivateAccess, interpolationMode);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy