Browse Source

Merge branch 'master' of Kalven/demo-formula-script into master

pull/3/head
richie 5 years ago committed by Gogs
parent
commit
5f7ca80376
  1. 4
      build.xml
  2. 4
      pom.xml
  3. 7
      src/main/java/com/fr/solution/plugin/design/formula/compat/DesignToolkit.java
  4. 51
      src/main/java/com/fr/solution/plugin/design/formula/compat/FunctionConstants.java
  5. 15
      src/main/java/com/fr/solution/plugin/design/formula/compat/FunctionDefNAD.java
  6. 16
      src/main/java/com/fr/solution/plugin/design/formula/compat/NameAndFunctionList.java
  7. 15
      src/main/java/com/fr/solution/plugin/design/formula/compat/NameAndTypeAndFunctionList.java
  8. 115
      src/main/java/com/fr/solution/plugin/design/formula/ui/GroupFormulaPane.java
  9. 2
      src/main/java/com/fr/solution/plugin/design/formula/ui/GroupFormulaPaneWhenReserveFormula.java
  10. 35
      src/main/java/com/fr/solution/plugin/design/formula/ui/type/BaseFormulaPane.java
  11. 19
      src/main/java/com/fr/solution/plugin/design/formula/ui/type/CategoryFormulaPane.java
  12. 6
      src/main/java/com/fr/solution/plugin/design/formula/ui/type/CommonEvent.java
  13. 41
      src/main/java/com/fr/solution/plugin/design/formula/ui/type/impl/BasicFormulaPane.java
  14. 44
      src/main/java/com/fr/solution/plugin/design/formula/ui/type/impl/ScriptFormulaPane.java

4
build.xml

@ -88,8 +88,8 @@
<param name="resources_from" value="${basedir}"/>
</antcall>
<antcall target="compile_javas">
<param name="source_jdk_version" value="1.6"/>
<param name="target_jdk_version" value="1.6"/>
<param name="source_jdk_version" value="1.8"/>
<param name="target_jdk_version" value="1.8"/>
<param name="compile_jdk_version" value="${jdk.home}"/>
<param name="compile_files" value="${basedir}/src"/>
</antcall>

4
pom.xml

@ -20,8 +20,8 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>6</source>
<target>6</target>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>

7
src/main/java/com/fr/solution/plugin/design/formula/compat/DesignToolkit.java

@ -1,7 +1,8 @@
package com.fr.solution.plugin.design.formula.compat;
import com.fr.general.Inter;
import com.fr.stable.ProductConstants;
import com.fanruan.api.i18n.I18nKit;
import com.fanruan.api.macro.ProductConstants;
/**
* @author richie
@ -14,7 +15,7 @@ public class DesignToolkit {
public static String getLocText(String key) {
if (version < 10) {
return Inter.getLocText(key);
return I18nKit.getLocText(key);
} else {
try {
return (String) Class.forName("com.fr.design.i18n.Toolkit").getMethod("i18nText", new Class[]{String.class}).invoke(null, key);

51
src/main/java/com/fr/solution/plugin/design/formula/compat/FunctionConstants.java

@ -1,11 +1,18 @@
package com.fr.solution.plugin.design.formula.compat;
import com.fr.design.formula.FunctionDefNAD;
import com.fanruan.api.function.FunctionKit;
import com.fanruan.api.macro.EncodeConstants;
import com.fanruan.api.macro.OperatingSystem;
import com.fanruan.api.util.GeneralKit;
import com.fanruan.api.util.StringKit;
import com.fanruan.api.util.TypeKit;
import com.fr.plugin.ExtraClassManager;
import com.fr.stable.script.Function;
import com.fr.stable.fun.FunctionDefContainer;
import com.fr.design.formula.FunctionGroup;
import com.fr.stable.fun.mark.Mutable;
import com.fr.design.formula.NameAndDescription;
import com.fr.design.formula.NameAndFunctionList;
import com.fr.design.formula.NameAndTypeAndFunctionList;
import com.fr.file.FunctionManager;
import com.fr.function.AVERAGE;
import com.fr.function.CHAR;
import com.fr.function.COUNT;
@ -15,17 +22,11 @@ import com.fr.function.MIN;
import com.fr.function.RANGE;
import com.fr.function.SUM;
import com.fr.function.TIME;
import com.fr.general.ComparatorUtils;
//先不改
import com.fr.general.FRLogger;
import com.fr.general.GeneralUtils;
import com.fr.plugin.ExtraClassManager;
import com.fr.stable.EncodeConstants;
import com.fr.stable.OperatingSystem;
import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils;
import com.fr.stable.fun.FunctionDefContainer;
import com.fr.stable.fun.mark.Mutable;
import com.fr.stable.script.Function;
//有问题
import com.fr.stable.script.FunctionDef;
import javax.swing.*;
@ -96,7 +97,7 @@ public final class FunctionConstants {
for (String fileName : findClassNamesUnderFilePath(classFilePath)) {
try {
Class<?> cls = Class.forName(pkgName + "." + fileName.substring(0, fileName.length() - 6));
if (StableUtils.classInstanceOf(cls, iface)) {
if (TypeKit.classInstanceOf(cls, iface)) {
Function inst;
inst = (Function)cls.newInstance();
for (NameAndTypeAndFunctionList EMBFUNCTION : EMBFUNCTIONS) {
@ -119,7 +120,7 @@ public final class FunctionConstants {
}
private static boolean isNotDebugMode() {
return GeneralUtils.readBuildNO().contains("-");
return GeneralKit.readBuildNO().contains("-");
}
private static boolean isJarPath(String classFilePath) {
@ -181,7 +182,7 @@ public final class FunctionConstants {
}
if (!OperatingSystem.isWindows()){
//windows里substring后是d:\123\456, mac下substring后是Application/123/456
jarPath = StringUtils.perfectStart(jarPath, "/");
jarPath = StringKit.perfectStart(jarPath, "/");
}
ZipFile zip;
@ -249,19 +250,7 @@ public final class FunctionConstants {
@Override
public NameAndDescription[] getDescriptions() {
FunctionManager funtionManager = FunctionManager.getInstance();
if (funtionManager != null) {
int functionDefCount = funtionManager.getFunctionDefCount();
FunctionDefNAD[] nads = new FunctionDefNAD[functionDefCount];
for (int i = 0; i < functionDefCount; i++) {
nads[i] = new FunctionDefNAD(funtionManager.getFunctionDef(i));
}
return nads;
}
return new NameAndDescription[0];
return FunctionKit.getDescription();
}
};
}
@ -311,7 +300,7 @@ public final class FunctionConstants {
Collections.sort(all, new Comparator<NameAndDescription>() {
@Override
public int compare(NameAndDescription o1, NameAndDescription o2) {
return ComparatorUtils.compare(o1.getName(), o2.getName());
return GeneralKit.compare(o1.getName(), o2.getName());
}
});

15
src/main/java/com/fr/solution/plugin/design/formula/compat/FunctionDefNAD.java

@ -0,0 +1,15 @@
package com.fr.solution.plugin.design.formula.compat;
import com.fr.stable.script.FunctionDef;
/**
* 函数名和描述
* @author Kalven
* @version 10.0
* Created by Kalven on 2019/8/31
*/
public class FunctionDefNAD extends com.fr.design.formula.FunctionDefNAD {
public FunctionDefNAD(FunctionDef functionDef) {
super(functionDef);
}
}

16
src/main/java/com/fr/solution/plugin/design/formula/compat/NameAndFunctionList.java

@ -0,0 +1,16 @@
package com.fr.solution.plugin.design.formula.compat;
import com.fr.stable.script.Function;
/**
* 名称对应的函数列表
* @author Kalven
* @version 10.0
* Created by Kalven on 2019/8/31
*/
public class NameAndFunctionList extends com.fr.design.formula.NameAndFunctionList {
public NameAndFunctionList(String name, Function[] fns) {
super(name, fns);
}
}

15
src/main/java/com/fr/solution/plugin/design/formula/compat/NameAndTypeAndFunctionList.java

@ -0,0 +1,15 @@
package com.fr.solution.plugin.design.formula.compat;
import com.fr.stable.script.Function;
/**
* 名字和类型对应的函数列表
* @author Kalven
* @version 10.0
* Created by Kalven on 2019/8/31
*/
public class NameAndTypeAndFunctionList extends com.fr.design.formula.NameAndTypeAndFunctionList {
public NameAndTypeAndFunctionList(String name, Function.Type type) {
super(name, type);
}
}

115
src/main/java/com/fr/solution/plugin/design/formula/ui/GroupFormulaPane.java

@ -1,46 +1,55 @@
package com.fr.solution.plugin.design.formula.ui;
import com.fanruan.api.cal.CalculatorKit;
import com.fanruan.api.cal.ParameterKit;
import com.fanruan.api.design.DesignKit;
import com.fanruan.api.design.ui.component.*;
import com.fanruan.api.design.ui.container.BasicPane;
import com.fanruan.api.design.ui.action.UpdateAction;
import com.fanruan.api.design.work.ParameterInputPane;
import com.fanruan.api.design.ui.container.UIScrollPane;
import com.fanruan.api.design.ui.component.UIQuickList;
import com.fanruan.api.macro.EncodeConstants;
import com.fanruan.api.util.IOKit;
import com.fanruan.api.design.util.GUICoreKit;
import com.fanruan.api.util.*;
/**
* 接口
*/
import com.fr.base.BaseFormula;
import com.fr.base.BaseUtils;
import com.fr.base.FRContext;
import com.fr.base.Parameter;
import com.fr.base.ParameterMapNameSpace;
import com.fr.base.io.IOFile;
import com.fr.data.TableDataSource;
import com.fr.design.actions.UpdateAction;
import com.fr.design.border.UIRoundedBorder;
import com.fr.design.constants.UIConstants;
import com.fr.design.dialog.BasicDialog;
import com.fr.design.dialog.BasicPane;
import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.formula.FunctionGroup;
import com.fr.design.formula.NameAndDescription;
import com.fr.design.formula.UIFormula;
import com.fr.design.formula.VariableResolver;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.ilist.QuickList;
import com.fr.design.gui.itextarea.UITextArea;
import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.JTemplate;
import com.fr.design.parameter.ParameterInputPane;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.FRLogger;
import com.fr.general.GeneralUtils;
import com.fr.report.core.namespace.SimpleCellValueNameSpace;
import com.fr.script.Calculator;
import com.fr.stable.ParameterProvider;
import com.fr.stable.script.CalculatorProvider;
import com.fr.design.formula.FunctionGroup;
/**
* 调用了其他函数的方法返回值是父类无法赋值给子类
*/
import com.fr.design.dialog.BasicDialog;
import com.fr.design.formula.NameAndDescription;
import com.fr.design.mainframe.JTemplate;
/**
* 类似于上一个问题不过是无法获取父类异常
*/
import com.fr.stable.UtilEvalError;
/**
* IOFile更改后悔出错不敢换有instance可能出错
*/
//import com.fr.base.io.IOFile;
import com.fr.solution.plugin.design.formula.compat.DesignToolkit;
import com.fr.solution.plugin.design.formula.compat.FunctionConstants;
import com.fr.solution.plugin.design.formula.ui.evt.OperateListener;
import com.fr.solution.plugin.design.formula.ui.type.CategoryFormulaPane;
import com.fr.stable.ArrayUtils;
import com.fr.stable.EncodeConstants;
import com.fr.stable.StringUtils;
import com.fr.stable.UtilEvalError;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
@ -85,7 +94,7 @@ public class GroupFormulaPane extends BasicPane implements UIFormula, OperateLis
private DefaultListModel listModel = new DefaultListModel();
private DefaultListModel functionTypeListModel = new DefaultListModel();
private QuickList functionTypeList;
private UIQuickList functionTypeList;
private DefaultListModel functionNameModel;
private JList functionNameList;
@ -145,7 +154,7 @@ public class GroupFormulaPane extends BasicPane implements UIFormula, OperateLis
JPanel checkBoxPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
checkBoxPane.setPreferredSize(new Dimension(450, 30));
checkBoxAndButtonPane.add(checkBoxPane, BorderLayout.WEST);
checkBoxAndButtonPane.add(GUICoreUtils.createFlowPane(checkValidButton, calculateButton), BorderLayout.EAST);
checkBoxAndButtonPane.add(GUICoreKit.createFlowPane(checkValidButton, calculateButton), BorderLayout.EAST);
extendCheckBoxPane(checkBoxPane);
variableTreeAndDescriptionArea = new VariableTreeAndDescriptionArea();
this.add(variableTreeAndDescriptionArea, BorderLayout.SOUTH);
@ -252,7 +261,7 @@ public class GroupFormulaPane extends BasicPane implements UIFormula, OperateLis
NameAndDescription and = descriptions[i];
String functionName = and.searchResult(keyWord, findDescription);
if (StringUtils.isNotBlank(functionName)) {
if (StringKit.isNotBlank(functionName)) {
listModel.addElement(functionName);
}
}
@ -322,35 +331,35 @@ public class GroupFormulaPane extends BasicPane implements UIFormula, OperateLis
private ActionListener calculateActionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Calculator calculator = Calculator.createCalculator();
JTemplate<?, ?> template = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate();
CalculatorProvider calculator = CalculatorKit.createCalculator();
JTemplate<?, ?> template = DesignKit.getCurrentEditingTemplate();
if (template != null) {
IOFile file = (IOFile) template.getTarget();
TableDataSource file = (TableDataSource) template.getTarget();
calculator.setAttribute(TableDataSource.class, file);
calculator.pushNameSpace(SimpleCellValueNameSpace.getInstance());
calculator.pushNameSpace(CalculatorKit.createSimpleCellValueNameSpace());
}
BaseFormula formula = GroupFormulaPane.this.update();
String message = calculate(formula, formulaPane.analyze4Parameters(calculator), calculator);
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), message);
JOptionPane.showMessageDialog(DesignKit.getDesignerFrame(), message);
}
};
private String calculate(BaseFormula formula, Parameter[] parameters, Calculator calculator) {
private String calculate(BaseFormula formula, ParameterProvider[] parameters, CalculatorProvider calculator) {
final Map<String, Object> parameterMap = new HashMap<String, Object>();
if (ArrayUtils.isNotEmpty(parameters)) {
if (ArrayKit.isNotEmpty(parameters)) {
final ParameterInputPane pPane = new ParameterInputPane(parameters);
pPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() {
pPane.showSmallWindow(DesignKit.getDesignerFrame(), new DialogActionAdapter() {
@Override
public void doOk() {
parameterMap.putAll(pPane.update());
}
}).setVisible(true);
}
calculator.pushNameSpace(ParameterMapNameSpace.create(parameterMap));
calculator.pushNameSpace(ParameterKit.createParameterMapNameSpace(parameterMap));
String message;
try {
Object result = formula.evalValue(calculator);
message = DesignToolkit.getLocText("Plugin-Design_Group_Formula_Result") + ":" + GeneralUtils.objectToString(result);
message = DesignToolkit.getLocText("Plugin-Design_Group_Formula_Result") + ":" + GeneralKit.objectToString(result);
} catch (UtilEvalError utilEvalError) {
message = DesignToolkit.getLocText("Plugin-Design_Group_Formula_Calculate_Error") + ":" + utilEvalError.getMessage();
}
@ -367,7 +376,7 @@ public class GroupFormulaPane extends BasicPane implements UIFormula, OperateLis
}
private void initFunctionTypeList(JPanel functionPane) {
functionTypeList = new QuickList(functionTypeListModel);
functionTypeList = new UIQuickList(functionTypeListModel);
UIScrollPane functionTypeScrollPane = new UIScrollPane(functionTypeList);
functionTypeScrollPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, UIConstants.ARC));
functionTypeScrollPane.setPreferredSize(new Dimension(140, 200));
@ -474,7 +483,7 @@ public class GroupFormulaPane extends BasicPane implements UIFormula, OperateLis
popupMenu.add(lookDetailAction);
// peter: 只有弹出菜单有子菜单的时候,才需要弹出来.
GUICoreUtils.showPopupMenu(popupMenu, functionNameList, evt.getX() - 1, evt.getY() - 1);
GUICoreKit.showPopupMenu(popupMenu, functionNameList, evt.getX() - 1, evt.getY() - 1);
}
}
});
@ -518,7 +527,7 @@ public class GroupFormulaPane extends BasicPane implements UIFormula, OperateLis
private StringBuilder getText(TextUserObject selectedValue, String path) throws IOException {
Reader desReader;
StringBuilder desBuf = new StringBuilder();
InputStream desInputStream = BaseUtils.readResource(path + (selectedValue).displayText + ".txt");
InputStream desInputStream = IOKit.readResource(path + (selectedValue).displayText + ".txt");
if (desInputStream == null) {
String description = "";
desReader = new StringReader(description);
@ -548,7 +557,7 @@ public class GroupFormulaPane extends BasicPane implements UIFormula, OperateLis
StringBuilder desBuf = new StringBuilder();
try {
String path;
Locale locale = FRContext.getLocale();
Locale locale = GeneralKit.getLocale();
if (locale.equals(Locale.CHINA)) {
path = "/com/fr/design/insert/formula/variable/cn/";
} else {
@ -603,7 +612,7 @@ public class GroupFormulaPane extends BasicPane implements UIFormula, OperateLis
public LookDetailAction() {
this.setName(DesignToolkit.getLocText("Plugin-Design_Basic_FormulaPane_Function_Detail"));
this.setMnemonic('L');
this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_file/preview.png"));
this.setSmallIcon(IOKit.readIcon("/com/fr/design/images/m_file/preview.png"));
}
// 弹出的窗口中显示函数的用法明细
@ -624,7 +633,7 @@ public class GroupFormulaPane extends BasicPane implements UIFormula, OperateLis
// desArea。setEnabled(false);
desArea.setText(this.getTextAreaText());
basicPane.add(new UIScrollPane(desArea), BorderLayout.CENTER);
BasicDialog dialog = basicPane.showWindow(DesignerContext.getDesignerFrame());
BasicDialog dialog = basicPane.showWindow(DesignKit.getDesignerFrame());
dialog.setVisible(true);
}
@ -706,24 +715,24 @@ public class GroupFormulaPane extends BasicPane implements UIFormula, OperateLis
}
rootNode.add(new TextFolderUserObject(DesignToolkit.getLocText("Plugin-Design_Basic_FormulaD_Data_Fields"),
BaseUtils.readIcon("/com/fr/design/images/dialog/table.png"),
IOKit.readIcon("/com/fr/design/images/dialog/table.png"),
variableResolver.resolveColumnNames()).createMutableTreeNode());
// Set cutReport Variable
rootNode.add(new TextFolderUserObject(DesignToolkit.getLocText("Plugin-Design_Basic_FormulaPane_Variables"),
BaseUtils.readIcon("/com/fr/design/images/dialog/variable.png"),
IOKit.readIcon("/com/fr/design/images/dialog/variable.png"),
variableResolver.resolveCurReportVariables()).createMutableTreeNode());
rootNode.add(new TextFolderUserObject(DesignToolkit.getLocText("Plugin-Design_Basic_Parameter_Source_Type_Tabledata"),
BaseUtils.readIcon("/com/fr/design/images/dialog/parameter.gif"),
IOKit.readIcon("/com/fr/design/images/dialog/parameter.gif"),
variableResolver.resolveTableDataParameterVariables()).createMutableTreeNode());
rootNode.add(new TextFolderUserObject(DesignToolkit.getLocText("Plugin-Design_Basic_ParameterD_Report_Parameter"),
BaseUtils.readIcon("/com/fr/design/images/m_report/p.gif"),
IOKit.readIcon("/com/fr/design/images/m_report/p.gif"),
variableResolver.resolveReportParameterVariables()).createMutableTreeNode());
rootNode.add(new TextFolderUserObject(DesignToolkit.getLocText("Plugin-Design_Basic_M_Server_Global_Parameters"),
BaseUtils.readIcon("/com/fr/design/images/dialog/parameter.gif"),
IOKit.readIcon("/com/fr/design/images/dialog/parameter.gif"),
variableResolver.resolveGlobalParameterVariables()).createMutableTreeNode());
variableModel.reload();

2
src/main/java/com/fr/solution/plugin/design/formula/ui/GroupFormulaPaneWhenReserveFormula.java

@ -1,8 +1,8 @@
package com.fr.solution.plugin.design.formula.ui;
import com.fanruan.api.design.ui.component.UICheckBox;
import com.fr.base.BaseFormula;
import com.fr.design.formula.VariableResolver;
import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.solution.plugin.design.formula.compat.DesignToolkit;
import javax.swing.*;

35
src/main/java/com/fr/solution/plugin/design/formula/ui/type/BaseFormulaPane.java

@ -1,20 +1,14 @@
package com.fr.solution.plugin.design.formula.ui.type;
import com.fanruan.api.design.ui.component.code.UISyntaxTextArea;
import com.fanruan.api.i18n.I18nKit;
import com.fr.base.BaseFormula;
import com.fanruan.api.macro.ProductConstants;
import com.fanruan.api.util.StringKit;
import com.fanruan.api.design.ui.container.UIScrollPane;
import com.fr.design.beans.FurtherBasicBeanPane;
import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.syntax.ui.rsyntaxtextarea.RSyntaxTextArea;
import com.fr.general.FRLogger;
import com.fr.general.Inter;
import com.fr.log.FineLoggerFactory;
import com.fr.parser.FRLexer;
import com.fr.parser.FRParser;
import com.fr.script.Calculator;
import com.fr.solution.plugin.design.formula.ui.evt.OperateListener;
import com.fr.stable.ProductConstants;
import com.fr.stable.StringUtils;
import com.fr.stable.script.Expression;
import com.fr.third.antlr.ANTLRException;
import javax.swing.*;
import java.awt.*;
@ -23,7 +17,6 @@ import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.StringReader;
public abstract class BaseFormulaPane<T extends BaseFormula> extends FurtherBasicBeanPane<T> implements CommonEvent, KeyListener {
@ -35,7 +28,7 @@ public abstract class BaseFormulaPane<T extends BaseFormula> extends FurtherBasi
private static final int KEY_40 = 40;
private RSyntaxTextArea formulaTextArea;
private UISyntaxTextArea formulaTextArea;
private int currentPosition = 0;
private int beginPosition = 0;
private int insertPosition = 0;
@ -66,7 +59,7 @@ public abstract class BaseFormulaPane<T extends BaseFormula> extends FurtherBasi
formulaTextArea.setForeground(Color.black);
String text = formulaTextArea.getText();
// 判断在中文输入状态是否还包含提示符 要删掉
String tip = "\n\n\n" + Inter.getLocText("Plugin-Design_Basic_FormulaPane_Tips");
String tip = "\n\n\n" + I18nKit.getLocText("Plugin-Design_Basic_FormulaPane_Tips");
if (text.contains(tip)) {
text = text.substring(0, text.indexOf(tip));
insertPosition = 0;
@ -149,12 +142,12 @@ public abstract class BaseFormulaPane<T extends BaseFormula> extends FurtherBasi
}
protected abstract RSyntaxTextArea createContentEditor();
protected abstract UISyntaxTextArea createContentEditor();
protected void fixContent(String content) {
if (content.trim().equals("=")) {
this.formulaTextArea.setForeground(Color.gray);
this.formulaTextArea.setText("\n\n\n" + Inter.getLocText("Plugin-Design_Basic_FormulaPane_Tips"));
this.formulaTextArea.setText("\n\n\n" + I18nKit.getLocText("Plugin-Design_Basic_FormulaPane_Tips"));
this.formulaTextArea.setCaretPosition(0);
ifHasBeenWritten = 0;
operateListener.clearMathListModel();
@ -205,7 +198,7 @@ public abstract class BaseFormulaPane<T extends BaseFormula> extends FurtherBasi
@Override
public void keyPressed(KeyEvent e) {
if (ifHasBeenWritten == 0) {
this.formulaTextArea.setText(StringUtils.EMPTY);
this.formulaTextArea.setText(StringKit.EMPTY);
}
}
@ -307,10 +300,10 @@ public abstract class BaseFormulaPane<T extends BaseFormula> extends FurtherBasi
public void checkContentValid() {
// Execute Formula default cell element.
String formulaText = formulaTextArea.getText().trim();
if (StringUtils.isNotEmpty(formulaText)) {
if (StringKit.isNotEmpty(formulaText)) {
JOptionPane.showMessageDialog(
BaseFormulaPane.this,
(isValidFormula(formulaText) ? Inter.getLocText("Plugin-Design_Basic_FormulaD_Valid_Formula") : Inter.getLocText("Plugin-Design_Basic_FormulaD_Invalid_Formula")) + ".", ProductConstants.PRODUCT_NAME,
(isValidFormula(formulaText) ? I18nKit.getLocText("Plugin-Design_Basic_FormulaD_Valid_Formula") : I18nKit.getLocText("Plugin-Design_Basic_FormulaD_Invalid_Formula")) + ".", ProductConstants.PRODUCT_NAME,
JOptionPane.INFORMATION_MESSAGE);
}
}
@ -328,6 +321,6 @@ public abstract class BaseFormulaPane<T extends BaseFormula> extends FurtherBasi
@Override
public String title4PopupWindow() {
return Inter.getLocText("Plugin-Design_Group_Formula_Basic_Title");
return I18nKit.getLocText("Plugin-Design_Group_Formula_Basic_Title");
}
}

19
src/main/java/com/fr/solution/plugin/design/formula/ui/type/CategoryFormulaPane.java

@ -1,18 +1,23 @@
package com.fr.solution.plugin.design.formula.ui.type;
import com.fr.base.BaseFormula;
import com.fr.base.Parameter;
import com.fr.design.beans.FurtherBasicBeanPane;
import com.fr.design.gui.frpane.UIRadioPane;
import com.fr.script.Calculator;
import com.fanruan.api.design.ui.component.UIRadioPane;
import com.fr.stable.ParameterProvider;
import com.fr.stable.script.CalculatorProvider;
import com.fr.solution.plugin.design.formula.ui.evt.OperateListener;
import com.fr.solution.plugin.design.formula.ui.type.impl.BasicFormulaPane;
import com.fr.solution.plugin.design.formula.ui.type.impl.ScriptFormulaPane;
/**
* 有问题子类无法重写abstract方法的参数无法修改
*/
import com.fr.design.beans.FurtherBasicBeanPane;
import com.fr.base.BaseFormula;
import java.util.ArrayList;
import java.util.List;
public class CategoryFormulaPane extends UIRadioPane<BaseFormula>{
public class CategoryFormulaPane extends UIRadioPane<BaseFormula> {
private static final long serialVersionUID = 6102846618673364636L;
private List<CommonEvent> events;
@ -62,7 +67,7 @@ public class CategoryFormulaPane extends UIRadioPane<BaseFormula>{
}
}
public Parameter[] analyze4Parameters(Calculator calculator) {
public ParameterProvider[] analyze4Parameters(CalculatorProvider calculator) {
return events.get(cardNamesPane.getSelectedIndex()).analyze4Parameters(calculator);
}

6
src/main/java/com/fr/solution/plugin/design/formula/ui/type/CommonEvent.java

@ -1,8 +1,8 @@
package com.fr.solution.plugin.design.formula.ui.type;
import com.fr.base.Parameter;
import com.fr.script.Calculator;
import com.fr.solution.plugin.design.formula.ui.evt.OperateListener;
import com.fr.stable.ParameterProvider;
import com.fr.stable.script.CalculatorProvider;
public interface CommonEvent {
@ -18,5 +18,5 @@ public interface CommonEvent {
void setOperateListener(OperateListener listener);
Parameter[] analyze4Parameters(Calculator calculator);
ParameterProvider[] analyze4Parameters(CalculatorProvider calculator);
}

41
src/main/java/com/fr/solution/plugin/design/formula/ui/type/impl/BasicFormulaPane.java

@ -1,17 +1,17 @@
package com.fr.solution.plugin.design.formula.ui.type.impl;
import com.fanruan.api.cal.FormulaKit;
import com.fanruan.api.cal.ParameterKit;
import com.fanruan.api.design.ui.component.code.UISyntaxTextArea;
import com.fanruan.api.util.StringKit;
import com.fr.base.Formula;
import com.fr.base.Parameter;
import com.fr.design.gui.syntax.ui.rsyntaxtextarea.RSyntaxTextArea;
import com.fr.design.gui.syntax.ui.rsyntaxtextarea.SyntaxConstants;
import com.fr.general.FRLogger;
import com.fr.script.Calculator;
import com.fr.solution.plugin.design.formula.ui.type.BaseFormulaPane;
import com.fr.stable.StringUtils;
import com.fr.stable.script.Expression;
import com.fr.third.antlr.ANTLRException;
import java.util.Set;
import com.fr.stable.ParameterProvider;
import com.fr.stable.script.CalculatorProvider;
public class BasicFormulaPane extends BaseFormulaPane<Formula> {
@ -36,7 +36,7 @@ public class BasicFormulaPane extends BaseFormulaPane<Formula> {
@Override
protected Formula createFormula(String content) {
Formula formula;
if (StringUtils.isEmpty(content) || content.trim().charAt(0) == '=') {
if (StringKit.isEmpty(content) || content.trim().charAt(0) == '=') {
formula = new Formula(content);
} else {
formula = new Formula("=" + content);
@ -46,13 +46,13 @@ public class BasicFormulaPane extends BaseFormulaPane<Formula> {
@Override
protected RSyntaxTextArea createContentEditor() {
RSyntaxTextArea formulaTextArea = new RSyntaxTextArea();
protected UISyntaxTextArea createContentEditor() {
UISyntaxTextArea formulaTextArea = new UISyntaxTextArea();
configFormulaArea(formulaTextArea);
return formulaTextArea;
}
protected void configFormulaArea(RSyntaxTextArea formulaTextArea) {
protected void configFormulaArea(UISyntaxTextArea formulaTextArea) {
formulaTextArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_FORMULA);
formulaTextArea.setAnimateBracketMatching(true);
formulaTextArea.setAntiAliasingEnabled(true);
@ -68,26 +68,19 @@ public class BasicFormulaPane extends BaseFormulaPane<Formula> {
@Override
protected boolean isValidFormula(String formulaText) {
Formula formula = createFormula(formulaText);
Expression expression = null;
try {
expression = formula.parse(Calculator.createCalculator());
} catch (ANTLRException e) {
FRLogger.getLogger().error(e.getMessage(), e);
}
return expression != null;
return FormulaKit.checkFormulaContent(formulaText);
}
@Override
public Parameter[] analyze4Parameters(Calculator calculator) {
public ParameterProvider[] analyze4Parameters(CalculatorProvider calculator) {
Formula formula = updateBean();
if (formula == null) {
return new Parameter[0];
return new ParameterProvider[0];
}
String[] arr = formula.dependence(calculator);
Parameter[] parameters = new Parameter[arr.length];
ParameterProvider[] parameters = new ParameterProvider[arr.length];
for (int i = 0, len = arr.length; i < len; i ++) {
parameters[i] = new Parameter(arr[i]);
parameters[i] = ParameterKit.newParameter(arr[i]);
}
return parameters;
}

44
src/main/java/com/fr/solution/plugin/design/formula/ui/type/impl/ScriptFormulaPane.java

@ -1,19 +1,21 @@
package com.fr.solution.plugin.design.formula.ui.type.impl;
import com.fr.base.Parameter;
import com.fr.base.ParameterHelper;
import com.fanruan.api.cal.CalculatorKit;
import com.fanruan.api.cal.ParameterKit;
import com.fanruan.api.design.ui.component.code.UISyntaxTextArea;
import com.fanruan.api.i18n.I18nKit;
import com.fanruan.api.script.ScriptKit;
import com.fanruan.api.util.StringKit;
import com.fanruan.api.util.RenderKit;
import com.fr.base.ScriptFormula;
import com.fr.base.TemplateUtils;
import com.fr.design.gui.syntax.ui.rsyntaxtextarea.RSyntaxTextArea;
import com.fr.design.gui.syntax.ui.rsyntaxtextarea.SyntaxConstants;
import com.fr.general.FRLogger;
import com.fr.general.Inter;
import com.fr.script.Calculator;
import com.fr.script.ScriptFactory;
import com.fr.solution.plugin.design.formula.ui.type.BaseFormulaPane;
import com.fr.stable.StringUtils;
import com.fr.stable.ParameterProvider;
import com.fr.stable.script.CalculatorProvider;
import javax.script.ScriptException;
import java.util.HashMap;
import java.util.Map;
@ -25,8 +27,8 @@ public class ScriptFormulaPane extends BaseFormulaPane<ScriptFormula> {
"})();";
@Override
protected RSyntaxTextArea createContentEditor() {
RSyntaxTextArea formulaTextArea = new RSyntaxTextArea();
protected UISyntaxTextArea createContentEditor() {
UISyntaxTextArea formulaTextArea = new UISyntaxTextArea();
formulaTextArea.setCloseCurlyBraces(true);
formulaTextArea.setLineWrap(true);
formulaTextArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVASCRIPT);
@ -56,7 +58,7 @@ public class ScriptFormulaPane extends BaseFormulaPane<ScriptFormula> {
@Override
protected ScriptFormula createFormula(String content) {
ScriptFormula formula;
if (StringUtils.isEmpty(content) || content.trim().charAt(0) == '=') {
if (StringKit.isEmpty(content) || content.trim().charAt(0) == '=') {
formula = new ScriptFormula(content);
} else {
formula = new ScriptFormula("=" + content);
@ -81,12 +83,12 @@ public class ScriptFormulaPane extends BaseFormulaPane<ScriptFormula> {
@Override
protected boolean isValidFormula(String formulaText) {
Calculator calculator = Calculator.createCalculator();
CalculatorProvider calculator = CalculatorKit.createCalculator();
ScriptFormula formula = createFormula(formulaText);
Parameter[] parameters = analyze4Parameters(calculator);
ParameterProvider[] parameters = analyze4Parameters(calculator);
Map<String, Object> map = new HashMap<String, Object>();
for (Parameter parameter : parameters) {
for (ParameterProvider parameter : parameters) {
String name = parameter.getName();
Object value = parameter.getValue();
if (value instanceof Boolean) {
@ -99,8 +101,8 @@ public class ScriptFormulaPane extends BaseFormulaPane<ScriptFormula> {
}
try {
String content = TemplateUtils.renderParameter4Tpl(formula.getPureContent(), map);
ScriptFactory.newSingletonScriptEngine().eval(String.format(FUN_TPL, content));
String content = RenderKit.renderParameter4Tpl(formula.getPureContent(), map);
ScriptKit.newScriptEngine().eval(String.format(FUN_TPL, content));
} catch (Exception e) {
FRLogger.getLogger().error(e.getMessage(), e);
return false;
@ -109,16 +111,16 @@ public class ScriptFormulaPane extends BaseFormulaPane<ScriptFormula> {
}
@Override
public Parameter[] analyze4Parameters(Calculator calculator) {
public ParameterProvider[] analyze4Parameters(CalculatorProvider calculator) {
ScriptFormula scriptFormula = updateBean();
if (scriptFormula == null) {
return new Parameter[0];
return new ParameterProvider[0];
}
return ParameterHelper.analyze4Parameters(scriptFormula.getContent(), true);
return ParameterKit.analyze4Parameters(scriptFormula.getContent(), true);
}
@Override
public String title4PopupWindow() {
return Inter.getLocText("Plugin-Design_Group_Formula_Script_Title");
return I18nKit.getLocText("Plugin-Design_Group_Formula_Script_Title");
}
}

Loading…
Cancel
Save