forked from demo/example
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
4.0 KiB
127 lines
4.0 KiB
5 years ago
|
//
|
||
|
// Source code recreated from a .class file by IntelliJ IDEA
|
||
|
// (powered by Fernflower decompiler)
|
||
|
//
|
||
|
|
||
|
package com.fr.function;
|
||
|
|
||
|
import com.fr.base.BaseUtils;
|
||
|
import com.fr.base.SynchronizedLiveDataModelUtils;
|
||
|
import com.fr.data.impl.RecursionDataModel;
|
||
|
import com.fr.general.FArray;
|
||
|
import com.fr.general.GeneralUtils;
|
||
|
import com.fr.general.data.DataModel;
|
||
|
import com.fr.invoke.Reflect;
|
||
|
import com.fr.script.AbstractFunction;
|
||
|
import com.fr.script.Calculator;
|
||
|
import com.fr.security.function.RestrictScript;
|
||
|
import com.fr.stable.Primitive;
|
||
|
import com.fr.stable.StringUtils;
|
||
|
import com.fr.stable.exception.FormulaException;
|
||
|
|
||
|
import java.util.Map;
|
||
|
|
||
|
@RestrictScript
|
||
|
public class TREENODEFINDER extends AbstractFunction {
|
||
|
public TREENODEFINDER() {
|
||
|
}
|
||
|
|
||
|
public Object run(Object[] args) throws FormulaException {
|
||
|
if (!this.validateArgs(args)) {
|
||
|
return Primitive.ERROR_NAME;
|
||
|
} else {
|
||
|
boolean noLiveDataModel = !this.liveDataModel4ShareExists();
|
||
|
DataModel dataModel = this.generateDataModel(args);
|
||
|
|
||
|
try {
|
||
|
if (args.length != 2) {
|
||
|
return Primitive.NULL;
|
||
|
}
|
||
|
if (args[0] instanceof FArray) {
|
||
|
FArray nodeArray = (FArray) args[0];
|
||
|
FArray result = new FArray();
|
||
|
for (int i = 0; i < nodeArray.length(); i++) {
|
||
|
result.simpleAdd(this.run(GeneralUtils.objectToString(nodeArray.elementAt(i)), dataModel));
|
||
|
}
|
||
|
return result;
|
||
|
} else {
|
||
|
return this.run(GeneralUtils.objectToString(args[0]), dataModel);
|
||
|
}
|
||
|
} finally {
|
||
|
if (noLiveDataModel && dataModel != null) {
|
||
|
try {
|
||
|
dataModel.release();
|
||
|
} catch (Exception var11) {
|
||
|
this.log(var11.getMessage(), var11);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private boolean liveDataModel4ShareExists() {
|
||
|
Calculator calculatorProvider = this.getCalculator();
|
||
|
if (calculatorProvider == null) {
|
||
|
return false;
|
||
|
} else {
|
||
|
Map var1 = (Map) calculatorProvider.getAttribute(SynchronizedLiveDataModelUtils.CUR_LIVE_RS);
|
||
|
return var1 != null && !var1.isEmpty();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Object run(String nodeValue, DataModel dataModel) {
|
||
|
try {
|
||
|
RecursionDataModel rdm = Reflect.on(dataModel).get("dataModel");
|
||
|
int treeStart = 0;
|
||
|
|
||
|
int m;
|
||
|
for (m = 0; m < rdm.getColumnCount(); ++m) {
|
||
|
String colName = rdm.getColumnName(m);
|
||
|
if (colName.startsWith("FR_GEN_")) {
|
||
|
treeStart = m;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
m = 0;
|
||
|
|
||
|
for (int len = rdm.getRowCount(); m < len; ++m) {
|
||
|
int i = 0;
|
||
|
|
||
|
for (int colCount = rdm.getColumnCount(); i < colCount; ++i) {
|
||
|
String value = GeneralUtils.objectToString(rdm.getValueAt(m, i));
|
||
|
if (StringUtils.equals(nodeValue, value)) {
|
||
|
FArray array = new FArray();
|
||
|
|
||
|
for (int j = treeStart; j < colCount; ++j) {
|
||
|
String val = GeneralUtils.objectToString(rdm.getValueAt(m, j));
|
||
|
if (StringUtils.isNotEmpty(val)) {
|
||
|
array.add(val);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return array;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
} catch (Exception var13) {
|
||
|
this.log(var13.getMessage(), var13);
|
||
|
}
|
||
|
|
||
|
return Primitive.NULL;
|
||
|
}
|
||
|
|
||
|
public boolean validateArgs(Object[] args) {
|
||
|
return args != null && args.length >= 1;
|
||
|
}
|
||
|
|
||
|
public DataModel generateDataModel(Object[] args) {
|
||
|
return BaseUtils.getDataModelFromTableDataName(this.getCalculator(), args[1].toString());
|
||
|
}
|
||
|
|
||
|
public Type getType() {
|
||
|
return REPORT;
|
||
|
}
|
||
|
}
|