|
|
@ -3,6 +3,9 @@ package com.fr.solution.plugin.design.formula.ui; |
|
|
|
import com.fr.base.BaseFormula; |
|
|
|
import com.fr.base.BaseFormula; |
|
|
|
import com.fr.base.BaseUtils; |
|
|
|
import com.fr.base.BaseUtils; |
|
|
|
import com.fr.base.FRContext; |
|
|
|
import com.fr.base.FRContext; |
|
|
|
|
|
|
|
import com.fr.base.Parameter; |
|
|
|
|
|
|
|
import com.fr.base.ParameterHelper; |
|
|
|
|
|
|
|
import com.fr.base.ParameterMapNameSpace; |
|
|
|
import com.fr.base.io.IOFile; |
|
|
|
import com.fr.base.io.IOFile; |
|
|
|
import com.fr.data.TableDataSource; |
|
|
|
import com.fr.data.TableDataSource; |
|
|
|
import com.fr.design.actions.UpdateAction; |
|
|
|
import com.fr.design.actions.UpdateAction; |
|
|
@ -10,6 +13,7 @@ import com.fr.design.border.UIRoundedBorder; |
|
|
|
import com.fr.design.constants.UIConstants; |
|
|
|
import com.fr.design.constants.UIConstants; |
|
|
|
import com.fr.design.dialog.BasicDialog; |
|
|
|
import com.fr.design.dialog.BasicDialog; |
|
|
|
import com.fr.design.dialog.BasicPane; |
|
|
|
import com.fr.design.dialog.BasicPane; |
|
|
|
|
|
|
|
import com.fr.design.dialog.DialogActionAdapter; |
|
|
|
import com.fr.design.file.HistoryTemplateListPane; |
|
|
|
import com.fr.design.file.HistoryTemplateListPane; |
|
|
|
import com.fr.design.formula.FunctionConstants; |
|
|
|
import com.fr.design.formula.FunctionConstants; |
|
|
|
import com.fr.design.formula.FunctionGroup; |
|
|
|
import com.fr.design.formula.FunctionGroup; |
|
|
@ -25,6 +29,7 @@ import com.fr.design.gui.itextfield.UITextField; |
|
|
|
import com.fr.design.layout.FRGUIPaneFactory; |
|
|
|
import com.fr.design.layout.FRGUIPaneFactory; |
|
|
|
import com.fr.design.mainframe.DesignerContext; |
|
|
|
import com.fr.design.mainframe.DesignerContext; |
|
|
|
import com.fr.design.mainframe.JTemplate; |
|
|
|
import com.fr.design.mainframe.JTemplate; |
|
|
|
|
|
|
|
import com.fr.design.parameter.ParameterInputPane; |
|
|
|
import com.fr.design.utils.gui.GUICoreUtils; |
|
|
|
import com.fr.design.utils.gui.GUICoreUtils; |
|
|
|
import com.fr.general.GeneralUtils; |
|
|
|
import com.fr.general.GeneralUtils; |
|
|
|
import com.fr.general.Inter; |
|
|
|
import com.fr.general.Inter; |
|
|
@ -32,6 +37,7 @@ import com.fr.report.core.namespace.SimpleCellValueNameSpace; |
|
|
|
import com.fr.script.Calculator; |
|
|
|
import com.fr.script.Calculator; |
|
|
|
import com.fr.solution.plugin.design.formula.ui.evt.OperateListener; |
|
|
|
import com.fr.solution.plugin.design.formula.ui.evt.OperateListener; |
|
|
|
import com.fr.solution.plugin.design.formula.ui.type.CategoryFormulaPane; |
|
|
|
import com.fr.solution.plugin.design.formula.ui.type.CategoryFormulaPane; |
|
|
|
|
|
|
|
import com.fr.stable.ArrayUtils; |
|
|
|
import com.fr.stable.EncodeConstants; |
|
|
|
import com.fr.stable.EncodeConstants; |
|
|
|
import com.fr.stable.StringUtils; |
|
|
|
import com.fr.stable.StringUtils; |
|
|
|
import com.fr.stable.UtilEvalError; |
|
|
|
import com.fr.stable.UtilEvalError; |
|
|
@ -60,7 +66,9 @@ import java.io.InputStream; |
|
|
|
import java.io.InputStreamReader; |
|
|
|
import java.io.InputStreamReader; |
|
|
|
import java.io.Reader; |
|
|
|
import java.io.Reader; |
|
|
|
import java.io.StringReader; |
|
|
|
import java.io.StringReader; |
|
|
|
|
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.Locale; |
|
|
|
import java.util.Locale; |
|
|
|
|
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 组合了普通公式和脚本公式的编辑器面板 |
|
|
|
* 组合了普通公式和脚本公式的编辑器面板 |
|
|
@ -321,18 +329,34 @@ public class GroupFormulaPane extends BasicPane implements UIFormula, OperateLis |
|
|
|
calculator.setAttribute(TableDataSource.class, file); |
|
|
|
calculator.setAttribute(TableDataSource.class, file); |
|
|
|
calculator.pushNameSpace(SimpleCellValueNameSpace.getInstance()); |
|
|
|
calculator.pushNameSpace(SimpleCellValueNameSpace.getInstance()); |
|
|
|
} |
|
|
|
} |
|
|
|
String message; |
|
|
|
BaseFormula formula = GroupFormulaPane.this.update(); |
|
|
|
try { |
|
|
|
String message = calculate(formula, formulaPane.analyze4Parameters(calculator), calculator); |
|
|
|
BaseFormula formula = GroupFormulaPane.this.update(); |
|
|
|
|
|
|
|
Object result = formula.evalValue(calculator); |
|
|
|
|
|
|
|
message = Inter.getLocText("FR-Designer_Group_Formula_Result") + ":" + GeneralUtils.objectToString(result); |
|
|
|
|
|
|
|
} catch (UtilEvalError utilEvalError) { |
|
|
|
|
|
|
|
message = Inter.getLocText("FR-Designer_Group_Formula_Calculate_Error") + ":" + utilEvalError.getMessage(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), message); |
|
|
|
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), message); |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private String calculate(BaseFormula formula, Parameter[] parameters, Calculator calculator) { |
|
|
|
|
|
|
|
final Map<String, Object> parameterMap = new HashMap<String, Object>(); |
|
|
|
|
|
|
|
if (ArrayUtils.isNotEmpty(parameters)) { |
|
|
|
|
|
|
|
final ParameterInputPane pPane = new ParameterInputPane(parameters); |
|
|
|
|
|
|
|
pPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { |
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public void doOk() { |
|
|
|
|
|
|
|
parameterMap.putAll(pPane.update()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}).setVisible(true); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
calculator.pushNameSpace(ParameterMapNameSpace.create(parameterMap)); |
|
|
|
|
|
|
|
String message; |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
Object result = formula.evalValue(calculator); |
|
|
|
|
|
|
|
message = Inter.getLocText("FR-Designer_Group_Formula_Result") + ":" + GeneralUtils.objectToString(result); |
|
|
|
|
|
|
|
} catch (UtilEvalError utilEvalError) { |
|
|
|
|
|
|
|
message = Inter.getLocText("FR-Designer_Group_Formula_Calculate_Error") + ":" + utilEvalError.getMessage(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return message; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public class VariableTreeAndDescriptionArea extends JPanel { |
|
|
|
public class VariableTreeAndDescriptionArea extends JPanel { |
|
|
|
|
|
|
|
|
|
|
|
private JTree variablesTree; |
|
|
|
private JTree variablesTree; |
|
|
|