
org.unlaxer.tinyexpression.instances.FileBaseTinyExpressionInstancesCache Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of tinyExpression Show documentation
Show all versions of tinyExpression Show documentation
TinyExpression implemented with Unlaxer
package org.unlaxer.tinyexpression.instances;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.unlaxer.tinyexpression.Calculator;
import org.unlaxer.tinyexpression.loader.FormulaInfoAdditionalFields;
import org.unlaxer.tinyexpression.loader.FormulaInfoBlocksParser;
import org.unlaxer.tinyexpression.loader.model.FormulaInfo;
import org.unlaxer.tinyexpression.loader.model.FormulaInfoList;
import org.unlaxer.util.Try;
/**
* 指定されたroot pathからtenantID毎にDirectoryを掘って中にformulaInfo.txtというfileを置いて
* instanceを生成管理するTinyExpressionInstancesCacheの実装です
*
*/
public class FileBaseTinyExpressionInstancesCache implements TinyExpressionInstancesCache{
public static final String FILENAME = "formulaInfo.txt";
static FormulaInfoBlocksParser formulaInfoBlocksParser = new FormulaInfoBlocksParser();
Path rootFolder;
FormulaInfoAdditionalFields formulaInfoAdditionalFields;
Map> calculatorsByTenantId = new ConcurrentHashMap<>();
public FileBaseTinyExpressionInstancesCache(Path rootFolder ,
FormulaInfoAdditionalFields formulaInfoAdditionalFields) {
super();
this.rootFolder = rootFolder;
this.formulaInfoAdditionalFields = formulaInfoAdditionalFields;
}
@Override
public boolean clearCache(TenantID tenantID) {
calculatorsByTenantId.remove(tenantID);
return true;
}
@Override
public List cache(TenantID tenantID, Comparator comparator, ClassLoader classLoader) {
List cache =
calculatorsByTenantId.computeIfAbsent(tenantID,
tenantId->{
Path resolve = rootFolder.resolve(tenantId.asString()).resolve(FILENAME);
try(InputStream inputStream = Files.newInputStream(resolve);){
Try parse =
FormulaInfoList.parse(inputStream, formulaInfoAdditionalFields, classLoader);
parse.throwIfMatch();
List list = parse.right().get().get().stream()
.map(FormulaInfo::calculator)
.sorted(comparator)
.toList();
return list;
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
);
return cache;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy