Compare commits

..

11 Commits

Author SHA1 Message Date
Bruce.Deng d1776fa526 Pull request #31: 无JIRA任务 插件发布,release合persist 5 years ago
Leo.Tsai ca629a1ff6 Pull request #27: Release/10.0 5 years ago
Leo.Cai 99ff96fea6 代码做了修改,而且要导入一个新的JAR包:slf4j-simple-1.7.25.jar,JAR包下载参见文档https://help.finereport.com/doc-view-735.html 的3.1节 5 years ago
Lanlan e1f402023f Pull request #25: 无JIRA任务 插件发布,release合persist 5 years ago
Lanlan 5a3d9301af Merge pull request #23 in PG/plugin-report-doc-demo from release/10.0 to persist/10.0 5 years ago
susie 34ec362f64 Merge pull request #21 in PG/plugin-report-doc-demo from ~HARRISON/plugin-report-doc-demo:persist/10.0 to persist/10.0 5 years ago
Harrison c81c49f7ad DEMO-3230 Release10 module无法引用 5 years ago
Lanlan 9a474478b3 Merge pull request #19 in PG/plugin-report-doc-demo from release/10.0 to persist/10.0 5 years ago
Lanlan 10e88848e4 Merge pull request #12 in PG/plugin-report-doc-demo from release/10.0 to persist/10.0 5 years ago
Lanlan d6274eea84 Merge pull request #10 in PG/plugin-report-doc-demo from release/10.0 to persist/10.0 6 years ago
Lanlan de51123131 Merge pull request #8 in PG/plugin-report-doc-demo from release/10.0 to persist/10.0 6 years ago
  1. 4
      build.xml
  2. 12
      src/main/java/com/fr/data/ParamSAPDataTest.java
  3. 25
      src/main/java/com/fr/data/ParamTableDataDemo.java
  4. 29
      src/main/java/com/fr/data/SimpleArrayTableDataDemo.java
  5. 100
      src/main/java/com/fr/data/SimpleParamTableDataDemo.java
  6. 93
      src/main/java/com/fr/data/WebServiceTableData.java
  7. 4
      src/main/java/com/fr/data/XMLDemoTableData.java
  8. 72
      src/main/java/com/fr/demo/NewReadFrmFromDatabase.java
  9. 4
      src/main/java/com/fr/demo/ReadFromDatabase.java
  10. 10
      src/main/java/com/fr/demo/ReadfrmFromDatabase.java
  11. 2
      src/main/java/com/fr/demo/SaveReportToDatabase.java
  12. 34
      src/main/java/com/fr/demo/SimpleReportletDemoFrm.java
  13. BIN
      src/main/java/com/fr/function/CellSum.class
  14. BIN
      src/main/java/com/fr/function/DateDiff.class
  15. BIN
      src/main/java/com/fr/function/FlagHtmlColor.class
  16. BIN
      src/main/java/com/fr/function/IRR.class
  17. BIN
      src/main/java/com/fr/function/ReportCheck.class
  18. 16
      src/main/java/com/fr/function/ReportCheck.java
  19. BIN
      src/main/java/com/fr/function/StringCat.class
  20. BIN
      src/main/java/com/fr/function/StringImage.class
  21. 45
      src/main/java/com/fr/function/SubSection.java
  22. 126
      src/main/java/com/fr/function/TREENODEFINDER.java
  23. BIN
      src/main/java/com/fr/function/Ubm.class
  24. 105
      src/main/java/com/fr/function/Widget2Image.java
  25. 1
      src/main/java/com/fr/io/CreateGenericTemplate.java
  26. 1
      src/main/java/com/fr/io/ExcelToCpt.java
  27. 1
      src/main/java/com/fr/io/ExcuteDemo.java
  28. 98
      src/main/java/com/fr/io/ExportApi.java
  29. 57
      src/main/java/com/fr/io/ExportApi_frm.java
  30. 1
      src/main/java/com/fr/io/ExportBatch.java
  31. 1
      src/main/java/com/fr/io/ExportExcel.java
  32. 1
      src/main/java/com/fr/io/ExportReports.java
  33. 1
      src/main/java/com/fr/io/JavaPrint.java
  34. 77
      src/main/java/com/fr/io/SaveReportToDatabase.java
  35. 1
      src/main/java/com/fr/io/SetParameterWindow.java
  36. 1
      src/main/java/com/fr/io/SimpleDemo.java
  37. 2
      src/main/java/com/fr/output/OutputExcel.java
  38. 15
      src/main/java/com/fr/privilege/RSAUtil.java
  39. 77
      src/main/java/com/fr/test/gauthority.java
  40. 3
      src/test/main/java/com/fr/demo/ExportApiTest.java
  41. 3
      src/test/main/java/com/fr/demo/ModuleStartTest.java

4
build.xml

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

12
src/main/java/com/fr/data/ParamSAPDataTest.java

@ -1,7 +1,6 @@
package com.fr.data;
import com.fr.base.FRContext;
import com.fr.base.Parameter;
import com.fr.config.holder.impl.xml.XmlColConf;
import com.fr.function.ConnectSAPServer;
import com.fr.stable.ParameterProvider;
@ -11,6 +10,7 @@ import com.sap.conn.jco.JCoFunction;
import com.sap.conn.jco.JCoTable;
import java.util.ArrayList;
import java.util.Collection;
public class ParamSAPDataTest extends AbstractTableData {
private String[] columnNames = null;
@ -22,10 +22,12 @@ public class ParamSAPDataTest extends AbstractTableData {
private static JCoDestination jCoDestination;
public ParamSAPDataTest() {
ArrayList<ParameterProvider> arrayList = new ArrayList<>();
arrayList.add(new Parameter("LIFNR"));
arrayList.add(new Parameter("NAME1"));
this.parameters = new XmlColConf<>(arrayList, ParameterProvider.class);
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("LIFNR");
arrayList.add("NAME1");
this.parameters = new XmlColConf<Collection<ParameterProvider>>(arrayList, ParameterProvider.class);
this.columnNames = new String[this.columnNum];
this.columnNames[0] = "供应商编码";

25
src/main/java/com/fr/data/ParamTableDataDemo.java

@ -2,14 +2,11 @@ package com.fr.data;
import com.fr.base.FRContext;
import com.fr.file.DatasourceManager;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.ParameterProvider;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
@ -53,13 +50,11 @@ public class ParamTableDataDemo extends AbstractTableData {
*/
@Override
public int getColumnCount() {
init();
return columnNum;
}
@Override
public String getColumnName(int columnIndex) {
init();
return columnNames[columnIndex];
}
@ -95,11 +90,10 @@ public class ParamTableDataDemo extends AbstractTableData {
// 保存得到的结果集
valueList = new ArrayList();
// 下面开始建立数据库连接,按照刚才的SQL语句进行查询
// 根据连接名获取FR数据连接定义的数据连接,如果没有定义,也可以参考getConnection方法自己创建连接
com.fr.data.impl.Connection conn = DatasourceManager.getInstance().getConnection("FRDemo");
Connection con = null;
try {
con = conn.createConnection();
Connection con = conn.createConnection();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
// 获得记录的详细信息,然后获得总列数
@ -122,15 +116,7 @@ public class ParamTableDataDemo extends AbstractTableData {
// 打印一共取到的数据行数量
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
} finally {
if (con != null) {
try {
con.close();
} catch (SQLException e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
}
e.printStackTrace();
}
}
@ -145,13 +131,14 @@ public class ParamTableDataDemo extends AbstractTableData {
String url = "jdbc:sqlite:////Applications//FineReport10_325//webapps//webroot//help//FRDemo.db";
String username = "";
String password = "";
Connection con = null;
Connection con;
try {
Class.forName(driverName);
con = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
e.printStackTrace();
return null;
}
return con;
}

29
src/main/java/com/fr/data/SimpleArrayTableDataDemo.java

@ -1,29 +0,0 @@
package com.fr.data;
import java.util.ArrayList;
import java.util.List;
public class SimpleArrayTableDataDemo extends SimpleTableData {
/**
* 初始化列头
* @return
*/
@Override
public String[] initColumnNames() {
return new String[]{"Name", "Score"};
}
/**
* 加载行列数据
* @return
*/
@Override
public List<Object[]> loadData() {
ArrayList<Object[]> valueList = new ArrayList();
valueList.add(new Object[]{"Alex", 15});
valueList.add(new Object[]{"Helly", 22});
valueList.add(new Object[]{"Bobby", 99});
return valueList;
}
}

100
src/main/java/com/fr/data/SimpleParamTableDataDemo.java

@ -1,100 +0,0 @@
package com.fr.data;
import com.fr.file.ConnectionConfig;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.ParameterProvider;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
/**
* 带参数的程序数据集Demo 跟ParamTableDataDemo功能一样但实现更简单
*
* @author fanruan
*/
public class SimpleParamTableDataDemo extends SimpleTableData {
@Override
public String[] initColumnNames() {
String[] columnNames = new String[10];
for (int i = 0; i < 10; i++) {
columnNames[i] = "column#" + i;
}
return columnNames;
}
@Override
public List<Object[]> loadData() {
// 保存得到的数据库表名
String tableName = ((ParameterProvider) (parameters.get().toArray())[0]).getValue().toString();
// 构造SQL语句,并打印出来
String sql = "select * from " + tableName;
FineLoggerFactory.getLogger().info("Query SQL of ParamTableDataDemo: \n" + sql);
// 保存得到的结果集
ArrayList<Object[]> valueList = new ArrayList();
// 下面开始建立数据库连接,按照刚才的SQL语句进行查询
// 根据连接名获取FR数据连接定义的数据连接,如果没有定义,也可以参考getConnection方法自己创建连接
com.fr.data.impl.Connection conn = ConnectionConfig.getInstance().getConnection("FRDemo");
Connection con = null;
try {
con = conn.createConnection();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
// 获得记录的详细信息,然后获得总列数
ResultSetMetaData rsmd = rs.getMetaData();
int colNum = rsmd.getColumnCount();
// 用对象保存数据
Object[] objArray = null;
while (rs.next()) {
objArray = new Object[colNum];
for (int i = 0; i < colNum; i++) {
objArray[i] = rs.getObject(i + 1);
}
// 在valueList中加入这一行数据
valueList.add(objArray);
}
// 释放数据库资源
rs.close();
stmt.close();
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
} finally {
try {
if (con != null) {
con.close();
}
} catch (SQLException e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
}
return valueList;
}
/**
* 获取数据库连接 driverName和 url 可以换成您需要的
*
* @return Connection
*/
private Connection getConnection() {
String driverName = "org.sqlite.JDBC";
String url = "jdbc:sqlite:////Applications//FineReport10_325//webapps//webroot//help//FRDemo.db";
String username = "";
String password = "";
Connection con = null;
try {
Class.forName(driverName);
con = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
return con;
}
}

93
src/main/java/com/fr/data/WebServiceTableData.java

@ -1,87 +1,38 @@
package com.fr.data;
import com.fr.general.data.TableDataException;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.ParameterProvider;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import com.fr.data.AbstractTableData;
import com.fr.general.data.TableDataException;
import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.List;
/**
* WebService程序数据集
*
* @author Roger
* @since 11.0
* Created on 2024/1/8
*/
public class WebServiceTableData extends SimpleTableData {
private static final int COLUMN_COUNT = 10;
public class WebServiceTableData extends AbstractTableData{
private String[][] data;
/**
* 初始化列名数组
*
* @return {col1,col2,col3...}
* @throws TableDataException
*/
@Override
public String[] initColumnNames() {
String[] columnNames = new String[COLUMN_COUNT];
for (int i = 0; i < COLUMN_COUNT; i++) {
columnNames[i] = "column#" + i;
}
return columnNames;
public WebServiceTableData() {
this.data = this.createData();
}
/**
* 加载数据
*
* @return 行列数据
*/
@Override
public List<Object[]> loadData() {
String tableName = ((ParameterProvider) (parameters.get().toArray())[0]).getValue().toString();
FineLoggerFactory.getLogger().info("Query SQL of ParamTableDataDemo: {}", tableName);
// 保存得到的结果集
ArrayList<Object[]> valueList = new ArrayList();
try {
// 调用 Web 服务获取数据
String[][] data = createData();
//获取列数
public int getColumnCount() throws TableDataException {
return data[0].length;
}
// 如果数据为空,直接返回空列表
if (data == null || data.length == 0) {
return valueList;
}
//获取列的名称为数组中第一行的值
public String getColumnName(int columnIndex) throws TableDataException {
return data[0][columnIndex];
}
// 获得总列数
int colNum = data[0].length;
//获取行数为数据的长度-1
public int getRowCount() throws TableDataException {
return data.length - 1;
}
// 用对象保存数据
Object[] objArray = null;
for (int rowIndex = 1; rowIndex < data.length; rowIndex++) {
objArray = new Object[colNum];
for (int i = 0; i < colNum; i++) {
objArray[i] = data[rowIndex][i];
}
// 在valueList中加入这一行数据
valueList.add(objArray);
}
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
return valueList;
//获取值
public Object getValueAt(int rowIndex, int columnIndex) {
return data[rowIndex + 1][columnIndex];
}
/**
* 调用 Web 服务获取数据
*
* @return
*/
public String[][] createData() {
try {
String endpoint = "http://localhost:8080/axis/TestWS2TDClient.jws";

4
src/main/java/com/fr/data/XMLDemoTableData.java

@ -77,8 +77,6 @@ public class XMLDemoTableData extends AbstractParameterTableData {
try {
in = new BufferedInputStream(new FileInputStream(new File(filePath)));
XMLEventReader reader = inputFactory.createXMLEventReader(in);
deep=0;
flag=false;
readCol(reader,list);
in.close();
} catch (Exception e) {
@ -197,4 +195,4 @@ public class XMLDemoTableData extends AbstractParameterTableData {
e.printStackTrace();
}
}
}
}

72
src/main/java/com/fr/demo/NewReadFrmFromDatabase.java

@ -1,72 +0,0 @@
package com.fr.demo;
import com.fr.data.core.db.DBUtils;
import com.fr.form.main.Form;
import com.fr.log.FineLoggerFactory;
import com.fr.web.session.SessionLocalManager;
import com.fr.web.weblet.DBFormlet;
import javax.servlet.http.HttpServletRequest;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Map;
public class NewReadFrmFromDatabase extends DBFormlet {
@Override
public Form createForm(HttpServletRequest reportletRequest) {
String name = reportletRequest.getParameter("reportname");
return createForm(name);
}
@Override
public Form createForm(String reportName) {
Form form = new Form();
Connection connection = null;
try {
connection = getConnection();
// 从数据库中读模板
String sql = "select frm from report where frmname = '" + reportName
+ "'";
Statement smt = connection.createStatement();
ResultSet rs = smt.executeQuery(sql);
while (rs.next()) {
Blob blob = rs.getBlob(1);
FineLoggerFactory.getLogger().info(blob.toString());
InputStream ins = blob.getBinaryStream();
form.readStream(ins);
return form;
}
} catch (Exception e) {
throw SessionLocalManager.createLogPackedException(e);
}finally {
DBUtils.closeConnection(connection);
}
return form;
}
private static Connection getConnection() throws ClassNotFoundException, SQLException {
// 定义数据连接(根据你实际数据库信息进行修改)
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String pass = "123456";
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, pass);
return conn;
}
@Override
public void setParameterMap(Map<String, Object> arg0) {
// TODO Auto-generated method stub
}
}

4
src/main/java/com/fr/demo/ReadFromDatabase.java

@ -5,8 +5,6 @@ import com.fr.main.impl.WorkBook;
import com.fr.web.core.Reportlet;
import com.fr.web.request.ReportletRequest;
import com.fr.log.FineLoggerFactory;
import com.fr.web.session.SessionLocalManager;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
@ -42,7 +40,7 @@ public class ReadFromDatabase extends Reportlet {
workbook.readStream(ins);
}
} catch (Exception e) {
throw SessionLocalManager.createLogPackedException(e);
e.printStackTrace();
}
return workbook;
}

10
src/main/java/com/fr/demo/ReadfrmFromDatabase.java

@ -1,12 +1,10 @@
package com.fr.demo;
import com.fr.form.main.Form;
import com.fr.io.utils.ResourceIOUtils;
import com.fr.log.FineLoggerFactory;
import com.fr.web.session.SessionLocalManager;
import com.fr.web.weblet.Formlet;
import com.fr.form.main.Form;
import javax.servlet.http.HttpServletRequest;
import com.fr.log.FineLoggerFactory;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
@ -33,7 +31,7 @@ public class ReadfrmFromDatabase extends Formlet {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, pass);
// 从数据库中读模板
String sql = "select frm from report where frmname = '" + name
String sql = "select B from report where A = '" + name
+ "'";
Statement smt = conn.createStatement();
ResultSet rs = smt.executeQuery(sql);
@ -44,7 +42,7 @@ public class ReadfrmFromDatabase extends Formlet {
form.readStream(ins);
}
} catch (Exception e) {
throw SessionLocalManager.createLogPackedException(e);
e.printStackTrace();
}
System.out.println(ResourceIOUtils.getRealPath("assets"));
return form;

2
src/main/java/com/fr/demo/SaveReportToDatabase.java

@ -8,7 +8,6 @@ import com.fr.config.activator.ConfigurationActivator;
import com.fr.env.operator.CommonOperatorImpl;
import com.fr.general.I18nResource;
import com.fr.health.activator.ModuleHealActivator;
import com.fr.io.ResourceRepositoryActivator;
import com.fr.module.Module;
import com.fr.module.tool.ActivatorToolBox;
import com.fr.report.ReportActivator;
@ -36,7 +35,6 @@ public class SaveReportToDatabase {
// 定义报表运行环境,用于执行报表
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new ResourceRepositoryActivator(),
new StandaloneModeActivator(),
new ModuleHealActivator(),
new StateServiceActivator(),

34
src/main/java/com/fr/demo/SimpleReportletDemoFrm.java

@ -1,34 +0,0 @@
package com.fr.demo;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import com.fr.form.main.Form;
import com.fr.form.main.FormIO;
import com.fr.log.FineLoggerFactory;
import com.fr.web.weblet.Formlet;
public class SimpleReportletDemoFrm extends Formlet {
@Override
public void setParameterMap(Map arg0) {
// TODO Auto-generated method stub
}
@Override
protected Form createForm(HttpServletRequest request) throws Exception {
Form form = null;
//模板的相对路径
String tplPath = "//doc//frm//决策报表入门.frm";
this.setTplPath(tplPath);
try {
form = FormIO.readForm(tplPath);
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
return form;
}
}

BIN
src/main/java/com/fr/function/CellSum.class

Binary file not shown.

BIN
src/main/java/com/fr/function/DateDiff.class

Binary file not shown.

BIN
src/main/java/com/fr/function/FlagHtmlColor.class

Binary file not shown.

BIN
src/main/java/com/fr/function/IRR.class

Binary file not shown.

BIN
src/main/java/com/fr/function/ReportCheck.class

Binary file not shown.

16
src/main/java/com/fr/function/ReportCheck.java

@ -4,9 +4,12 @@ package com.fr.function;
import com.fr.base.ResultFormula;
import com.fr.base.operator.common.CommonOperator;
import com.fr.chart.activator.ChartBaseActivator;
import com.fr.cluster.engine.activator.standalone.StandaloneModeActivator;
import com.fr.config.activator.BaseDBActivator;
import com.fr.config.activator.ConfigurationActivator;
import com.fr.env.operator.CommonOperatorImpl;
import com.fr.general.I18nResource;
import com.fr.health.activator.ModuleHealActivator;
import com.fr.io.TemplateWorkBookIO;
import com.fr.json.JSONArray;
import com.fr.json.JSONObject;
@ -19,6 +22,8 @@ import com.fr.report.RestrictionActivator;
import com.fr.report.cell.CellElement;
import com.fr.report.module.ReportBaseActivator;
import com.fr.report.report.ResultReport;
import com.fr.report.write.WriteActivator;
import com.fr.scheduler.SchedulerActivator;
import com.fr.script.AbstractFunction;
import com.fr.stable.WriteActor;
import com.fr.store.StateServiceActivator;
@ -40,15 +45,22 @@ public class ReportCheck extends AbstractFunction {
// 定义报表运行环境,用于执行报表
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new StandaloneModeActivator(),
new ModuleHealActivator(),
new StateServiceActivator(),
new ChartBaseActivator(),
new SchedulerActivator(),
new ReportBaseActivator(),
new RestrictionActivator(),
new ReportActivator(),
new ChartBaseActivator());
new WriteActivator());
SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl());
String envpath= "//Applications//FineReport10_325//webapps//webroot//WEB-INF"; //工程路径
String envpath = "//Applications//FineReport10_325//webapps//webroot//WEB-INF";//工程路径
SimpleWork.checkIn(envpath);
I18nResource.getInstance();
module.start();
try {
ResultWorkBook rworkbook = null;
// 读取模板

BIN
src/main/java/com/fr/function/StringCat.class

Binary file not shown.

BIN
src/main/java/com/fr/function/StringImage.class

Binary file not shown.

45
src/main/java/com/fr/function/SubSection.java

@ -0,0 +1,45 @@
//SubSection函数-Oracle查询参数个数限制
package com.fr.function;
import com.fr.general.FArray;
import com.fr.script.AbstractFunction;
public class SubSection extends AbstractFunction {
public Object run(Object[] args) {
// 获取第一个对象,即取得传入的参数
Object para = args[0];
String parastr = para.toString();
// 由于是复选参数,因此要去掉前后的"("和")"
if (parastr.startsWith("(") && parastr.endsWith(")")) {
parastr = parastr.substring(1, parastr.length() - 1);
}
// 将字符串转为","分割的数组
String test[] = parastr.split(",");
int len = test.length;
int loopnum = len / 500;
if (len % 500 != 0) {
loopnum += 1;
}
;
// 返回的值是数组,需要定义成我们内部的类型FArray
FArray result = new FArray();
String str = "";
int k = 1;
for (int i = 0; i < loopnum; i++) {
for (int j = 500 * i; j < 500 * (i + 1) && j < len; j++) {
if (k != 500 && j != (len - 1)) {
str += test[j] + ",";
} else {
str += test[j];
}
k++;
}
// 每500个形成一组并在每组外部加上"("和")"
str = "(" + str + ")";
result.add(str);
str = "";
k = 1;
}
return result;
}
}

126
src/main/java/com/fr/function/TREENODEFINDER.java

@ -1,126 +0,0 @@
//
// 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;
}
}

BIN
src/main/java/com/fr/function/Ubm.class

Binary file not shown.

105
src/main/java/com/fr/function/Widget2Image.java

@ -0,0 +1,105 @@
// 导出打印单选按钮及复选框
package com.fr.function;
import com.fr.base.AbstractPainter;
import com.fr.base.BaseUtils;
import com.fr.base.GraphHelper;
import com.fr.base.Style;
import com.fr.general.FArray;
import com.fr.general.FRFont;
import com.fr.script.AbstractFunction;
import com.fr.stable.Primitive;
import com.fr.stable.StringUtils;
import java.awt.Color;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
public class Widget2Image extends AbstractFunction {
public Object run(Object[] args) {
if (args.length < 3)
return Primitive.NULL;
// 第一个参数:控件类型,不区分大小写
String type = args[0].toString().toLowerCase();
if (!("checkbox".equals(type) || "radiobutton".equals(type)))
return Primitive.ERROR_VALUE;
// 第二个参数:控件按钮个数
int num = Integer.parseInt(args[1].toString());
// 第三个参数:按钮组的值,哪些被选中
String selection = args[2].toString();
// 第四个参数:可选参数,按钮组对应的显示值数组
FArray textArray = new FArray();
if (args.length == 4 && args[3] instanceof FArray) {
textArray = (FArray) args[3];
}
return new WidgetPaint(type, num, selection, textArray);
}
public static class WidgetPaint extends AbstractPainter {
public static String CHECK_ON = "/com/fr/web/images/checkon.gif";
public static String CHECK_OFF = "/com/fr/web/images/checkoff.gif";
public static String RADIO_ON = "/com/fr/web/images/radioon.gif";
public static String RADIO_OFF = "/com/fr/web/images/radiooff.gif";
public static FRFont DEFUALT_FONT = FRFont.getInstance();
public static FontMetrics FontMetrics = GraphHelper
.getFontMetrics(DEFUALT_FONT);
private String type;
private int num;
private String selection;
private FArray textArray;
{
DEFUALT_FONT = DEFUALT_FONT.applyForeground(Color.BLACK);
}
public WidgetPaint(String type, int num, String selection,
FArray textArray) {
this.type = type;
this.num = num;
this.selection = selection;
this.textArray = textArray;
}
private String resolveText(int i) {
if (i < this.textArray.length()) {
return this.textArray.elementAt(i).toString();
}
return StringUtils.EMPTY;
}
public void paint(Graphics g, int width, int height, int resolution,
Style style) {
String OFF = CHECK_OFF;
String ON = CHECK_ON;
if ("radiobutton".equals(type)) {
OFF = RADIO_OFF;
ON = RADIO_ON;
}
Image[] checkOFFON = {BaseUtils.readImage(OFF),
BaseUtils.readImage(ON)};
int[] imgWidths = {checkOFFON[0].getWidth(null),
checkOFFON[1].getWidth(null)};
int[] imgHeights = {checkOFFON[0].getHeight(null),
checkOFFON[1].getHeight(null)};
Graphics2D g2d = (Graphics2D) g;
g2d.setFont(FRFont.getInstance());
g2d.setPaint(Color.BLACK);
int x = 2;
int y = (height - imgHeights[0]) / 2;
String select = selection;
for (int i = 0; i < num; i++) {
int bit = Integer.parseInt(select.substring(i, i + 1));
g2d.drawImage(checkOFFON[bit], x, y, imgWidths[bit],
imgHeights[bit], null);
x += imgWidths[bit] + 2;
String text = resolveText(i);
g2d.setBackground(Color.BLACK);
g2d.drawString(text, (float) x, (float) (y + FontMetrics
.getAscent()));
x += FontMetrics.stringWidth(text) + 2;
}
}
}
}

1
src/main/java/com/fr/io/CreateGenericTemplate.java

@ -37,7 +37,6 @@ public class CreateGenericTemplate {
// 定义报表运行环境,用于执行报表
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new ResourceRepositoryActivator(),
new StandaloneModeActivator(),
new ModuleHealActivator(),
new StateServiceActivator(),

1
src/main/java/com/fr/io/ExcelToCpt.java

@ -32,7 +32,6 @@ public class ExcelToCpt {
// 定义报表运行环境,用于执行报表
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new ResourceRepositoryActivator(),
new StandaloneModeActivator(),
new ModuleHealActivator(),
new StateServiceActivator(),

1
src/main/java/com/fr/io/ExcuteDemo.java

@ -33,7 +33,6 @@ public class ExcuteDemo {
// 定义报表运行环境,用于执行报表
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new ResourceRepositoryActivator(),
new StandaloneModeActivator(),
new ModuleHealActivator(),
new StateServiceActivator(),

98
src/main/java/com/fr/io/ExportApi.java

@ -7,63 +7,59 @@ import com.fr.config.activator.BaseDBActivator;
import com.fr.config.activator.ConfigurationActivator;
import com.fr.env.operator.CommonOperatorImpl;
import com.fr.general.I18nResource;
import com.fr.general.log.Log4jConfig;
import com.fr.general.log.parser.ExtraPatternParserManager;
import com.fr.health.activator.ModuleHealActivator;
import com.fr.io.exporter.CSVExporter;
import com.fr.io.exporter.EmbeddedTableDataExporter;
import com.fr.io.exporter.ExcelExporter;
import com.fr.io.exporter.ImageExporter;
import com.fr.io.exporter.PDFExporter;
import com.fr.io.exporter.SVGExporter;
import com.fr.io.exporter.TextExporter;
import com.fr.io.exporter.WordExporter;
import com.fr.io.TemplateWorkBookIO;
import com.fr.io.exporter.*;
import com.fr.io.exporter.excel.stream.StreamExcel2007Exporter;
import com.fr.main.impl.WorkBook;
import com.fr.module.ModuleRole;
import com.fr.module.tool.ActivatorToolBox;
import com.fr.report.ReportActivator;
import com.fr.report.RestrictionActivator;
import com.fr.report.module.ReportBaseActivator;
import com.fr.report.write.WriteActivator;
import com.fr.scheduler.SchedulerActivator;
import com.fr.stable.WriteActor;
import com.fr.stable.resource.ResourceLoader;
import com.fr.store.StateServiceActivator;
import com.fr.third.apache.log4j.Level;
import com.fr.third.apache.log4j.PropertyConfigurator;
import com.fr.workspace.simple.SimpleWork;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
public class ExportApi {
public static void main(String[] args) {
/**
* 以下这段if判断仅在main函数测试时使用
* 实际生产环境中一般使用web容器集成帆软后帆软服务会自动启动不再需要下面的if判断直接写导出的业务逻辑即可
* web集成注意事项
* 1集成环境需要依赖当前使用jdk对应版本的tools.jar一般从jdk中直接复制即可;
* 2帆软服务自动启动成功后使用的工作目录自动识别为集成应用下的WEB-INF目录所以需要把下面代码中envpath指向的工作目录拷贝到集成环境下web应用的WEB-INF目录
* 正式发布时需要拷贝生产环境的帆软WEB-INF如果有的话这样才能沿用原先帆软的配置及模板如果是集群环境会自动使用文件服务器的模板本地测试时envpath需要指向单机非集群的帆软工程
* 3可以访问集成环境的地址 ip:port/应用名/decision 如果能成功访问且不需要初始化配置则代表帆软服务启动成功
*/
if (!ModuleRole.Root.isPresent()) {
/**定义报表运行环境,用于执行报表*/
com.fr.module.Module module = ActivatorToolBox.simpleLink(
new BaseDBActivator(),
new ConfigurationActivator(),
new ResourceRepositoryActivator(),
new StandaloneModeActivator(),
new ModuleHealActivator(),
//2020.4.26jar包之前的版本,替换成StateServerActivator()
new StateServiceActivator(),
new ReportBaseActivator(),
new RestrictionActivator(),
new ReportActivator(),
new ChartBaseActivator());
SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl());
//定义工程路径
String envpath = "D:\\FineReport_11.0\\webapps\\webroot\\WEB-INF\\";
SimpleWork.checkIn(envpath);
I18nResource.getInstance();
module.start();
}
initLog4j();
/**定义报表运行环境,用于执行报表*/
com.fr.module.Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new StandaloneModeActivator(),
new ModuleHealActivator(),
//2020.4.26jar包之前的版本,替换成StateServerActivator()
new StateServiceActivator(),
new SchedulerActivator(),
new ReportBaseActivator(),
new RestrictionActivator(),
new ReportActivator(),
new WriteActivator(),
new ChartBaseActivator());
SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl());
//定义工程路径
String envpath = "D:\\javatools\\FineReport_10.0\\webapps\\webroot\\WEB-INF\\";
SimpleWork.checkIn(envpath);
I18nResource.getInstance();
module.start();
/**输出模板*/
try {
// 定义输出的模板路径,以reportlets为根目录
@ -88,7 +84,6 @@ public class ExportApi {
/**将结果工作薄导出为2003Excel文件*/
outputStream = new FileOutputStream(new java.io.File(outputUrl+"ExcelExport2003.xls"));
ExcelExporter ExcelExport = new ExcelExporter();
ExcelExport.setVersion(true);
ExcelExport.export(outputStream, workbook.execute(parameterMap, new WriteActor()));
/**将结果工作薄导出为2007Excel文件*/
@ -127,9 +122,32 @@ public class ExportApi {
ImageExport.export(outputStream, workbook.execute(parameterMap, new WriteActor()));
outputStream.close();
module.stop();
} catch (Exception e) {
e.printStackTrace();
} finally {
SimpleWork.checkOut();
}
}
private static void initLog4j() {
PropertyConfigurator.configure(loadLog4jPropertiesFromJar(Level.toLevel("INFO")));
}
private static Properties loadLog4jPropertiesFromJar(Level level) {
Properties properties = new Properties();
System.setProperty("LOG_HOME", System.getProperty("user.dir"));
System.setProperty("LOG_ROOT_LEVEL", level.toString());
ExtraPatternParserManager.setSystemProperty();
try {
properties.load(ResourceLoader.getResourceAsStream("/com/fr/general/log/log4j.properties", Log4jConfig.class));
} catch (IOException ignore) {
//do nothing
}
return properties;
}
}

57
src/main/java/com/fr/io/ExportApi_frm.java

@ -13,50 +13,38 @@ import com.fr.io.exporter.ImageExporter;
import com.fr.io.exporter.PDFExporter;
import com.fr.io.exporter.excel.stream.StreamExcel2007Exporter;
import com.fr.main.workbook.ResultWorkBook;
import com.fr.module.ModuleRole;
import com.fr.module.Module;
import com.fr.module.tool.ActivatorToolBox;
import com.fr.report.ReportActivator;
import com.fr.report.RestrictionActivator;
import com.fr.report.module.ReportBaseActivator;
import com.fr.report.write.WriteActivator;
import com.fr.scheduler.SchedulerActivator;
import com.fr.store.StateServiceActivator;
import com.fr.workspace.simple.SimpleWork;
import java.io.File;
import java.io.FileOutputStream;
public class ExportApi_frm {
public class ExportApi_frm {
public static void main(String[] args) {
/**
* 以下这段if判断仅在main函数测试时使用
* 实际生产环境中一般使用web容器集成帆软后帆软服务会自动启动不再需要下面的if判断直接写导出的业务逻辑即可
* web集成注意事项
* 1集成环境需要依赖当前使用jdk对应版本的tools.jar一般从jdk中直接复制即可;
* 2帆软服务自动启动成功后使用的工作目录自动识别为集成应用下的WEB-INF目录所以需要把下面代码中envpath指向的工作目录拷贝到集成环境下web应用的WEB-INF目录
* 正式发布时需要拷贝生产环境的帆软WEB-INF如果有的话这样才能沿用原先帆软的配置及模板如果是集群环境会自动使用文件服务器的模板本地测试时envpath需要指向单机非集群的帆软工程
* 3可以访问集成环境的地址 ip:port/应用名/decision 如果能成功访问且不需要初始化配置则代表帆软服务启动成功
*/
if (!ModuleRole.Root.isPresent()) {
/**定义报表运行环境,用于执行报表*/
com.fr.module.Module module = ActivatorToolBox.simpleLink(
new BaseDBActivator(),
new ConfigurationActivator(),
new ResourceRepositoryActivator(),
new StandaloneModeActivator(),
new ModuleHealActivator(),
//2020.4.26jar包之前的版本,替换成StateServerActivator()
new StateServiceActivator(),
new ReportBaseActivator(),
new RestrictionActivator(),
new ReportActivator(),
new ChartBaseActivator());
SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl());
//定义工程路径
String envpath = "D:\\FineReport_11.0\\webapps\\webroot\\WEB-INF\\";
SimpleWork.checkIn(envpath);
I18nResource.getInstance();
module.start();
}
// 定义报表运行环境,用于执行报表
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new StandaloneModeActivator(),
new ModuleHealActivator(),
new StateServiceActivator(),
new SchedulerActivator(),
new ReportBaseActivator(),
new RestrictionActivator(),
new ReportActivator(),
new WriteActivator(),
new ChartBaseActivator());
SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl());
String envpath = "C:\\Users\\hipsh\\Desktop\\apache-tomcat-8.5.38-10.0\\webapps\\webroot\\WEB-INF\\";//工程路径
SimpleWork.checkIn(envpath);
I18nResource.getInstance();
module.start();
try {
java.util.Map parameterMap = new java.util.HashMap();
@ -77,8 +65,11 @@ public class ExportApi_frm {
ImageExporter ImageExport = new ImageExporter();
ImageExport.export(outputStream, re);
outputStream.close();
module.stop();
} catch (Exception e) {
e.printStackTrace();
} finally {
SimpleWork.checkOut();
}
}
}

1
src/main/java/com/fr/io/ExportBatch.java

@ -38,7 +38,6 @@ public class ExportBatch {
// 定义报表运行环境,用于执行报表
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new ResourceRepositoryActivator(),
new StandaloneModeActivator(),
new ModuleHealActivator(),
new StateServiceActivator(),

1
src/main/java/com/fr/io/ExportExcel.java

@ -40,7 +40,6 @@ public class ExportExcel {
// 定义报表运行环境,用于执行报表
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new ResourceRepositoryActivator(),
new StandaloneModeActivator(),
new ModuleHealActivator(),
new StateServiceActivator(),

1
src/main/java/com/fr/io/ExportReports.java

@ -35,7 +35,6 @@ public class ExportReports {
// 定义报表运行环境,用于执行报表
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new ResourceRepositoryActivator(),
new StandaloneModeActivator(),
new ModuleHealActivator(),
new StateServiceActivator(),

1
src/main/java/com/fr/io/JavaPrint.java

@ -29,7 +29,6 @@ public class JavaPrint {
// 定义报表运行环境,用于执行报表
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new ResourceRepositoryActivator(),
new StandaloneModeActivator(),
new ModuleHealActivator(),
new StateServiceActivator(),

77
src/main/java/com/fr/io/SaveReportToDatabase.java

@ -0,0 +1,77 @@
package com.fr.io;
import com.fr.base.operator.common.CommonOperator;
import com.fr.chart.activator.ChartBaseActivator;
import com.fr.cluster.engine.activator.standalone.StandaloneModeActivator;
import com.fr.config.activator.BaseDBActivator;
import com.fr.config.activator.ConfigurationActivator;
import com.fr.env.operator.CommonOperatorImpl;
import com.fr.general.I18nResource;
import com.fr.health.activator.ModuleHealActivator;
import com.fr.module.Module;
import com.fr.module.tool.ActivatorToolBox;
import com.fr.report.ReportActivator;
import com.fr.report.RestrictionActivator;
import com.fr.report.module.ReportBaseActivator;
import com.fr.report.write.WriteActivator;
import com.fr.scheduler.SchedulerActivator;
import com.fr.store.StateServiceActivator;
import com.fr.workspace.simple.SimpleWork;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class SaveReportToDatabase {
public static void main(String[] args) {
SaveReport();
}
private static void SaveReport() {
try {
// 连接数据库
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://review.finedevelop.com:3306/susie";
String user = "root";
String pass = "ilovejava";
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, pass);
PreparedStatement presmt = conn
.prepareStatement("insert into report values(?,?)");
// 读进需要保存入库的模板文件
// 首先需要定义执行所在的环境,这样才能正确读取数据库信息
// 定义报表运行环境,用于执行报表
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new StandaloneModeActivator(),
new ModuleHealActivator(),
new StateServiceActivator(),
new ChartBaseActivator(),
new SchedulerActivator(),
new ReportBaseActivator(),
new RestrictionActivator(),
new ReportActivator(),
new WriteActivator());
SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl());
String envpath = "//Applications//FineReport10_325//webapps//webroot//WEB-INF";//工程路径
SimpleWork.checkIn(envpath);
I18nResource.getInstance();
module.start();
File cptfile = new File("//doc//Primary//Parameter//Parameter.cpt");
int lens = (int) cptfile.length();
InputStream ins = new FileInputStream(cptfile);
// 将模板保存入库
presmt.setString(1, "Parameter.cpt"); // 第一个字段存放模板相对路径
presmt.setBinaryStream(2, ins, lens); // 第二个字段存放模板文件的二进制流
presmt.execute();
conn.commit();
presmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

1
src/main/java/com/fr/io/SetParameterWindow.java

@ -33,7 +33,6 @@ public class SetParameterWindow {
// 定义报表运行环境,用于执行报表
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new ResourceRepositoryActivator(),
new StandaloneModeActivator(),
new ModuleHealActivator(),
new StateServiceActivator(),

1
src/main/java/com/fr/io/SimpleDemo.java

@ -33,7 +33,6 @@ public class SimpleDemo {
// 定义报表运行环境,用于执行报表
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new ResourceRepositoryActivator(),
new StandaloneModeActivator(),
new ModuleHealActivator(),
new StateServiceActivator(),

2
src/main/java/com/fr/output/OutputExcel.java

@ -9,9 +9,9 @@ import com.fr.stable.ArrayUtils;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Map;

15
src/main/java/com/fr/privilege/RSAUtil.java

@ -1,8 +1,5 @@
package com.fr.privilege;
import com.fr.third.org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@ -22,6 +19,8 @@ import java.security.spec.InvalidKeySpecException;
import java.security.spec.RSAPrivateKeySpec;
import java.security.spec.RSAPublicKeySpec;
import javax.crypto.Cipher;
/**
* RSA 工具类提供加密解密生成密钥对等方法
* 需要到http://www.bouncycastle.org下载bcprov-jdk14-123.jar。
@ -37,7 +36,7 @@ public class RSAUtil {
public static KeyPair generateKeyPair() throws Exception {
try {
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA",
new BouncyCastleProvider());
new org.bouncycastle.jce.provider.BouncyCastleProvider());
final int KEY_SIZE = 1024;// 没什么好说的了,这个值关系到块加密的大小,可以更改,但是不要太大,否则效率会低
keyPairGen.initialize(KEY_SIZE, new SecureRandom());
KeyPair keyPair = keyPairGen.generateKeyPair();
@ -80,7 +79,7 @@ public class RSAUtil {
KeyFactory keyFac = null;
try {
keyFac = KeyFactory.getInstance("RSA",
new BouncyCastleProvider());
new org.bouncycastle.jce.provider.BouncyCastleProvider());
} catch (NoSuchAlgorithmException ex) {
throw new Exception(ex.getMessage());
}
@ -107,7 +106,7 @@ public class RSAUtil {
KeyFactory keyFac = null;
try {
keyFac = KeyFactory.getInstance("RSA",
new BouncyCastleProvider());
new org.bouncycastle.jce.provider.BouncyCastleProvider());
} catch (NoSuchAlgorithmException ex) {
throw new Exception(ex.getMessage());
}
@ -134,7 +133,7 @@ public class RSAUtil {
public static byte[] encrypt(PublicKey pk, byte[] data) throws Exception {
try {
Cipher cipher = Cipher.getInstance("RSA",
new BouncyCastleProvider());
new org.bouncycastle.jce.provider.BouncyCastleProvider());
cipher.init(Cipher.ENCRYPT_MODE, pk);
int blockSize = cipher.getBlockSize();// 获得加密块大小,如:加密前数据为128个byte,而key_size=1024
// 加密块大小为127
@ -178,7 +177,7 @@ public class RSAUtil {
public static byte[] decrypt(PrivateKey pk, byte[] raw) throws Exception {
try {
Cipher cipher = Cipher.getInstance("RSA",
new BouncyCastleProvider());
new org.bouncycastle.jce.provider.BouncyCastleProvider());
cipher.init(cipher.DECRYPT_MODE, pk);
int blockSize = cipher.getBlockSize();
ByteArrayOutputStream bout = new ByteArrayOutputStream(64);

77
src/main/java/com/fr/test/gauthority.java

@ -0,0 +1,77 @@
package com.fr.test;
import com.fr.base.FRContext;
import com.fr.base.Formula;
import com.fr.general.FArray;
import com.fr.json.JSONObject;
import com.fr.script.AbstractFunction;
import com.fr.script.Calculator;
import com.fr.stable.Primitive;
public class gauthority extends AbstractFunction {
public gauthority() {
}
public Object run(Object[] args) {
int[] newArgs = new int[args.length];
for (int i = 0; i < args.length; ++i) {
if (!(args[i] instanceof Integer) || (Integer) args[i] <= 0) {
return Primitive.ERROR_NAME;
}
newArgs[i] = (Integer) args[i];
}
FArray res = new FArray();
Calculator ca = this.getCalculator();
Formula f = new Formula("$fr_userposition");
try {
Object dp = ca.eval(f);
if (dp instanceof FArray) {
FArray fa = (FArray) dp;
for (int i = 0; i < fa.length(); ++i) {
JSONObject jo = (JSONObject) fa.elementAt(i);
String dName = jo.getString("jobTitle");
if (newArgs.length == 0) {
res.add(dName);
} else {
String[] dNames = dName.split(",");
res.add(this.buildRes(dNames, newArgs));
}
}
}
} catch (Exception var12) {
FRContext.getLogger().error(var12.getMessage(), var12);
}
return res;
}
private String buildRes(String[] dNames, int[] args) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < args.length; ++i) {
int index = args[i];
if (dNames.length >= index) {
sb.append(dNames[index - 1]).append(",");
}
}
return sb.substring(0, sb.length() > 0 ? sb.length() - 1 : 0);
}
public Type getType() {
return OTHER;
}
public String getCN() {
return "GETUSERDEPARTMENTS():返回角色部门\n示例:\nGETUSERDEPARTMENTS():返回角色所有部门,若多个部门则数组\nGETUSERDEPARTMENTS(3,2):返回角色该部门的第三层和第二层名字,\n若多个部门则返回数组,若没有第三层则只显示第二层";
}
public String getEN() {
return "";
}
}

3
src/test/main/java/com/fr/demo/ExportApiTest.java

@ -7,8 +7,6 @@ import com.fr.config.activator.BaseDBActivator;
import com.fr.config.activator.ConfigurationActivator;
import com.fr.env.operator.CommonOperatorImpl;
import com.fr.general.I18nResource;
import com.fr.health.activator.ModuleHealActivator;
import com.fr.io.ResourceRepositoryActivator;
import com.fr.io.TemplateWorkBookIO;
import com.fr.io.exporter.excel.stream.StreamExcel2007Exporter;
import com.fr.log.FineLoggerFactory;
@ -44,7 +42,6 @@ public class ExportApiTest extends TestCase {
public void testExport() {
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new ResourceRepositoryActivator(),
new StandaloneModeActivator(),
new ModuleHealActivator(),
new StateServiceActivator(),

3
src/test/main/java/com/fr/demo/ModuleStartTest.java

@ -8,8 +8,6 @@ import com.fr.config.activator.ConfigurationActivator;
import com.fr.env.operator.CommonOperatorImpl;
import com.fr.general.FRLogger;
import com.fr.general.I18nResource;
import com.fr.health.activator.ModuleHealActivator;
import com.fr.io.ResourceRepositoryActivator;
import com.fr.io.TemplateWorkBookIO;
import com.fr.log.FineLoggerFactory;
import com.fr.log.LogHandler;
@ -66,7 +64,6 @@ public class ModuleStartTest extends TestCase {
private Module initModule() {
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new ResourceRepositoryActivator(),
new StandaloneModeActivator(),
new ModuleHealActivator(),
new StateServiceActivator(),

Loading…
Cancel
Save