forked from demo/example
Compare commits
138 Commits
persist/9.
...
release/10
Author | SHA1 | Date |
---|---|---|
roger | e159509541 | 10 months ago |
Bruce.Deng-邓铖臻 | 737e4c42e5 | 1 year ago |
Bruce.Deng | 0614d33511 | 1 year ago |
Bruce.Deng | 504fd59217 | 1 year ago |
Bruce.Deng | d7737090ec | 1 year ago |
Bruce.Deng-邓铖臻 | 65312af3b2 | 2 years ago |
Bruce.Deng | 3f7ff140f8 | 2 years ago |
Rosie.Xu | f3f9a70b12 | 3 years ago |
Rosie.Xu | fb54bae1b0 | 3 years ago |
zack | 347a9332b8 | 3 years ago |
zack | 59aa0ad8be | 3 years ago |
zack | cddbf30e23 | 3 years ago |
zack | 2d925ee7af | 3 years ago |
zack | 60609d03e9 | 3 years ago |
zack | e79e8f895e | 3 years ago |
zack | 8cb1a2e82e | 3 years ago |
zack | bf88811291 | 3 years ago |
zack | b2d209136a | 3 years ago |
zack | 5ea33e5068 | 3 years ago |
ju|剧浩宇 | 00aa706b1f | 3 years ago |
zack | 3478bd0ac6 | 3 years ago |
zack | d51e4171ed | 4 years ago |
zack | cbdac5146e | 4 years ago |
pengda | f1600566e0 | 4 years ago |
pengda | 283f40f697 | 4 years ago |
zack | ff97ecf5fd | 4 years ago |
zack | 3f6541199b | 4 years ago |
zack | 0cf74b4e96 | 4 years ago |
zack | 471a43570c | 4 years ago |
zack | bc90de3c16 | 4 years ago |
zack | 128cd31f3c | 4 years ago |
zack | 8ec9a4a4ee | 4 years ago |
zack | cf6488f8cf | 4 years ago |
Rosie.Xu | edec0b6917 | 4 years ago |
Rosie | 1ab42424ac | 4 years ago |
zack | fdab845093 | 4 years ago |
zack | bff933481e | 4 years ago |
ju|剧浩宇 | 23ff4263ea | 4 years ago |
Rosie | cb4e9b9a7e | 4 years ago |
Rosie | 4d23fc467a | 4 years ago |
Roxy | 7266b28e75 | 4 years ago |
Roxy | 08ec05022c | 4 years ago |
zack | ebdca952ab | 4 years ago |
zack | ae0260ea55 | 4 years ago |
Bruce.Deng | 4c83348f58 | 4 years ago |
Bruce.Deng | ff72249144 | 4 years ago |
susie | 30b311bc87 | 4 years ago |
Rosie | a6372ce1d7 | 4 years ago |
Bruce.Deng | ef6abc7d72 | 4 years ago |
Bruce.Deng | 10bcae59cb | 4 years ago |
Bruce.Deng | 872fdb18a9 | 4 years ago |
Bruce.Deng | ec33b8c9b6 | 4 years ago |
Bruce.Deng | 19c77eb3ca | 4 years ago |
Bruce.Deng | 7453e18699 | 4 years ago |
Bruce.Deng | 35d5088d7b | 4 years ago |
Bruce.Deng | 81ff64e704 | 4 years ago |
Bruce.Deng | dbfa72c8c6 | 4 years ago |
susie | fb782a47e3 | 4 years ago |
Cloud.Liu | f060679c86 | 4 years ago |
Cloud.Liu | 28dbfb3466 | 5 years ago |
Cloud.Liu | 857af4e194 | 5 years ago |
susie | b6a7536cb0 | 5 years ago |
Harrison | 7210221021 | 5 years ago |
zack | 724bb47e92 | 5 years ago |
zack | 79b18ff09e | 5 years ago |
Cloud.Liu | 394c0dd1b9 | 5 years ago |
Cloud.Liu | 0fee1eaab2 | 5 years ago |
zack | 4312da4d33 | 5 years ago |
zack | 2bf2dd090c | 5 years ago |
Leo.Tsai | c027a144ad | 5 years ago |
Leo.Cai | 397bfa1d66 | 5 years ago |
Leo.Cai | 745b53362c | 5 years ago |
Leo.Tsai | 911c0c8041 | 5 years ago |
Leo.Cai | fb25c44e62 | 5 years ago |
Leo.Cai | ade1863442 | 5 years ago |
Leo.Cai | fdaf3bb08e | 5 years ago |
zack | 3df1638ac1 | 5 years ago |
zack | fd21d7c3bb | 5 years ago |
zack | 2e7bc0820e | 5 years ago |
zack | a57cdb8e44 | 5 years ago |
zack | 76811bfa84 | 5 years ago |
zack | 0277ceb6f1 | 5 years ago |
zack | c2a96733e3 | 5 years ago |
richie | 23f67b82bd | 6 years ago |
richie | 79772de12b | 6 years ago |
zack | 99a1e18f71 | 6 years ago |
zack | 4cef0ea288 | 6 years ago |
zack | 1505058f42 | 6 years ago |
zack | e5ffbcb32b | 6 years ago |
zack | 981fb9a86e | 6 years ago |
zack | 64bb5c2570 | 6 years ago |
zack | 4ccc1aa068 | 6 years ago |
zack | ebabb7f783 | 6 years ago |
zack | eca6f1bc68 | 6 years ago |
richie | 83494a8876 | 6 years ago |
richie | b1e79777c9 | 6 years ago |
richie | 824336db27 | 6 years ago |
richie | 5c8494b98f | 6 years ago |
richie | 69edb7daf5 | 6 years ago |
richie | 7ea154f0f7 | 6 years ago |
richie | 1fd1ece237 | 6 years ago |
richie | 0db3415469 | 6 years ago |
richie | b18c413633 | 6 years ago |
richie | 583434ab01 | 6 years ago |
richie | ecafaacb3d | 6 years ago |
richie | 5a01f0c5c2 | 6 years ago |
richie | 08b86af993 | 6 years ago |
richie | a08f37a35d | 6 years ago |
richie | 55ce7b22af | 6 years ago |
richie | d373cde1d2 | 6 years ago |
richie | 1f11299d04 | 6 years ago |
richie | 65715f0a47 | 6 years ago |
richie | 8b53267f50 | 6 years ago |
richie | 5f9d9e440b | 6 years ago |
richie | d2b98dc286 | 6 years ago |
richie | 13ff659951 | 6 years ago |
richie | 873aaa3553 | 6 years ago |
richie | 1f17678f58 | 6 years ago |
richie | 6fff5a3474 | 6 years ago |
richie | 357e421ba3 | 6 years ago |
richie | a3cf8f0275 | 6 years ago |
richie | c9c9288422 | 6 years ago |
yaoh.wu | 363ca91c46 | 6 years ago |
yaoh.wu | 09633c645c | 6 years ago |
yaoh.wu | 7478ed077a | 6 years ago |
yaoh.wu | 9c50c8a6f9 | 6 years ago |
richie | e21d1c254b | 6 years ago |
richie | c7b3eb9b03 | 6 years ago |
richie | 763032df10 | 6 years ago |
richie | 522200e773 | 6 years ago |
richie | d626676bb7 | 6 years ago |
richie | 736ae24ad4 | 6 years ago |
richie | be7702e112 | 6 years ago |
richie | 13016ed41b | 6 years ago |
richie | abc5a0c09d | 6 years ago |
richie | ea5ba3f181 | 6 years ago |
yaoh.wu | b40abd1c9f | 6 years ago |
yaoh.wu | 0251597f7b | 6 years ago |
254 changed files with 9185 additions and 1516 deletions
@ -0,0 +1,7 @@ |
|||||||
|
*.iml |
||||||
|
.idea/ |
||||||
|
/target/ |
||||||
|
/download/ |
||||||
|
/webroot/ |
||||||
|
.DS_Store |
||||||
|
lib/report/*.jar |
@ -1,3 +1,26 @@ |
|||||||
# 文档demo代码插件 |
# 工程配置指南 |
||||||
|
|
||||||
## 只是为了验证文档demo代码是否能够编译,插件本身无任何作用。 |
## 安装maven |
||||||
|
用于构建开发工程,文档参考:http://wiki.jikexueyuan.com/project/maven/environment-setup.html |
||||||
|
|
||||||
|
## 安装ant |
||||||
|
用于构建插件安装包,文档参考:http://wiki.jikexueyuan.com/project/ant/environment-setup.html |
||||||
|
|
||||||
|
## 配置开发工程 |
||||||
|
直接使用IntelliJ IDEA打开这个目录即可。 |
||||||
|
|
||||||
|
如果需要复制jar包到webroot/WEB-INF/lib下,可以执行命令:```mvn install``` |
||||||
|
|
||||||
|
## 启动设计器 |
||||||
|
如果希望正常的进行插件开发,使用```com.fr.learn.Leaner```启动设计器。 |
||||||
|
|
||||||
|
如果希望进行设计器调试,则使用```com.fr.learn.Leaner4Debug```启动设计器。 |
||||||
|
|
||||||
|
## 修改依赖的jar版本 |
||||||
|
只需要更改pom.xml中的common-version属性即可。 |
||||||
|
|
||||||
|
|common-version|含义| |
||||||
|
|--------------|----| |
||||||
|
|10.0-RELEASE-SNAPSHOT|10.0的测试版本快照| |
||||||
|
|10.0-SNAPSHOT|10.0的正式版本快照| |
||||||
|
|10.0|10.0的正式版本| |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,212 @@ |
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||||
|
<modelVersion>4.0.0</modelVersion> |
||||||
|
<groupId>com.fr.plugin</groupId> |
||||||
|
<artifactId>starter</artifactId> |
||||||
|
<version>10.0</version> |
||||||
|
<packaging>pom</packaging> |
||||||
|
<properties> |
||||||
|
<common-version>10.0-RELEASE-SNAPSHOT</common-version> |
||||||
|
<web-inf-bucket>${project.basedir}/webroot/WEB-INF</web-inf-bucket> |
||||||
|
</properties> |
||||||
|
<dependencies> |
||||||
|
<!-- core包 --> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.third</groupId> |
||||||
|
<artifactId>fine-third</artifactId> |
||||||
|
<version>${common-version}</version> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.activator</groupId> |
||||||
|
<artifactId>fine-activator</artifactId> |
||||||
|
<version>${common-version}</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.core</groupId> |
||||||
|
<artifactId>fine-core</artifactId> |
||||||
|
<version>${common-version}</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.webui</groupId> |
||||||
|
<artifactId>fine-webui</artifactId> |
||||||
|
<version>${common-version}</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
<!-- 数据源包 --> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.datasource</groupId> |
||||||
|
<artifactId>fine-datasource</artifactId> |
||||||
|
<version>${common-version}</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
<!-- 决策平台包 --> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.decision</groupId> |
||||||
|
<artifactId>fine-decision</artifactId> |
||||||
|
<version>${common-version}</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.decision</groupId> |
||||||
|
<artifactId>fine-decision-report</artifactId> |
||||||
|
<version>${common-version}</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
<!-- 定时调度包 --> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.schedule</groupId> |
||||||
|
<artifactId>fine-schedule</artifactId> |
||||||
|
<version>${common-version}</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.schedule</groupId> |
||||||
|
<artifactId>fine-schedule-report</artifactId> |
||||||
|
<version>${common-version}</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<!-- 智能日志包 --> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.intelligence</groupId> |
||||||
|
<artifactId>fine-swift</artifactId> |
||||||
|
<version>${common-version}</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.intelligence</groupId> |
||||||
|
<artifactId>fine-accumulator</artifactId> |
||||||
|
<version>${common-version}</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
<!-- 报表引擎包 --> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.report</groupId> |
||||||
|
<artifactId>fine-report-engine</artifactId> |
||||||
|
<version>${common-version}</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
<!-- 设计器包 --> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.report</groupId> |
||||||
|
<artifactId>fine-report-designer</artifactId> |
||||||
|
<version>${common-version}</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<!-- 远程设计用包 --> |
||||||
|
<dependency> |
||||||
|
<groupId>io.socket</groupId> |
||||||
|
<artifactId>socket.io-client</artifactId> |
||||||
|
<version>0.7.0</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<!-- AOP用包 --> |
||||||
|
<dependency> |
||||||
|
<groupId>org.aspectj</groupId> |
||||||
|
<artifactId>aspectjrt</artifactId> |
||||||
|
<version>1.6.9</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<!-- 设计器调试用包 --> |
||||||
|
<dependency> |
||||||
|
<groupId>org.swingexplorer</groupId> |
||||||
|
<artifactId>swexpl</artifactId> |
||||||
|
<version>2.0</version> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>org.swingexplorer</groupId> |
||||||
|
<artifactId>swag</artifactId> |
||||||
|
<version>1.0</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<!-- tomcat包 --> |
||||||
|
<dependency> |
||||||
|
<groupId>org.apache.tomcat</groupId> |
||||||
|
<artifactId>tomcat-catalina</artifactId> |
||||||
|
<version>8.5.32</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<!-- mysql驱动 --> |
||||||
|
<dependency> |
||||||
|
<groupId>mysql</groupId> |
||||||
|
<artifactId>mysql-connector-java</artifactId> |
||||||
|
<version>5.1.44</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>junit</groupId> |
||||||
|
<artifactId>junit</artifactId> |
||||||
|
<version>4.12</version> |
||||||
|
<scope>test</scope> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>org.easymock</groupId> |
||||||
|
<artifactId>easymock</artifactId> |
||||||
|
<version>3.5.1</version> |
||||||
|
<scope>test</scope> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
</dependencies> |
||||||
|
<build> |
||||||
|
<outputDirectory>${web-inf-bucket}/classes</outputDirectory> |
||||||
|
<plugins> |
||||||
|
<plugin> |
||||||
|
<artifactId>maven-compiler-plugin</artifactId> |
||||||
|
<version>3.1</version> |
||||||
|
<configuration> |
||||||
|
<source>1.6</source> |
||||||
|
<target>1.6</target> |
||||||
|
<!--不生成target/generated-sources/annotations--> |
||||||
|
<proc>none</proc> |
||||||
|
</configuration> |
||||||
|
</plugin> |
||||||
|
<plugin> |
||||||
|
<groupId>org.apache.maven.plugins</groupId> |
||||||
|
<artifactId>maven-dependency-plugin</artifactId> |
||||||
|
<executions> |
||||||
|
<execution> |
||||||
|
<id>copy</id> |
||||||
|
<phase>package</phase> |
||||||
|
<goals> |
||||||
|
<goal>copy-dependencies</goal> |
||||||
|
</goals> |
||||||
|
<configuration> |
||||||
|
<outputDirectory> |
||||||
|
${project.basedir}/webroot/WEB-INF/lib |
||||||
|
</outputDirectory> |
||||||
|
</configuration> |
||||||
|
</execution> |
||||||
|
</executions> |
||||||
|
</plugin> |
||||||
|
</plugins> |
||||||
|
</build> |
||||||
|
<repositories> |
||||||
|
<repository> |
||||||
|
<id>fanruan</id> |
||||||
|
<name>fanruan</name> |
||||||
|
<url>http://mvn.finedevelop.com/repository/maven-public/</url> |
||||||
|
<snapshots> |
||||||
|
<enabled>true</enabled> |
||||||
|
<updatePolicy>always</updatePolicy> |
||||||
|
<checksumPolicy>warn</checksumPolicy> |
||||||
|
</snapshots> |
||||||
|
</repository> |
||||||
|
</repositories> |
||||||
|
<pluginRepositories> |
||||||
|
<pluginRepository> |
||||||
|
<id>fanruan</id> |
||||||
|
<name>fanruan</name> |
||||||
|
<url>http://mvn.finedevelop.com/repository/maven-public/</url> |
||||||
|
<snapshots> |
||||||
|
<enabled>true</enabled> |
||||||
|
<updatePolicy>always</updatePolicy> |
||||||
|
<checksumPolicy>warn</checksumPolicy> |
||||||
|
</snapshots> |
||||||
|
</pluginRepository> |
||||||
|
</pluginRepositories> |
||||||
|
</project> |
@ -0,0 +1,26 @@ |
|||||||
|
# 工程配置指南 |
||||||
|
|
||||||
|
## 安装maven |
||||||
|
用于构建开发工程,文档参考:http://wiki.jikexueyuan.com/project/maven/environment-setup.html |
||||||
|
|
||||||
|
## 安装ant |
||||||
|
用于构建插件安装包,文档参考:http://wiki.jikexueyuan.com/project/ant/environment-setup.html |
||||||
|
|
||||||
|
## 配置开发工程 |
||||||
|
直接使用IntelliJ IDEA打开这个目录即可。 |
||||||
|
|
||||||
|
如果需要复制jar包到webroot/WEB-INF/lib下,可以执行命令:```mvn install``` |
||||||
|
|
||||||
|
## 启动设计器 |
||||||
|
如果希望正常的进行插件开发,使用```com.fr.learn.Leaner```启动设计器。 |
||||||
|
|
||||||
|
如果希望进行设计器调试,则使用```com.fr.learn.Leaner4Debug```启动设计器。 |
||||||
|
|
||||||
|
## 修改依赖的jar版本 |
||||||
|
只需要更改pom.xml中的common-version属性即可。 |
||||||
|
|
||||||
|
|common-version|含义| |
||||||
|
|--------------|----| |
||||||
|
|10.0-RELEASE-SNAPSHOT|10.0的测试版本快照| |
||||||
|
|10.0-SNAPSHOT|10.0的正式版本快照| |
||||||
|
|10.0|10.0的正式版本| |
@ -1,58 +0,0 @@ |
|||||||
package com.fr.data; |
|
||||||
|
|
||||||
import com.fr.general.data.TableDataException; |
|
||||||
import org.apache.axis.client.Call; |
|
||||||
import org.apache.axis.client.Service; |
|
||||||
|
|
||||||
import javax.xml.namespace.QName; |
|
||||||
|
|
||||||
public class WebServiceTableData extends AbstractTableData { |
|
||||||
private String[][] data; |
|
||||||
|
|
||||||
public WebServiceTableData() { |
|
||||||
this.data = this.getData(); |
|
||||||
} |
|
||||||
|
|
||||||
//获取列数
|
|
||||||
|
|
||||||
@Override |
|
||||||
public int getColumnCount() throws TableDataException { |
|
||||||
return data[0].length; |
|
||||||
} |
|
||||||
|
|
||||||
//获取列的名称为数组中第一行的值
|
|
||||||
|
|
||||||
@Override |
|
||||||
public String getColumnName(int columnIndex) throws TableDataException { |
|
||||||
return data[0][columnIndex]; |
|
||||||
} |
|
||||||
|
|
||||||
//获取行数为数据的长度-1
|
|
||||||
|
|
||||||
@Override |
|
||||||
public int getRowCount() throws TableDataException { |
|
||||||
return data.length - 1; |
|
||||||
} |
|
||||||
|
|
||||||
//获取值
|
|
||||||
|
|
||||||
@Override |
|
||||||
public Object getValueAt(int rowIndex, int columnIndex) { |
|
||||||
return data[rowIndex + 1][columnIndex]; |
|
||||||
} |
|
||||||
|
|
||||||
public String[][] getData() { |
|
||||||
try { |
|
||||||
String endpoint = "http://localhost:8080/axis/TestWS2TDClient.jws"; |
|
||||||
Service service = new Service(); |
|
||||||
Call call = (Call) service.createCall(); |
|
||||||
call.setTargetEndpointAddress(new java.net.URL(endpoint)); |
|
||||||
call.setOperationName(new QName("http://localhost:8080/axis/TestWS2TDClient.jws", |
|
||||||
"getTD")); |
|
||||||
return (String[][]) call.invoke(new Object[]{}); |
|
||||||
} catch (Exception e) { |
|
||||||
e.printStackTrace(); |
|
||||||
} |
|
||||||
return new String[][]{}; |
|
||||||
} |
|
||||||
} |
|
@ -1,49 +0,0 @@ |
|||||||
package com.fr.demo; |
|
||||||
|
|
||||||
import com.fr.base.FRContext; |
|
||||||
import com.fr.dav.LocalEnv; |
|
||||||
|
|
||||||
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 envpath = "D:\\FineReport_8.0\\WebReport\\WEB-INF"; |
|
||||||
FRContext.setCurrentEnv(new LocalEnv(envpath)); |
|
||||||
// 连接数据库
|
|
||||||
String driver = "com.mysql.jdbc.Driver"; |
|
||||||
String url = "jdbc:mysql://112.124.109.239:3306/yourdatabase"; |
|
||||||
String user = "yourusername"; |
|
||||||
String pass = "yourpassword"; |
|
||||||
Class.forName(driver); |
|
||||||
Connection conn = DriverManager.getConnection(url, user, pass); //注意表名是否区分大小写
|
|
||||||
conn.setAutoCommit(false); |
|
||||||
PreparedStatement presmt = conn |
|
||||||
.prepareStatement("INSERT INTO report VALUES(?,?)"); |
|
||||||
// 读进需要保存入库的模板文件
|
|
||||||
File cptfile = new File(envpath |
|
||||||
+ "\\reportlets\\GettingStarted.cpt"); |
|
||||||
int lens = (int) cptfile.length(); |
|
||||||
InputStream ins = new FileInputStream(cptfile); |
|
||||||
// 将模板保存入库
|
|
||||||
presmt.setString(1, "GettingStarted.cpt"); // 第一个字段存放模板相对路径
|
|
||||||
presmt.setBinaryStream(2, ins, lens); // 第二个字段存放模板文件的二进制流
|
|
||||||
presmt.execute(); |
|
||||||
conn.commit(); |
|
||||||
presmt.close(); |
|
||||||
conn.close(); |
|
||||||
} catch (Exception e) { |
|
||||||
e.printStackTrace(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,19 +0,0 @@ |
|||||||
package com.fr.function; |
|
||||||
|
|
||||||
import com.fr.script.AbstractFunction; |
|
||||||
|
|
||||||
public class StringCat extends AbstractFunction { |
|
||||||
public StringCat() { |
|
||||||
} |
|
||||||
|
|
||||||
public Object run(Object[] args) { |
|
||||||
StringBuilder result = new StringBuilder(); |
|
||||||
|
|
||||||
for (int i = 0; i < args.length; ++i) { |
|
||||||
Object para = args[i]; |
|
||||||
result.append(para.toString()); |
|
||||||
} |
|
||||||
|
|
||||||
return result.toString(); |
|
||||||
} |
|
||||||
} |
|
@ -1,73 +0,0 @@ |
|||||||
//图片在下文字在上
|
|
||||||
package com.fr.function; |
|
||||||
|
|
||||||
import com.fr.base.BaseUtils; |
|
||||||
import com.fr.base.GraphHelper; |
|
||||||
import com.fr.script.AbstractFunction; |
|
||||||
import com.fr.stable.CoreGraphHelper; |
|
||||||
|
|
||||||
import javax.imageio.ImageIO; |
|
||||||
import javax.swing.JFrame; |
|
||||||
import javax.swing.JPanel; |
|
||||||
import java.awt.Graphics2D; |
|
||||||
import java.awt.Image; |
|
||||||
import java.awt.image.BufferedImage; |
|
||||||
import java.io.File; |
|
||||||
import java.io.IOException; |
|
||||||
|
|
||||||
|
|
||||||
public class StringImage extends AbstractFunction { |
|
||||||
public Object run(Object[] args) { |
|
||||||
Image result = null; |
|
||||||
int p = 0; |
|
||||||
Object[] ob = new Object[2]; |
|
||||||
for (int i = 0; (i < args.length && p <= 1); i++) { |
|
||||||
if (args[i] == null) { |
|
||||||
continue; |
|
||||||
} |
|
||||||
ob[p] = args[i]; |
|
||||||
p++; |
|
||||||
|
|
||||||
} |
|
||||||
try { |
|
||||||
result = initStringImage(ob[0], ob[1]); |
|
||||||
} catch (IOException e) { |
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace(); |
|
||||||
} |
|
||||||
return result; |
|
||||||
} |
|
||||||
|
|
||||||
public Image initStringImage(Object nameOb, Object imageOb) |
|
||||||
throws IOException { |
|
||||||
String name = (String) nameOb; |
|
||||||
Image image = null; |
|
||||||
if (imageOb instanceof Image) |
|
||||||
image = (Image) imageOb; |
|
||||||
else |
|
||||||
; |
|
||||||
Image stringImage = null; |
|
||||||
BufferedImage splashBuffedImage = CoreGraphHelper.toBufferedImage(image); |
|
||||||
stringImage = splashBuffedImage; |
|
||||||
Graphics2D splashG2d = splashBuffedImage.createGraphics(); |
|
||||||
double centerX = 25; |
|
||||||
double centerY = 25; |
|
||||||
GraphHelper.drawString(splashG2d, name, centerX, centerY); |
|
||||||
//
|
|
||||||
String FilePath = "Test.png"; |
|
||||||
File f = new File(FilePath); |
|
||||||
ImageIO.write(splashBuffedImage, "png", f); |
|
||||||
//
|
|
||||||
return splashBuffedImage; |
|
||||||
} |
|
||||||
|
|
||||||
public static void main(String arg[]) throws IOException { |
|
||||||
StringImage tt = new StringImage(); |
|
||||||
Image image = BaseUtils.readImage("D:\\1.jpg"); |
|
||||||
String name = "12314124"; |
|
||||||
Image aa = tt.initStringImage(name, image); |
|
||||||
JFrame jf = new JFrame(); |
|
||||||
JPanel jp = new JPanel(); |
|
||||||
|
|
||||||
} |
|
||||||
} |
|
@ -1,45 +0,0 @@ |
|||||||
//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; |
|
||||||
} |
|
||||||
} |
|
@ -1,105 +0,0 @@ |
|||||||
// 导出打印单选按钮及复选框
|
|
||||||
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,25 +0,0 @@ |
|||||||
package com.fr.io; |
|
||||||
|
|
||||||
import com.fr.general.ModuleContext; |
|
||||||
import com.fr.io.importer.ExcelReportImporter; |
|
||||||
import com.fr.main.TemplateWorkBook; |
|
||||||
import com.fr.main.impl.WorkBook; |
|
||||||
import com.fr.report.module.EngineModule; |
|
||||||
|
|
||||||
import java.io.File; |
|
||||||
import java.io.FileInputStream; |
|
||||||
import java.io.FileOutputStream; |
|
||||||
import java.io.OutputStream; |
|
||||||
|
|
||||||
public class ExcelToCpt { |
|
||||||
public static void main(String[] args) throws Exception { |
|
||||||
File excelFile = new File("D:\\API.xls"); |
|
||||||
FileInputStream a = new FileInputStream(excelFile); |
|
||||||
ModuleContext.startModule(EngineModule.class.getName()); |
|
||||||
TemplateWorkBook tpl = new ExcelReportImporter().generateWorkBookByStream(a); |
|
||||||
OutputStream outputStream = new FileOutputStream(new File("D:\\abc.cpt")); |
|
||||||
((WorkBook) tpl).export(outputStream); |
|
||||||
outputStream.close(); |
|
||||||
ModuleContext.stopModules(); |
|
||||||
} |
|
||||||
} |
|
@ -1,43 +0,0 @@ |
|||||||
package com.fr.io; |
|
||||||
|
|
||||||
import com.fr.base.FRContext; |
|
||||||
import com.fr.dav.LocalEnv; |
|
||||||
import com.fr.general.ModuleContext; |
|
||||||
import com.fr.io.exporter.ExcelExporter; |
|
||||||
import com.fr.main.TemplateWorkBook; |
|
||||||
import com.fr.main.workbook.ResultWorkBook; |
|
||||||
import com.fr.report.module.EngineModule; |
|
||||||
import com.fr.stable.WriteActor; |
|
||||||
|
|
||||||
import java.io.File; |
|
||||||
import java.io.FileOutputStream; |
|
||||||
|
|
||||||
|
|
||||||
public class ExcuteDemo { |
|
||||||
public static void main(String[] args) { |
|
||||||
try { |
|
||||||
// 首先需要定义执行所在的环境,这样才能正确读取数据库信息
|
|
||||||
String envPath = "D:\\FineReport_8.0\\WebReport\\WEB-INF"; |
|
||||||
FRContext.setCurrentEnv(new LocalEnv(envPath)); |
|
||||||
ModuleContext.startModule(EngineModule.class.getName()); |
|
||||||
// 读取模板
|
|
||||||
TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook(FRContext.getCurrentEnv(), "\\doc\\Primary\\Parameter\\Parameter.cpt"); |
|
||||||
/* |
|
||||||
* 生成参数map,注入参数与对应的值,用于执行报表 该模板中只有一个参数地区,给其赋值华北 |
|
||||||
* 若参数在发送请求时传过来,可以通过req.getParameter(name)获得 |
|
||||||
* 获得的参数put进map中,paraMap.put(paraname,paravalue) |
|
||||||
*/ |
|
||||||
java.util.Map paraMap = new java.util.HashMap(); |
|
||||||
paraMap.put("地区", "华北"); |
|
||||||
// 使用paraMap执行生成结果
|
|
||||||
ResultWorkBook result = workbook.execute(paraMap, new WriteActor()); |
|
||||||
// 使用结果如导出至excel
|
|
||||||
FileOutputStream outputStream = new FileOutputStream(new File( |
|
||||||
"D:\\Parameter.xls")); |
|
||||||
ExcelExporter excelExporter = new ExcelExporter(); |
|
||||||
excelExporter.export(outputStream, result); |
|
||||||
} catch (Exception e) { |
|
||||||
e.printStackTrace(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,93 +0,0 @@ |
|||||||
package com.fr.io; |
|
||||||
|
|
||||||
import com.fr.base.FRContext; |
|
||||||
import com.fr.base.Parameter; |
|
||||||
import com.fr.dav.LocalEnv; |
|
||||||
import com.fr.general.ModuleContext; |
|
||||||
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.exporter.excel.stream.StreamExcel2007Exporter; |
|
||||||
import com.fr.main.impl.WorkBook; |
|
||||||
import com.fr.main.workbook.ResultWorkBook; |
|
||||||
import com.fr.report.module.EngineModule; |
|
||||||
import com.fr.stable.WriteActor; |
|
||||||
|
|
||||||
import java.io.File; |
|
||||||
import java.io.FileOutputStream; |
|
||||||
|
|
||||||
|
|
||||||
public class ExportApi { |
|
||||||
public static void main(String[] args) { |
|
||||||
// 定义报表运行环境,才能执行报表
|
|
||||||
String envpath = "D:\\FineReport_8.0\\WebReport\\WEB-INF"; |
|
||||||
FRContext.setCurrentEnv(new LocalEnv(envpath)); |
|
||||||
ModuleContext.startModule(EngineModule.class.getName()); |
|
||||||
ResultWorkBook rworkbook = null; |
|
||||||
try { |
|
||||||
// 未执行模板工作薄
|
|
||||||
WorkBook workbook = (WorkBook) TemplateWorkBookIO |
|
||||||
.readTemplateWorkBook(FRContext.getCurrentEnv(), |
|
||||||
"\\doc\\Primary\\Parameter\\Parameter.cpt"); |
|
||||||
// 获取报表参数并设置值,导出内置数据集时数据集会根据参数值查询出结果从而转为内置数据集
|
|
||||||
Parameter[] parameters = workbook.getParameters(); |
|
||||||
parameters[0].setValue("华东"); |
|
||||||
// 定义parametermap用于执行报表,将执行后的结果工作薄保存为rworkBook
|
|
||||||
java.util.Map parameterMap = new java.util.HashMap(); |
|
||||||
for (int i = 0; i < parameters.length; i++) { |
|
||||||
parameterMap.put(parameters[i].getName(), parameters[i] |
|
||||||
.getValue()); |
|
||||||
} |
|
||||||
// 定义输出流
|
|
||||||
FileOutputStream outputStream; |
|
||||||
// 将未执行模板工作薄导出为内置数据集模板
|
|
||||||
outputStream = new FileOutputStream(new File("D:\\EmbExport.cpt")); |
|
||||||
EmbeddedTableDataExporter templateExporter = new EmbeddedTableDataExporter(); |
|
||||||
templateExporter.export(outputStream, workbook); |
|
||||||
// 将模板工作薄导出模板文件,在导出前您可以编辑导入的模板工作薄,可参考报表调用章节
|
|
||||||
outputStream = new FileOutputStream(new File("D:\\TmpExport.cpt")); |
|
||||||
((WorkBook) workbook).export(outputStream); |
|
||||||
// 将结果工作薄导出为2003Excel文件
|
|
||||||
outputStream = new FileOutputStream(new File("D:\\ExcelExport.xls")); |
|
||||||
ExcelExporter ExcelExport = new ExcelExporter(); |
|
||||||
ExcelExport.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
|
||||||
// 将结果工作薄导出为Excel文件
|
|
||||||
outputStream = new FileOutputStream(new File("D:\\ExcelExport.xlsx")); |
|
||||||
StreamExcel2007Exporter ExcelExport1 = new StreamExcel2007Exporter(); |
|
||||||
ExcelExport1.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
|
||||||
// 将结果工作薄导出为Word文件
|
|
||||||
outputStream = new FileOutputStream(new File("D:\\WordExport.doc")); |
|
||||||
WordExporter WordExport = new WordExporter(); |
|
||||||
WordExport.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
|
||||||
// 将结果工作薄导出为Pdf文件
|
|
||||||
outputStream = new FileOutputStream(new File("D:\\PdfExport.pdf")); |
|
||||||
PDFExporter PdfExport = new PDFExporter(); |
|
||||||
PdfExport.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
|
||||||
// 将结果工作薄导出为Txt文件(txt文件本身不支持表格、图表等,被导出模板一般为明细表)
|
|
||||||
outputStream = new FileOutputStream(new File("D:\\TxtExport.txt")); |
|
||||||
TextExporter TxtExport = new TextExporter(); |
|
||||||
TxtExport.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
|
||||||
// 将结果工作薄导出为Csv文件
|
|
||||||
outputStream = new FileOutputStream(new File("D:\\CsvExport.csv")); |
|
||||||
CSVExporter CsvExport = new CSVExporter(); |
|
||||||
CsvExport.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
|
||||||
//将结果工作薄导出为SVG文件
|
|
||||||
outputStream = new FileOutputStream(new File("D:\\SvgExport.svg")); |
|
||||||
SVGExporter SvgExport = new SVGExporter(); |
|
||||||
SvgExport.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
|
||||||
//将结果工作薄导出为image文件
|
|
||||||
outputStream = new FileOutputStream(new File("D:\\PngExport.png")); |
|
||||||
ImageExporter ImageExport = new ImageExporter(); |
|
||||||
ImageExport.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
|
||||||
outputStream.close(); |
|
||||||
ModuleContext.stopModules(); |
|
||||||
} catch (Exception e) { |
|
||||||
e.printStackTrace(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,90 +0,0 @@ |
|||||||
package com.fr.io; |
|
||||||
|
|
||||||
import com.fr.base.FRContext; |
|
||||||
import com.fr.base.Parameter; |
|
||||||
import com.fr.dav.LocalEnv; |
|
||||||
import com.fr.general.ModuleContext; |
|
||||||
import com.fr.io.exporter.ExcelExporter; |
|
||||||
import com.fr.io.exporter.LargeDataPageExcelExporter; |
|
||||||
import com.fr.io.exporter.PageExcel2007Exporter; |
|
||||||
import com.fr.io.exporter.PageExcelExporter; |
|
||||||
import com.fr.io.exporter.PageToSheetExcel2007Exporter; |
|
||||||
import com.fr.io.exporter.PageToSheetExcelExporter; |
|
||||||
import com.fr.io.exporter.excel.stream.StreamExcel2007Exporter; |
|
||||||
import com.fr.main.impl.WorkBook; |
|
||||||
import com.fr.main.workbook.ResultWorkBook; |
|
||||||
import com.fr.report.core.ReportUtils; |
|
||||||
import com.fr.report.module.EngineModule; |
|
||||||
import com.fr.stable.WriteActor; |
|
||||||
|
|
||||||
import java.io.File; |
|
||||||
import java.io.FileOutputStream; |
|
||||||
|
|
||||||
|
|
||||||
public class ExportExcel { |
|
||||||
public static void main(String[] args) { |
|
||||||
// 定义报表运行环境,才能执行报表
|
|
||||||
String envpath = "D:\\FineReport_8.0\\WebReport\\WEB-INF"; |
|
||||||
FRContext.setCurrentEnv(new LocalEnv(envpath)); |
|
||||||
ModuleContext.startModule(EngineModule.class.getName()); |
|
||||||
ResultWorkBook rworkbook = null; |
|
||||||
try { |
|
||||||
// 未执行模板工作薄
|
|
||||||
WorkBook workbook = (WorkBook) TemplateWorkBookIO |
|
||||||
.readTemplateWorkBook(FRContext.getCurrentEnv(), |
|
||||||
"\\doc\\Primary\\Parameter\\Parameter.cpt"); |
|
||||||
// 获取报表参数并设置值,导出内置数据集时数据集会根据参数值查询出结果从而转为内置数据集
|
|
||||||
Parameter[] parameters = workbook.getParameters(); |
|
||||||
parameters[0].setValue("华东"); |
|
||||||
// 定义parametermap用于执行报表,将执行后的结果工作薄保存为rworkBook
|
|
||||||
java.util.Map parameterMap = new java.util.HashMap(); |
|
||||||
for (int i = 0; i < parameters.length; i++) { |
|
||||||
parameterMap.put(parameters[i].getName(), parameters[i] |
|
||||||
.getValue()); |
|
||||||
} |
|
||||||
// 定义输出流
|
|
||||||
FileOutputStream outputStream; |
|
||||||
|
|
||||||
//原样导出excel2003
|
|
||||||
outputStream = new FileOutputStream(new File("E:\\ExcelExport.xls")); |
|
||||||
ExcelExporter excel = new ExcelExporter(); |
|
||||||
excel.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
|
||||||
|
|
||||||
//原样导出excel2007
|
|
||||||
outputStream = new FileOutputStream(new File("E:\\ExcelExport.xlsx")); |
|
||||||
StreamExcel2007Exporter excel1 = new StreamExcel2007Exporter(); |
|
||||||
excel.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
|
||||||
|
|
||||||
//分页导出excel2003
|
|
||||||
outputStream = new FileOutputStream(new File("E:\\PageExcelExport.xls")); |
|
||||||
PageExcelExporter page = new PageExcelExporter(ReportUtils.getPaperSettingListFromWorkBook(workbook.execute(parameterMap, new WriteActor()))); |
|
||||||
page.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
|
||||||
|
|
||||||
//分页导出excel2007
|
|
||||||
outputStream = new FileOutputStream(new File("E:\\PageExcelExport.xlsx")); |
|
||||||
PageExcel2007Exporter page1 = new PageExcel2007Exporter(ReportUtils.getPaperSettingListFromWorkBook(rworkbook)); |
|
||||||
page1.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
|
||||||
|
|
||||||
//分页分sheet导出excel2003
|
|
||||||
outputStream = new FileOutputStream(new File("E:\\PageSheetExcelExport.xls")); |
|
||||||
PageToSheetExcelExporter sheet = new PageToSheetExcelExporter(ReportUtils.getPaperSettingListFromWorkBook(workbook.execute(parameterMap, new WriteActor()))); |
|
||||||
sheet.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
|
||||||
|
|
||||||
//分页分sheet导出excel2007
|
|
||||||
outputStream = new FileOutputStream(new File("E:\\PageSheetExcelExport.xlsx")); |
|
||||||
PageToSheetExcel2007Exporter sheet1 = new PageToSheetExcel2007Exporter(ReportUtils.getPaperSettingListFromWorkBook(rworkbook)); |
|
||||||
sheet1.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
|
||||||
|
|
||||||
//大数据量导出
|
|
||||||
outputStream = new FileOutputStream(new File("E:\\LargeExcelExport.zip")); |
|
||||||
LargeDataPageExcelExporter large = new LargeDataPageExcelExporter(ReportUtils.getPaperSettingListFromWorkBook(workbook.execute(parameterMap, new WriteActor())), true); |
|
||||||
//导出2007版outputStream = new FileOutputStream(new File("E:\\LargeExcelExport.xlsx")); excel LargeDataPageExcel2007Exporter large = new LargeDataPageExcel2007Exporter(ReportUtils.getPaperSettingListFromWorkBook(rworkbook), true);
|
|
||||||
large.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
|
||||||
|
|
||||||
outputStream.close(); |
|
||||||
ModuleContext.stopModules(); |
|
||||||
} catch (Exception e) { |
|
||||||
e.printStackTrace(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,35 +0,0 @@ |
|||||||
package com.fr.io; |
|
||||||
|
|
||||||
import com.fr.base.FRContext; |
|
||||||
import com.fr.base.Parameter; |
|
||||||
import com.fr.dav.LocalEnv; |
|
||||||
import com.fr.main.TemplateWorkBook; |
|
||||||
import com.fr.print.PrintUtils; |
|
||||||
|
|
||||||
import java.util.HashMap; |
|
||||||
|
|
||||||
|
|
||||||
public class JavaPrint { |
|
||||||
public static void main(String[] args) { |
|
||||||
// 定义报表运行环境,才能执行报表
|
|
||||||
String envPath = "D:\\FineReport\\develop\\code\\build\\package\\WebReport\\WEB-INF"; |
|
||||||
FRContext.setCurrentEnv(new LocalEnv(envPath)); |
|
||||||
try { |
|
||||||
TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook(FRContext.getCurrentEnv(), "GettingStarted.cpt"); |
|
||||||
// 参数传值
|
|
||||||
Parameter[] parameters = workbook.getParameters(); |
|
||||||
HashMap<String, String> paraMap = new HashMap<String, String>(); |
|
||||||
paraMap.put(parameters[0].getName(), "华北"); |
|
||||||
|
|
||||||
// java中调用报表打印方法
|
|
||||||
boolean a = PrintUtils.printWorkBook("GettingStarted.cpt", paraMap, true); |
|
||||||
if (a == false) { |
|
||||||
System.out.println("失败啦!返回" + a); |
|
||||||
} else { |
|
||||||
System.out.println("成功!返回" + a); |
|
||||||
} |
|
||||||
} catch (Exception e) { |
|
||||||
e.printStackTrace(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,76 +0,0 @@ |
|||||||
package com.fr.output; |
|
||||||
|
|
||||||
import com.fr.data.dao.CompatiableIDFCMapper; |
|
||||||
import com.fr.data.dao.ObjectTableMapper; |
|
||||||
import com.fr.json.JSONException; |
|
||||||
import com.fr.json.JSONObject; |
|
||||||
import com.fr.schedule.output.AbstractOutputFileAction; |
|
||||||
import com.fr.schedule.output.FTPTransmission; |
|
||||||
import com.fr.schedule.output.OutputFileAction; |
|
||||||
import com.fr.schedule.output.ftp.DefaultFTPTransmit; |
|
||||||
|
|
||||||
import java.io.File; |
|
||||||
|
|
||||||
public class FTPUpload extends AbstractOutputFileAction { |
|
||||||
@Override |
|
||||||
public ObjectTableMapper objectTableMapper2Register() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public long getId() { |
|
||||||
return 0; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public File[] getFilesToDealWith(File[] files) { |
|
||||||
return files; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void doFileAction(File[] files) { |
|
||||||
FTPTransmission ftp = new FTPTransmission(); |
|
||||||
ftp.setServerAddress("env.finedevelop.com"); |
|
||||||
ftp.setPort(58321); |
|
||||||
ftp.setSavePath("connie"); |
|
||||||
ftp.setUsername("fr"); |
|
||||||
ftp.setPassword("ilovejava"); |
|
||||||
try { |
|
||||||
new DefaultFTPTransmit().transmit(files, ftp.getServerAddress(), ftp.getPort(), ftp.getUsername(), ftp.getPassword(), ftp.getSavePath()); |
|
||||||
} catch (Exception e) { |
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace(); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public CompatiableIDFCMapper getExtraOutputFileActionForeignKey() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public boolean isEmailNotification() { |
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public OutputFileAction analyzeJSON(JSONObject arg0) { |
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public JSONObject createJSONConfig() throws JSONException { |
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public String getJsonTag() { |
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
@ -1,100 +0,0 @@ |
|||||||
package com.fr.output; |
|
||||||
|
|
||||||
import com.fr.data.dao.CompatiableIDFCMapper; |
|
||||||
import com.fr.data.dao.ObjectTableMapper; |
|
||||||
import com.fr.json.JSONException; |
|
||||||
import com.fr.json.JSONObject; |
|
||||||
import com.fr.schedule.output.AbstractOutputFileAction; |
|
||||||
import com.fr.schedule.output.OutputFileAction; |
|
||||||
|
|
||||||
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.OutputStream; |
|
||||||
|
|
||||||
public class OutputExcel extends AbstractOutputFileAction { |
|
||||||
|
|
||||||
@Override |
|
||||||
public File[] getFilesToDealWith(File[] files) { |
|
||||||
return files; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void doFileAction(File[] files) { |
|
||||||
// OutputStream out=new BufferedOutputStream(new FileOutputStream(new File(files.)));;
|
|
||||||
System.out.println(files[0].getName()); |
|
||||||
for (int i = 0; i < files.length; i++) { |
|
||||||
String name = files[i].getName(); |
|
||||||
String path = "D:/" + name; |
|
||||||
BufferedInputStream in = null; |
|
||||||
OutputStream out = null; |
|
||||||
try { |
|
||||||
out = new BufferedOutputStream(new FileOutputStream(new File(path))); |
|
||||||
in = new BufferedInputStream(new FileInputStream(files[i])); |
|
||||||
byte[] ba = new byte[in.available()]; |
|
||||||
in.read(ba); |
|
||||||
out.write(ba); |
|
||||||
} catch (Exception e) { |
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace(); |
|
||||||
} finally { |
|
||||||
try { |
|
||||||
if (in != null) { |
|
||||||
in.close(); |
|
||||||
} |
|
||||||
if (out != null) { |
|
||||||
out.close(); |
|
||||||
} |
|
||||||
} catch (IOException e) { |
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace(); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public ObjectTableMapper objectTableMapper2Register() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public CompatiableIDFCMapper getExtraOutputFileActionForeignKey() { |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public long getId() { |
|
||||||
return 0; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public boolean isEmailNotification() { |
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public OutputFileAction analyzeJSON(JSONObject arg0) { |
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public JSONObject createJSONConfig() throws JSONException { |
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public String getJsonTag() { |
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
@ -1,77 +0,0 @@ |
|||||||
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 ""; |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,11 @@ |
|||||||
|
public class SimpleService |
||||||
|
{ |
||||||
|
public String getGreeting(String name) |
||||||
|
{ |
||||||
|
return "你好 " + name; |
||||||
|
} |
||||||
|
public int getPrice() |
||||||
|
{ |
||||||
|
return new java.util.Random().nextInt(1000); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,8 @@ |
|||||||
|
public class TestWS2TDClient { |
||||||
|
public String[][] getTD() { |
||||||
|
String[][] a = { { "城市", "销售员", "销售额" }, { "江苏", "Anna", "230" }, { "江苏", "Alex", "190" }, |
||||||
|
|
||||||
|
{ "江苏", "Jack", "320" }, { "江苏", "Apple", "210" }, { "浙江", "Faye", "150" }, { "浙江", "Sammi", "280" } }; |
||||||
|
return a; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,111 @@ |
|||||||
|
package com.fr; |
||||||
|
|
||||||
|
import com.fr.data.NetworkHelper; |
||||||
|
import com.fr.decision.mobile.terminal.TerminalHandler; |
||||||
|
import com.fr.decision.webservice.utils.DecisionServiceConstants; |
||||||
|
import com.fr.decision.webservice.v10.login.LoginService; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.security.JwtUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.web.Device; |
||||||
|
import org.jasig.cas.client.validation.Assertion; |
||||||
|
import javax.servlet.Filter; |
||||||
|
import javax.servlet.FilterChain; |
||||||
|
import javax.servlet.FilterConfig; |
||||||
|
import javax.servlet.ServletException; |
||||||
|
import javax.servlet.ServletRequest; |
||||||
|
import javax.servlet.ServletResponse; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import javax.servlet.http.HttpSession; |
||||||
|
import java.io.IOException; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by Zed on 2018/9/11. |
||||||
|
*/ |
||||||
|
public class FrFilter implements Filter { |
||||||
|
|
||||||
|
public FrFilter() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void init(FilterConfig filterConfig) throws ServletException { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { |
||||||
|
FineLoggerFactory.getLogger().info("fr cas login"); |
||||||
|
HttpServletRequest req = (HttpServletRequest) servletRequest; |
||||||
|
HttpServletResponse res = (HttpServletResponse) servletResponse; |
||||||
|
HttpSession session = req.getSession(true); |
||||||
|
FineLoggerFactory.getLogger().info("URL:" + req.getRequestURI()); |
||||||
|
String username; |
||||||
|
//获取cas传递过来的username
|
||||||
|
Object object = req.getSession().getAttribute("_const_cas_assertion_"); |
||||||
|
if (object != null) { |
||||||
|
Assertion assertion = (Assertion) object; |
||||||
|
username = assertion.getPrincipal().getName(); |
||||||
|
} else { |
||||||
|
username = (String) session.getAttribute("edu.yale.its.tp.cas.client.filter.user"); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
//用户名为空,登录请求有问题,直接报错
|
||||||
|
if (StringUtils.isNotEmpty(username)) { |
||||||
|
FineLoggerFactory.getLogger().info("username:" + username); |
||||||
|
//获取请求携带的token
|
||||||
|
Object oldToken = session.getAttribute(DecisionServiceConstants.FINE_AUTH_TOKEN_NAME); |
||||||
|
|
||||||
|
//token不存在,或者token过期了,走后台登录方法
|
||||||
|
if (oldToken == null || !checkTokenValid(req, (String) oldToken, username)) { |
||||||
|
login(req, res, session, username); |
||||||
|
filterChain.doFilter(req, res); |
||||||
|
} else { |
||||||
|
//放行
|
||||||
|
filterChain.doFilter(req, res); |
||||||
|
FineLoggerFactory.getLogger().info("no need"); |
||||||
|
} |
||||||
|
} else { |
||||||
|
throw new Exception("username is empty"); |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 后台登录方法 |
||||||
|
*/ |
||||||
|
private void login(HttpServletRequest req, HttpServletResponse res, HttpSession session, String username) throws Exception { |
||||||
|
String token = LoginService.getInstance().login(req, res, username); |
||||||
|
req.setAttribute(DecisionServiceConstants.FINE_AUTH_TOKEN_NAME, token); |
||||||
|
FineLoggerFactory.getLogger().info("fr FrFilter is over with username is ###" + username); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 校验token是否有效 |
||||||
|
*/ |
||||||
|
private boolean checkTokenValid(HttpServletRequest req, String token, String currentUserName) { |
||||||
|
try { |
||||||
|
//当前登录用户和token对应的用户名不同,需要重新生成token
|
||||||
|
if (!ComparatorUtils.equals(currentUserName, JwtUtils.parseJWT(token).getSubject())) { |
||||||
|
FineLoggerFactory.getLogger().info("username changed:" + currentUserName); |
||||||
|
return false; |
||||||
|
} |
||||||
|
Device device = NetworkHelper.getDevice(req); |
||||||
|
LoginService.getInstance().loginStatusValid(token, TerminalHandler.getTerminal(req, device)); |
||||||
|
return true; |
||||||
|
} catch (Exception ignore) { |
||||||
|
} |
||||||
|
|
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void destroy() { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,60 @@ |
|||||||
|
package com.fr; |
||||||
|
|
||||||
|
import com.fr.decision.authority.data.User; |
||||||
|
import com.fr.decision.webservice.exception.user.UserNotExistException; |
||||||
|
import com.fr.decision.webservice.v10.login.LoginService; |
||||||
|
import com.fr.decision.webservice.v10.login.TokenResource; |
||||||
|
import com.fr.decision.webservice.v10.user.UserService; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
import java.io.IOException; |
||||||
|
import javax.servlet.Filter; |
||||||
|
import javax.servlet.FilterChain; |
||||||
|
import javax.servlet.FilterConfig; |
||||||
|
import javax.servlet.ServletException; |
||||||
|
import javax.servlet.ServletRequest; |
||||||
|
import javax.servlet.ServletResponse; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
public class FrLoginFilter implements Filter { |
||||||
|
public FrLoginFilter() { |
||||||
|
} |
||||||
|
|
||||||
|
public void init(FilterConfig filterConfig) throws ServletException { |
||||||
|
} |
||||||
|
|
||||||
|
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { |
||||||
|
HttpServletRequest req = (HttpServletRequest)servletRequest; |
||||||
|
HttpServletResponse res = (HttpServletResponse)servletResponse; |
||||||
|
String username = WebUtils.getHTTPRequestParameter(req, "username"); |
||||||
|
|
||||||
|
try { |
||||||
|
if (StringUtils.isNotEmpty(username)) { |
||||||
|
FineLoggerFactory.getLogger().error("username:" + username); |
||||||
|
User user = UserService.getInstance().getUserByUserName(username); |
||||||
|
if (user == null) { |
||||||
|
throw new UserNotExistException(); |
||||||
|
} |
||||||
|
|
||||||
|
String oldToken = TokenResource.COOKIE.getToken(req); |
||||||
|
if (oldToken == null) { |
||||||
|
String token = LoginService.getInstance().login(req, res, username); |
||||||
|
req.setAttribute("fine_auth_token", token); |
||||||
|
filterChain.doFilter(req, res); |
||||||
|
} else { |
||||||
|
filterChain.doFilter(req, res); |
||||||
|
} |
||||||
|
} else { |
||||||
|
filterChain.doFilter(req, res); |
||||||
|
} |
||||||
|
} catch (Exception var10) { |
||||||
|
FineLoggerFactory.getLogger().error(var10.getMessage(), var10); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void destroy() { |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,228 @@ |
|||||||
|
package com.fr; |
||||||
|
|
||||||
|
import java.security.*; |
||||||
|
import javax.net.ssl.*; |
||||||
|
import com.fr.third.org.hsqldb.lib.*; |
||||||
|
import java.net.*; |
||||||
|
import java.io.*; |
||||||
|
import java.security.cert.CertificateException; |
||||||
|
import java.security.cert.X509Certificate; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
public class HttpUtil |
||||||
|
{ |
||||||
|
private static final String DEFAULT_CHARSET = "UTF-8"; |
||||||
|
private static final String METHOD_POST = "POST"; |
||||||
|
private static final String METHOD_GET = "GET"; |
||||||
|
private static final int CONNECTTIMEOUT = 5000; |
||||||
|
private static final int READTIMEOUT = 5000; |
||||||
|
|
||||||
|
private static class DefaultTrustManager implements X509TrustManager { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public X509Certificate[] getAcceptedIssuers() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
||||||
|
private static HttpURLConnection getConnection(final URL url, final String method, final String ctype) throws IOException { |
||||||
|
HttpURLConnection conn = null; |
||||||
|
if ("https".equals(url.getProtocol())) { |
||||||
|
SSLContext ctx = null; |
||||||
|
try { |
||||||
|
ctx = SSLContext.getInstance("TLS"); |
||||||
|
ctx.init(new KeyManager[0], new TrustManager[] { new DefaultTrustManager() }, new SecureRandom()); |
||||||
|
} |
||||||
|
catch (Exception e) { |
||||||
|
throw new IOException(e); |
||||||
|
} |
||||||
|
final HttpsURLConnection connHttps = (HttpsURLConnection)url.openConnection(); |
||||||
|
connHttps.setSSLSocketFactory(ctx.getSocketFactory()); |
||||||
|
connHttps.setHostnameVerifier(new HostnameVerifier() { |
||||||
|
@Override |
||||||
|
public boolean verify(String s, SSLSession sslSession) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
}); |
||||||
|
conn = connHttps; |
||||||
|
} |
||||||
|
else { |
||||||
|
conn = (HttpURLConnection)url.openConnection(); |
||||||
|
} |
||||||
|
conn.setRequestMethod(method); |
||||||
|
conn.setDoInput(true); |
||||||
|
conn.setDoOutput(true); |
||||||
|
conn.setRequestProperty("User-Agent", "quantangle- apiclient-java"); |
||||||
|
conn.setRequestProperty("Content-Type", ctype); |
||||||
|
conn.setRequestProperty("Connection", "Keep-Alive"); |
||||||
|
return conn; |
||||||
|
} |
||||||
|
|
||||||
|
public static String doGet(final String url, final Map<String, String> params) throws IOException { |
||||||
|
return doGet(url, params, "UTF-8"); |
||||||
|
} |
||||||
|
|
||||||
|
public static String doGet(String url, final Map<String, String> params, final String charset) throws IOException { |
||||||
|
if (StringUtil.isEmpty(url) || params == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
String response = ""; |
||||||
|
url = url + "?" + buildQuery(params, charset); |
||||||
|
HttpURLConnection conn = null; |
||||||
|
final String ctype = "application/x-www-form- urlencoded;charset=" + charset; |
||||||
|
conn = getConnection(new URL(url), "GET", ctype); |
||||||
|
response = getResponseAsString(conn); |
||||||
|
return response; |
||||||
|
} |
||||||
|
|
||||||
|
public static String doPost(final String url, final Map<String, String> params) throws IOException { |
||||||
|
return doPost(url, params, 5000, 5000); |
||||||
|
} |
||||||
|
|
||||||
|
public static String doPost(final String url, final Map<String, String> params, final int connectTimeOut, final int readTimeOut) throws IOException { |
||||||
|
return doPost(url, params, "UTF-8", connectTimeOut, readTimeOut); |
||||||
|
} |
||||||
|
|
||||||
|
public static String doPost(final String url, final Map<String, String> params, final String charset, final int connectTimeOut, final int readTimeOut) throws IOException { |
||||||
|
HttpURLConnection conn = null; |
||||||
|
String response = ""; |
||||||
|
final String ctype = "application/x-www-form- urlencoded;charset=" + charset; |
||||||
|
conn = getConnection(new URL(url), "POST", ctype); |
||||||
|
conn.setConnectTimeout(connectTimeOut); |
||||||
|
conn.setReadTimeout(readTimeOut); |
||||||
|
conn.getOutputStream().write(buildQuery(params, charset).getBytes(charset)); |
||||||
|
response = getResponseAsString(conn); |
||||||
|
return response; |
||||||
|
} |
||||||
|
|
||||||
|
public static String buildQuery(final Map<String, String> params, final String charset) { |
||||||
|
if (params == null || params.isEmpty()) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
final StringBuilder sb = new StringBuilder(); |
||||||
|
boolean first = true; |
||||||
|
for (final Map.Entry<String, String> entry : params.entrySet()) { |
||||||
|
if (first) { |
||||||
|
first = false; |
||||||
|
} |
||||||
|
else { |
||||||
|
sb.append("&"); |
||||||
|
} |
||||||
|
final String key = entry.getKey(); |
||||||
|
final String value = entry.getValue(); |
||||||
|
if (!StringUtil.isEmpty(key) && !StringUtil.isEmpty(value)) { |
||||||
|
try { |
||||||
|
sb.append(key).append("=").append(URLEncoder.encode(value, charset)); |
||||||
|
} |
||||||
|
catch (UnsupportedEncodingException ex) {} |
||||||
|
} |
||||||
|
} |
||||||
|
return sb.toString(); |
||||||
|
} |
||||||
|
|
||||||
|
public static Map<String, String> splitQuery(final String query, final String charset) { |
||||||
|
final Map<String, String> ret = new HashMap<String, String>(); |
||||||
|
if (!StringUtil.isEmpty(query)) { |
||||||
|
final String[] split2; |
||||||
|
final String[] splits = split2 = query.split("\\&"); |
||||||
|
for (final String split : split2) { |
||||||
|
final String[] keyAndValue = split.split("\\="); |
||||||
|
boolean flag = true; |
||||||
|
for (int i = 0, len = keyAndValue.length; i < len; ++i) { |
||||||
|
if (StringUtil.isEmpty(keyAndValue[i])) { |
||||||
|
flag = false; |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
if (flag && keyAndValue.length == 2) { |
||||||
|
try { |
||||||
|
ret.put(keyAndValue[0], URLDecoder.decode(keyAndValue[1], charset)); |
||||||
|
} |
||||||
|
catch (UnsupportedEncodingException ex) {} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return ret; |
||||||
|
} |
||||||
|
|
||||||
|
private static byte[] getTextEntry(final String fieldName, final String fieldValue, final String charset) throws IOException { |
||||||
|
final StringBuilder entry = new StringBuilder(); |
||||||
|
entry.append("Content-Disposition:form-data;name=\""); |
||||||
|
entry.append(fieldName); |
||||||
|
entry.append("\"\r\nContent-Type:text/plain\r\n\r\n"); |
||||||
|
entry.append(fieldValue); |
||||||
|
return entry.toString().getBytes(charset); |
||||||
|
} |
||||||
|
|
||||||
|
private static byte[] getFileEntry(final String fieldName, final String fileName, final String mimeType, final String charset) throws IOException { |
||||||
|
final StringBuilder entry = new StringBuilder(); |
||||||
|
entry.append("Content-Disposition:form-data;name=\""); |
||||||
|
entry.append(fieldName); |
||||||
|
entry.append("\";filename=\""); |
||||||
|
entry.append(fileName); |
||||||
|
entry.append("\"\r\nContent-Type:"); |
||||||
|
entry.append(mimeType); |
||||||
|
entry.append("\r\n\r\n"); |
||||||
|
return entry.toString().getBytes(charset); |
||||||
|
} |
||||||
|
|
||||||
|
private static String getResponseAsString(final HttpURLConnection conn) throws IOException { |
||||||
|
final String charset = getResponseCharset(conn.getContentType()); |
||||||
|
final InputStream es = conn.getErrorStream(); |
||||||
|
if (es == null) { |
||||||
|
return getStreamAsString(conn.getInputStream(), charset); |
||||||
|
} |
||||||
|
final String msg = getStreamAsString(es, charset); |
||||||
|
if (StringUtil.isEmpty(msg)) { |
||||||
|
throw new IOException("{\"" + conn.getResponseCode() + "\":\"" + conn.getResponseMessage() + "\"}"); |
||||||
|
} |
||||||
|
throw new IOException(msg); |
||||||
|
} |
||||||
|
|
||||||
|
private static String getStreamAsString(final InputStream input, final String charset) throws IOException { |
||||||
|
final StringBuilder sb = new StringBuilder(); |
||||||
|
BufferedReader bf = null; |
||||||
|
try { |
||||||
|
bf = new BufferedReader(new InputStreamReader(input, charset)); |
||||||
|
String str; |
||||||
|
while ((str = bf.readLine()) != null) { |
||||||
|
sb.append(str); |
||||||
|
} |
||||||
|
return sb.toString(); |
||||||
|
} |
||||||
|
finally { |
||||||
|
if (bf != null) { |
||||||
|
bf.close(); |
||||||
|
bf = null; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private static String getResponseCharset(final String ctype) { |
||||||
|
String charset = "UTF-8"; |
||||||
|
if (!StringUtil.isEmpty(ctype)) { |
||||||
|
final String[] split; |
||||||
|
final String[] params = split = ctype.split("\\;"); |
||||||
|
for (String param : split) { |
||||||
|
param = param.trim(); |
||||||
|
if (param.startsWith("charset")) { |
||||||
|
final String[] pair = param.split("\\="); |
||||||
|
if (pair.length == 2) { |
||||||
|
charset = pair[1].trim(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return charset; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,111 @@ |
|||||||
|
package com.fr; |
||||||
|
|
||||||
|
import java.io.InputStream; |
||||||
|
import java.io.OutputStream; |
||||||
|
import java.io.PrintWriter; |
||||||
|
import java.net.URL; |
||||||
|
import java.net.URLConnection; |
||||||
|
import java.security.SecureRandom; |
||||||
|
import java.security.cert.CertificateException; |
||||||
|
import java.security.cert.X509Certificate; |
||||||
|
import java.util.Iterator; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.Map.Entry; |
||||||
|
import javax.net.ssl.HostnameVerifier; |
||||||
|
import javax.net.ssl.HttpsURLConnection; |
||||||
|
import javax.net.ssl.KeyManager; |
||||||
|
import javax.net.ssl.SSLContext; |
||||||
|
import javax.net.ssl.SSLSession; |
||||||
|
import javax.net.ssl.TrustManager; |
||||||
|
import javax.net.ssl.X509TrustManager; |
||||||
|
|
||||||
|
import org.apache.oltu.oauth2.client.HttpClient; |
||||||
|
import org.apache.oltu.oauth2.client.request.OAuthClientRequest; |
||||||
|
import org.apache.oltu.oauth2.client.response.OAuthClientResponse; |
||||||
|
import org.apache.oltu.oauth2.client.response.OAuthClientResponseFactory; |
||||||
|
import org.apache.oltu.oauth2.common.exception.OAuthProblemException; |
||||||
|
import org.apache.oltu.oauth2.common.exception.OAuthSystemException; |
||||||
|
import org.apache.oltu.oauth2.common.utils.OAuthUtils; |
||||||
|
|
||||||
|
public class SSLConnectionClient implements HttpClient { |
||||||
|
public SSLConnectionClient() { |
||||||
|
} |
||||||
|
|
||||||
|
public <T extends OAuthClientResponse> T execute(OAuthClientRequest request, Map<String, String> headers, String requestMethod, Class<T> responseClass) throws OAuthSystemException, OAuthProblemException { |
||||||
|
String responseBody = null; |
||||||
|
URLConnection c = null; |
||||||
|
boolean var7 = false; |
||||||
|
|
||||||
|
int responseCode; |
||||||
|
try { |
||||||
|
URL url = new URL(request.getLocationUri()); |
||||||
|
c = url.openConnection(); |
||||||
|
responseCode = -1; |
||||||
|
if (c instanceof HttpsURLConnection) { |
||||||
|
HttpsURLConnection httpsURLConnection = (HttpsURLConnection) c; |
||||||
|
SSLContext sslContext = SSLContext.getInstance("TLS"); |
||||||
|
sslContext.init((KeyManager[]) null, new TrustManager[]{new TrustAnyTrustManager()}, new SecureRandom()); |
||||||
|
httpsURLConnection.setSSLSocketFactory(sslContext.getSocketFactory()); |
||||||
|
httpsURLConnection.setHostnameVerifier(new TrustAnyHostnameVerifier()); |
||||||
|
if (headers != null && !headers.isEmpty()) { |
||||||
|
Iterator var11 = headers.entrySet().iterator(); |
||||||
|
|
||||||
|
while (var11.hasNext()) { |
||||||
|
Entry<String, String> header = (Entry) var11.next(); |
||||||
|
httpsURLConnection.addRequestProperty((String) header.getKey(), (String) header.getValue()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (!OAuthUtils.isEmpty(requestMethod)) { |
||||||
|
httpsURLConnection.setRequestMethod(requestMethod); |
||||||
|
if (requestMethod.equals("POST")) { |
||||||
|
httpsURLConnection.setDoOutput(true); |
||||||
|
OutputStream ost = httpsURLConnection.getOutputStream(); |
||||||
|
PrintWriter pw = new PrintWriter(ost); |
||||||
|
pw.print(request.getBody()); |
||||||
|
pw.flush(); |
||||||
|
pw.close(); |
||||||
|
} |
||||||
|
} else { |
||||||
|
httpsURLConnection.setRequestMethod("GET"); |
||||||
|
} |
||||||
|
|
||||||
|
httpsURLConnection.connect(); |
||||||
|
responseCode = httpsURLConnection.getResponseCode(); |
||||||
|
InputStream inputStream; |
||||||
|
if (responseCode == 400) { |
||||||
|
inputStream = httpsURLConnection.getErrorStream(); |
||||||
|
} else { |
||||||
|
inputStream = httpsURLConnection.getInputStream(); |
||||||
|
} |
||||||
|
|
||||||
|
responseBody = OAuthUtils.saveStreamAsString(inputStream); |
||||||
|
} |
||||||
|
} catch (Exception var13) { |
||||||
|
throw new OAuthSystemException(var13); |
||||||
|
} |
||||||
|
|
||||||
|
return OAuthClientResponseFactory.createCustomResponse(responseBody, c.getContentType(), responseCode, responseClass); |
||||||
|
} |
||||||
|
|
||||||
|
public void shutdown() { |
||||||
|
} |
||||||
|
|
||||||
|
static class TrustAnyTrustManager implements X509TrustManager { |
||||||
|
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { |
||||||
|
} |
||||||
|
|
||||||
|
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { |
||||||
|
} |
||||||
|
|
||||||
|
public X509Certificate[] getAcceptedIssuers() { |
||||||
|
return new X509Certificate[]{}; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
static class TrustAnyHostnameVerifier implements HostnameVerifier { |
||||||
|
public boolean verify(String hostname, SSLSession session) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,58 @@ |
|||||||
|
import com.fr.cert.token.JwtBuilder; |
||||||
|
import com.fr.cert.token.Jwts; |
||||||
|
import com.fr.cert.token.SignatureAlgorithm; |
||||||
|
import sun.misc.BASE64Encoder; |
||||||
|
import javax.crypto.Mac; |
||||||
|
import javax.crypto.spec.SecretKeySpec; |
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
public class Test2 { |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
//数字签名有效时长
|
||||||
|
long validTime = 30 * 60 * 1000; |
||||||
|
//数字签名内容,以访问资源的相对路径作为内容
|
||||||
|
String path = "GettingStarted.cpt"; |
||||||
|
//数字签名用的HS256的密钥
|
||||||
|
String key = createSecret(); |
||||||
|
//生成fine_digital_signature
|
||||||
|
String fine_digital_signature = createJwt("", "", path, validTime, key); |
||||||
|
//输出密钥
|
||||||
|
System.out.println(key); |
||||||
|
//输出fine_digital_signature
|
||||||
|
System.out.println(fine_digital_signature); |
||||||
|
} |
||||||
|
|
||||||
|
private static String createJwt(String issuer, String id, String subject, long validTime, String key) { |
||||||
|
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256; |
||||||
|
Date currentTime = new Date(); |
||||||
|
Date expirationTime = new Date(currentTime.getTime() + validTime); |
||||||
|
JwtBuilder builder = Jwts.builder() |
||||||
|
.setIssuer(issuer) |
||||||
|
.setSubject(subject) |
||||||
|
.setIssuedAt(currentTime) |
||||||
|
.setExpiration(expirationTime) |
||||||
|
.setId(id) |
||||||
|
.signWith(signatureAlgorithm, key); |
||||||
|
return builder.compact(); |
||||||
|
} |
||||||
|
|
||||||
|
private static String createSecret() { |
||||||
|
try { |
||||||
|
//secret可以自定义的
|
||||||
|
String secret = "2222222"; |
||||||
|
String message = ""; |
||||||
|
Mac sha256Hmac = Mac.getInstance("HmacSHA256"); |
||||||
|
SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256"); |
||||||
|
sha256Hmac.init(secret_key); |
||||||
|
BASE64Encoder encoder = new BASE64Encoder(); |
||||||
|
String hash = encoder.encode(sha256Hmac.doFinal(message.getBytes())); |
||||||
|
return hash; |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
System.out.println(e.getMessage()); |
||||||
|
} |
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -1,8 +1,5 @@ |
|||||||
package com.fr.data; |
package com.fr.data; |
||||||
|
|
||||||
/** |
|
||||||
* @author fanruan |
|
||||||
*/ |
|
||||||
public class ArrayTableDataDemo extends AbstractTableData { |
public class ArrayTableDataDemo extends AbstractTableData { |
||||||
/** |
/** |
||||||
* 定义程序数据集的列名与数据保存位置 |
* 定义程序数据集的列名与数据保存位置 |
@ -1,11 +1,10 @@ |
|||||||
package com.fr.data; |
package com.fr.data; |
||||||
|
|
||||||
import com.fr.stable.xml.XMLReadable; |
|
||||||
import com.fr.stable.xml.XMLableReader; |
|
||||||
|
|
||||||
import java.io.InputStream; |
import java.io.InputStream; |
||||||
import java.io.InputStreamReader; |
import java.io.InputStreamReader; |
||||||
import java.io.Reader; |
import java.io.Reader; |
||||||
|
import com.fr.stable.xml.XMLReadable; |
||||||
|
import com.fr.stable.xml.XMLableReader; |
||||||
|
|
||||||
public class GetXmlDate { |
public class GetXmlDate { |
||||||
// 定义返回值数组
|
// 定义返回值数组
|
@ -0,0 +1,29 @@ |
|||||||
|
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; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,100 @@ |
|||||||
|
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; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,86 @@ |
|||||||
|
package com.fr.data; |
||||||
|
|
||||||
|
import com.fr.general.data.TableDataException; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.stable.ParameterProvider; |
||||||
|
import org.apache.axis.client.Call; |
||||||
|
import org.apache.axis.client.Service; |
||||||
|
|
||||||
|
import javax.xml.namespace.QName; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class WebServiceTableData extends SimpleTableData { |
||||||
|
|
||||||
|
/** |
||||||
|
* 初始化列名数组 |
||||||
|
* |
||||||
|
* @return {col1,col2,col3...} |
||||||
|
* @throws TableDataException |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public String[] initColumnNames() { |
||||||
|
String[] columnNames = new String[10]; |
||||||
|
for (int i = 0; i < 10; i++) { |
||||||
|
columnNames[i] = "column#" + i; |
||||||
|
} |
||||||
|
return columnNames; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 加载数据 |
||||||
|
* |
||||||
|
* @return 行列数据 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public List<Object[]> loadData() { |
||||||
|
String tableName = ((ParameterProvider) (parameters.get().toArray())[0]).getValue().toString(); |
||||||
|
FineLoggerFactory.getLogger().info("Query SQL of ParamTableDataDemo: \n" + tableName); |
||||||
|
|
||||||
|
// 保存得到的结果集
|
||||||
|
ArrayList<Object[]> valueList = new ArrayList(); |
||||||
|
|
||||||
|
try { |
||||||
|
// 调用 Web 服务获取数据
|
||||||
|
String[][] data = createData(); |
||||||
|
|
||||||
|
// 如果数据为空,直接返回空列表
|
||||||
|
if (data == null || data.length == 0) { |
||||||
|
return valueList; |
||||||
|
} |
||||||
|
|
||||||
|
// 获得总列数
|
||||||
|
int colNum = data[0].length; |
||||||
|
|
||||||
|
// 用对象保存数据
|
||||||
|
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 String[][] createData() { |
||||||
|
try { |
||||||
|
String endpoint = "http://localhost:8080/axis/TestWS2TDClient.jws"; |
||||||
|
Service service = new Service(); |
||||||
|
Call call = (Call) service.createCall(); |
||||||
|
call.setTargetEndpointAddress(new java.net.URL(endpoint)); |
||||||
|
call.setOperationName(new QName("http://localhost:8080/axis/TestWS2TDClient.jws", |
||||||
|
"getTD")); |
||||||
|
String[][] ret = (String[][])call.invoke(new Object[] {}); |
||||||
|
return ret; |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return new String[][] {}; |
||||||
|
} |
||||||
|
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue