From ea5ba3f1811f6fe9c3e7f594ca1c40fb4beeaeee Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 31 Jul 2018 17:13:22 +0800 Subject: [PATCH 01/40] =?UTF-8?q?10.0=E5=BC=80=E5=8F=91=E5=B7=A5=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + pom.xml | 161 +++++++++++++++++++++++++ readme.md | 13 ++ src/main/java/com/fr/learn/Leaner.java | 10 ++ 4 files changed, 187 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 readme.md create mode 100644 src/main/java/com/fr/learn/Leaner.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9094724 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.iml +.idea/ +/target/ \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..ae29149 --- /dev/null +++ b/pom.xml @@ -0,0 +1,161 @@ + + 4.0.0 + com.fr.plugin + starter + 1.0 + pom + + 10.0-RELEASE-SNAPSHOT + + + + + com.fr.third + fine-third + ${common-version} + + + com.fr.activator + fine-activator + ${common-version} + compile + + + com.fr.core + fine-core + ${common-version} + compile + + + com.fr.webui + fine-webui + ${common-version} + compile + + + + com.fr.datasource + fine-datasource + ${common-version} + compile + + + + com.fr.decision + fine-decision + ${common-version} + compile + + + + com.fr.schedule + fine-schedule + ${common-version} + compile + + + + + com.fr.intelligence + fine-swift + ${common-version} + compile + + + com.fr.intelligence + fine-accumulator + ${common-version} + compile + + + + com.fr.report + fine-report-engine + ${common-version} + compile + + + + com.fr.report + fine-report-designer + ${common-version} + compile + + + + + io.socket + socket.io-client + 0.7.0 + compile + + + + + org.aspectj + aspectjrt + 1.6.9 + compile + + + + + org.swingexplorer + swexpl + 1.0 + + + org.swingexplorer + swag + 1.0 + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + copy + package + + copy-dependencies + + + + ${project.basedir}/webroot/WEB-INF/lib + + + + + + + + + + fanruan + fanruan + http://mvn.finedevelop.com/repository/maven-public/ + + true + always + warn + + + + + + fanruan + fanruan + http://mvn.finedevelop.com/repository/maven-public/ + + true + always + warn + + + + \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..a3a64cc --- /dev/null +++ b/readme.md @@ -0,0 +1,13 @@ +# 工程配置指南 + +直接使用IntelliJ IDEA打开这个目录即可。 + +如果需要复制jar包到webroot/WEB-INF/lib下,可以执行命令:```mvn install``` + +## 启动设计器 + +使用com.fr.learn.Leaner启动设计器。 + +## 修改依赖的jar版本 + +只需要更改pom.xml中的common-version属性即可。 \ No newline at end of file diff --git a/src/main/java/com/fr/learn/Leaner.java b/src/main/java/com/fr/learn/Leaner.java new file mode 100644 index 0000000..2f81552 --- /dev/null +++ b/src/main/java/com/fr/learn/Leaner.java @@ -0,0 +1,10 @@ +package com.fr.learn; + +import com.fr.start.Designer; + +public class Leaner extends Designer { + + public Leaner(String[] strings) { + super(strings); + } +} From abc5a0c09dd6bab0e1328c3679e4f322a9def10b Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 31 Jul 2018 17:19:13 +0800 Subject: [PATCH 02/40] =?UTF-8?q?10.0=E5=BC=80=E5=8F=91=E5=B7=A5=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.md | 4 +++- src/main/java/com/fr/learn/Learner4Debug.java | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/fr/learn/Learner4Debug.java diff --git a/readme.md b/readme.md index a3a64cc..dc161e3 100644 --- a/readme.md +++ b/readme.md @@ -6,7 +6,9 @@ ## 启动设计器 -使用com.fr.learn.Leaner启动设计器。 +如果希望正常的进行插件开发,使用```com.fr.learn.Leaner```启动设计器。 + +如果希望进行设计器调试,则使用```com.fr.learn.Leaner4Debug``启动设计器。 ## 修改依赖的jar版本 diff --git a/src/main/java/com/fr/learn/Learner4Debug.java b/src/main/java/com/fr/learn/Learner4Debug.java new file mode 100644 index 0000000..94b77f6 --- /dev/null +++ b/src/main/java/com/fr/learn/Learner4Debug.java @@ -0,0 +1,8 @@ +package com.fr.learn; + +public class Learner4Debug { + + public static void main(String... args) { + org.swingexplorer.Launcher.main(new String[]{"com.fr.start.Designer"}); + } +} From 13016ed41b33c92930a26ad7cf957aef5b11cd85 Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 31 Jul 2018 17:19:28 +0800 Subject: [PATCH 03/40] =?UTF-8?q?10.0=E5=BC=80=E5=8F=91=E5=B7=A5=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index dc161e3..8e8d049 100644 --- a/readme.md +++ b/readme.md @@ -8,7 +8,7 @@ 如果希望正常的进行插件开发,使用```com.fr.learn.Leaner```启动设计器。 -如果希望进行设计器调试,则使用```com.fr.learn.Leaner4Debug``启动设计器。 +如果希望进行设计器调试,则使用```com.fr.learn.Leaner4Debug```启动设计器。 ## 修改依赖的jar版本 From be7702e1123cce986b24051682c882b46975a40f Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 31 Jul 2018 17:21:40 +0800 Subject: [PATCH 04/40] =?UTF-8?q?10.0=E5=BC=80=E5=8F=91=E5=B7=A5=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 8e8d049..c06364e 100644 --- a/readme.md +++ b/readme.md @@ -12,4 +12,10 @@ ## 修改依赖的jar版本 -只需要更改pom.xml中的common-version属性即可。 \ No newline at end of file +只需要更改pom.xml中的common-version属性即可。 + +|common-version|含义| +|--------------|----| +|10.0-RELEASE-SNAPSHOT|10.0的测试版本快照| +|10.0-SNAPSHOT|10.0的正式版本快照| +|10.0|10.0的正式版本| \ No newline at end of file From 736ae24ad4a7381e88b91a65279d9d332e3a101b Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 31 Jul 2018 17:23:28 +0800 Subject: [PATCH 05/40] =?UTF-8?q?10.0=E5=BC=80=E5=8F=91=E5=B7=A5=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/readme.md b/readme.md index c06364e..e61392f 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,11 @@ # 工程配置指南 +## 安装maven + +windows上安装maven参考文档:http://wiki.jikexueyuan.com/project/maven/environment-setup.html + +## 配置开发工程 + 直接使用IntelliJ IDEA打开这个目录即可。 如果需要复制jar包到webroot/WEB-INF/lib下,可以执行命令:```mvn install``` From d626676bb74aea3d75469e34372de0fe1c1cfb7c Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 31 Jul 2018 19:02:42 +0800 Subject: [PATCH 06/40] =?UTF-8?q?=E6=8F=92=E4=BB=B6=E6=89=93=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin-function/build/assembly/zip.xml | 21 ++++++++++ plugins/plugin-function/plugin.xml | 17 +++++++++ plugins/plugin-function/pom.xml | 38 +++++++++++++++++++ .../src/main/java/com/fr/plugin/MyAbs.java | 25 ++++++++++++ plugins/pom.xml | 17 +++++++++ pom.xml | 3 ++ 6 files changed, 121 insertions(+) create mode 100644 plugins/plugin-function/build/assembly/zip.xml create mode 100644 plugins/plugin-function/plugin.xml create mode 100644 plugins/plugin-function/pom.xml create mode 100644 plugins/plugin-function/src/main/java/com/fr/plugin/MyAbs.java create mode 100644 plugins/pom.xml diff --git a/plugins/plugin-function/build/assembly/zip.xml b/plugins/plugin-function/build/assembly/zip.xml new file mode 100644 index 0000000..11da522 --- /dev/null +++ b/plugins/plugin-function/build/assembly/zip.xml @@ -0,0 +1,21 @@ + + + Project.release + + zip + + true + + + target/classes + /bin + + + + + true + / + runtime + + + \ No newline at end of file diff --git a/plugins/plugin-function/plugin.xml b/plugins/plugin-function/plugin.xml new file mode 100644 index 0000000..a7553ec --- /dev/null +++ b/plugins/plugin-function/plugin.xml @@ -0,0 +1,17 @@ + + com.fr.plugin.test + + yes + 1.0 + 10.0 + 2018-07-31 + author + + + [2018-07-31]初始化插件。
+ ]]>
+ + + +
\ No newline at end of file diff --git a/plugins/plugin-function/pom.xml b/plugins/plugin-function/pom.xml new file mode 100644 index 0000000..5741a87 --- /dev/null +++ b/plugins/plugin-function/pom.xml @@ -0,0 +1,38 @@ + + + 4.0.0 + + + com.fr.plugin + plugins + 1.0 + + jar + plugin-function + + + + org.apache.maven.plugins + maven-assembly-plugin + 2.5.4 + + + make-zip + install + + single + + + + + false + + build/assembly/zip.xml + + + + + + \ No newline at end of file diff --git a/plugins/plugin-function/src/main/java/com/fr/plugin/MyAbs.java b/plugins/plugin-function/src/main/java/com/fr/plugin/MyAbs.java new file mode 100644 index 0000000..6e2b94a --- /dev/null +++ b/plugins/plugin-function/src/main/java/com/fr/plugin/MyAbs.java @@ -0,0 +1,25 @@ +package com.fr.plugin; + +import com.fr.general.FArray; +import com.fr.general.GeneralUtils; +import com.fr.script.AbstractFunction; +import com.fr.stable.ArrayUtils; +import com.fr.stable.Primitive; + +public class MyAbs extends AbstractFunction { + + public Object run(Object[] args) { + int len = ArrayUtils.getLength(args); + if (len == 0) { + return Primitive.ERROR_VALUE; + } else if (len == 1) { + return Math.abs(GeneralUtils.objectToNumber(args[0]).doubleValue()); + } else { + FArray result = new FArray(); + for (Object arg : args) { + result.add(GeneralUtils.objectToNumber(arg).doubleValue()); + } + } + return Primitive.ERROR_VALUE; + } +} diff --git a/plugins/pom.xml b/plugins/pom.xml new file mode 100644 index 0000000..7f90545 --- /dev/null +++ b/plugins/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + + + com.fr.plugin + starter + 1.0 + + pom + plugins + + plugin-function + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index ae29149..1999707 100644 --- a/pom.xml +++ b/pom.xml @@ -8,6 +8,9 @@ 10.0-RELEASE-SNAPSHOT + + plugins + From 522200e7734236a8f9f01dfd3b25c19adaa598ce Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 31 Jul 2018 19:32:15 +0800 Subject: [PATCH 07/40] =?UTF-8?q?=E6=8F=92=E4=BB=B6=E6=89=93=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/plugin-function/build.xml | 126 ++++++++++++++++++ .../plugin-function/build/assembly/zip.xml | 21 --- plugins/plugin-function/plugin.xml | 2 +- plugins/plugin-function/pom.xml | 24 ---- .../src/main/java/com/fr/plugin/MyAbs.java | 5 + 5 files changed, 132 insertions(+), 46 deletions(-) create mode 100644 plugins/plugin-function/build.xml delete mode 100644 plugins/plugin-function/build/assembly/zip.xml diff --git a/plugins/plugin-function/build.xml b/plugins/plugin-function/build.xml new file mode 100644 index 0000000..59ae0c1 --- /dev/null +++ b/plugins/plugin-function/build.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/plugin-function/build/assembly/zip.xml b/plugins/plugin-function/build/assembly/zip.xml deleted file mode 100644 index 11da522..0000000 --- a/plugins/plugin-function/build/assembly/zip.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - Project.release - - zip - - true - - - target/classes - /bin - - - - - true - / - runtime - - - \ No newline at end of file diff --git a/plugins/plugin-function/plugin.xml b/plugins/plugin-function/plugin.xml index a7553ec..4816b1a 100644 --- a/plugins/plugin-function/plugin.xml +++ b/plugins/plugin-function/plugin.xml @@ -1,5 +1,5 @@ - com.fr.plugin.test + com.fr.plugin.function.test yes 1.0 diff --git a/plugins/plugin-function/pom.xml b/plugins/plugin-function/pom.xml index 5741a87..ada9db6 100644 --- a/plugins/plugin-function/pom.xml +++ b/plugins/plugin-function/pom.xml @@ -11,28 +11,4 @@ jar plugin-function - - - - org.apache.maven.plugins - maven-assembly-plugin - 2.5.4 - - - make-zip - install - - single - - - - - false - - build/assembly/zip.xml - - - - - \ No newline at end of file diff --git a/plugins/plugin-function/src/main/java/com/fr/plugin/MyAbs.java b/plugins/plugin-function/src/main/java/com/fr/plugin/MyAbs.java index 6e2b94a..78dab4c 100644 --- a/plugins/plugin-function/src/main/java/com/fr/plugin/MyAbs.java +++ b/plugins/plugin-function/src/main/java/com/fr/plugin/MyAbs.java @@ -2,12 +2,17 @@ package com.fr.plugin; import com.fr.general.FArray; import com.fr.general.GeneralUtils; +import com.fr.intelli.record.Focus; +import com.fr.intelli.record.Original; +import com.fr.record.analyzer.EnableMetrics; import com.fr.script.AbstractFunction; import com.fr.stable.ArrayUtils; import com.fr.stable.Primitive; +@EnableMetrics public class MyAbs extends AbstractFunction { + @Focus(id = "com.fr.plugin.function.test", text = "Function description", source = Original.PLUGIN) public Object run(Object[] args) { int len = ArrayUtils.getLength(args); if (len == 0) { From 763032df10de4cdcd525a314aa61be314d3c354b Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 31 Jul 2018 19:40:31 +0800 Subject: [PATCH 08/40] =?UTF-8?q?=E9=87=8D=E6=96=B0=E7=BB=84=E7=BB=87?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- learner/pom.xml | 14 ++++++++++++++ .../src}/main/java/com/fr/learn/Leaner.java | 0 .../src}/main/java/com/fr/learn/Learner4Debug.java | 0 pom.xml | 1 + 4 files changed, 15 insertions(+) create mode 100644 learner/pom.xml rename {src => learner/src}/main/java/com/fr/learn/Leaner.java (100%) rename {src => learner/src}/main/java/com/fr/learn/Learner4Debug.java (100%) diff --git a/learner/pom.xml b/learner/pom.xml new file mode 100644 index 0000000..c2ad921 --- /dev/null +++ b/learner/pom.xml @@ -0,0 +1,14 @@ + + + 4.0.0 + + + com.fr.plugin + starter + 1.0 + + pom + learner + \ No newline at end of file diff --git a/src/main/java/com/fr/learn/Leaner.java b/learner/src/main/java/com/fr/learn/Leaner.java similarity index 100% rename from src/main/java/com/fr/learn/Leaner.java rename to learner/src/main/java/com/fr/learn/Leaner.java diff --git a/src/main/java/com/fr/learn/Learner4Debug.java b/learner/src/main/java/com/fr/learn/Learner4Debug.java similarity index 100% rename from src/main/java/com/fr/learn/Learner4Debug.java rename to learner/src/main/java/com/fr/learn/Learner4Debug.java diff --git a/pom.xml b/pom.xml index 1999707..dce1f24 100644 --- a/pom.xml +++ b/pom.xml @@ -10,6 +10,7 @@ plugins + learner From c7b3eb9b03ab0539aa0cb7cc9524bcb0b20fdbd9 Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 31 Jul 2018 19:59:41 +0800 Subject: [PATCH 09/40] =?UTF-8?q?=E9=87=8D=E6=96=B0=E7=BB=84=E7=BB=87?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- download/temp.zip | Bin 0 -> 333736 bytes learner/pom.xml | 14 ------------ pom.xml | 20 +++++++++++++++++- .../main/java/com/fr/learn/Leaner.java | 0 .../main/java/com/fr/learn/Learner4Debug.java | 0 6 files changed, 21 insertions(+), 16 deletions(-) create mode 100644 download/temp.zip delete mode 100644 learner/pom.xml rename {learner/src => src}/main/java/com/fr/learn/Leaner.java (100%) rename {learner/src => src}/main/java/com/fr/learn/Learner4Debug.java (100%) diff --git a/.gitignore b/.gitignore index 9094724..17b07ff 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.iml .idea/ -/target/ \ No newline at end of file +/target/ +/download/ \ No newline at end of file diff --git a/download/temp.zip b/download/temp.zip new file mode 100644 index 0000000000000000000000000000000000000000..e021cf388deca3cd7287a927e5937aed8d274194 GIT binary patch literal 333736 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%0ApzusRyfVt z;?_RWe!nJ7qLN@WhV4`8Da^8?t}17hw72(EMdwB@K4LH`c}f|gBno#nsjsEXw@wy8fRz`# z>g2w5v9q+W{uq&ygkRpf>7bTfFt$gyo!q^>Q&GrCY^V2YeCWaGVB;?~c&Ch4TMJ)7 zb&db6@is+&i&9rU^ukz1z;{RnwU0<(!oX z9*TGEl8lVtc9=V1Us+H+qcTTCLi)zLrRRG+A2WXxlGLP&nm&828bv0|RvJTO?VX}? zUB4I|Qb^!^`(_pVeK}_*=6Exno-TJ3KH^-f%wTV?j0BKUP|$i9YrY6fPCD_SF`wJL z@L^@r?l9F_VKl|Uu3P90>~5X7%Rp4X5V%DBFSn52s9B%viH3*Cz&~lcUz@OKz5+qQd2wbb zcCR@o=iGqOap1cnt4VYZzGf?2oJWqWw^%<7Cl+-=$yNo59b-_Ws=<}6IOddOt7Ly&b5 z{5t{{j#zy^tWpqC+~U{LpdizE3u_gKL?s0~gw!sMSGv;>uUbptx;IRyuAsuaQc_zW zQE-!8zC2;gcR|U*fm8x_p#CNfDrz#-5%{J8as!mH(<^LcLZsEEN??4I2~NF}RIjFd z$6Ug$mYZlL8L)|?vvh3EH&_FNSQM{HpDD_G$P{4m!bkI6zD{6>K+MzAH(J?lD0-N@ zrH<^a;r8-f4GnLwMnBu$Sb3w$7(+vZwn+MJerLkle1U5fMB)z=o(#|@78u!fPOl;!$alHo)3$Gnp~@Ud6QMVRGTha(KcKZILc&&nW-Ul z`9o`kmxUIO0+7p2`Mu;FCojWV07*nmSN}AIia6`}_Q{pTFL#V3?HfnVoOyUx{lG;@ zS#f&^pKrCrYF)b9qDuUL65Va!Scpk@INvjfNLxR87lX=p(@7z0pKu5&%6V3$&5i-= z_HKyxsIzt7A{B)lt8A}Oi{}A2Kqn70V=^#tU zjA+6wk#QI++t$F@TC+E?An?FDRX_P4X{PtfCL9q>MxN>%T>=?5>IW)uJBh0uL^E1b zisOY|U2}DfXw=n>`Wqt{P+9Exc@`db3O`zk*g%wng@qvz6V)&MJ*1*ZF?m$UaL*~z zyFM#rV}(j4S>=t!ECk6H8#dqq{zDH|^OGHs5il&O9~0Zu0zXa4G)`o%TB|u&R9xVX zg)mh?RfRzpO}UI&F1g;UqMfwWZn(T&s!FyaBkx!Ri81J~EJ%^?&Mc3ab-=YuR^7jI1~!}H>h0trA= z2Q|^d9u`8_`<7j6C$|Aujatys61fUO;Rkt4cFE!hn;BVwF5$diCAHNBJH_(hOqFVB z(r$1Bk`h4p#&wudH-<9#}S%F+m+)kXh>gv?~mDJc*JD5dpYqnNktf2ZOxYfujH0bKj~7kFP*KC%ebu~ z>V!PluO8*Q`BI!GImB_6drOtlFNS~0>As(TmSAph|K$^ctC@6))q{sFkBFV?$BtUB z`z;D-*=#1om7Rvj6z&Xm)geM`vVEPE$0(pKKcvhL+Efy=KxfuEKh&|&T)?=lA$wVY zUNT^jS9DYxPe}opO4y`z_s|W`y}*y7YcA(#UthO5_9%Vwg^p%3XgROeW;GfKT5!BT|S!-C2&JMWEU2rt^O`g)SUYm&G z-zdsXPKH3oMa~w73*`Bl%hu7GkR?CkT4lB@g%& znvNIyCUPNSnO7$&x6nE(rVPK{r@IWCrNkreLk25Fx*Sx%p1!57wH2tQ3_JSLbm+>I zvx(DZnO6MLvcDubWu$CDzOp4>a)C0j1+3a**l+2W+O)mt6I-eyc$#p%eOeI;sU`+# zLaeoXXo28bq7b#F{=VD`SdSC*c}^-`=`jZmV9lNIT_zYg76;LCQ*on?j?F`z(Z&Bb z3o3N;0YZFTOLn)a4$xcF@U)p=v@`v4k(C*k0ASlJT&Z*6ukO>_;q|(@5SY1LFT(P3 zk7^5WVviM+IyM;BYm=YO%Ej8W+42-hT$QJhET(gIURps3t^;cevr1bNN#M^S_c+UW zQ1b`YIBRNNlp(CE5JPlX%p}P~!8S>{S?iQ^TU1tRJyW>Uc)4i^#cqCr@5O#v?n;QT ze3O$O+0vi1oFnZw<00+B3c}9jbb2{-PcIGYubhs2lD_cm?(wvHNp??g%DLoz47V{% z%;w%9g+V`{b?#85TYJYw|CH>boy6w3L!Q$%Jy#*>g|;y8>f;6dPb^o*^UjXwY?D=R z0aQzg*T%ukx9pV`Qx}B;;q_d_uuD{`8>GWJeinKZ@=h>9Pf4VKHo7TqephndP$g6d zxqDYqbC7-G2PBaKh_)bQ5^51!n&IuP5tFQoVx`S=9p|WA&V^KV7AflLZBu3(&fNra=eVyi^k4T8#@fC zDt?+go>-IB%${Gyk~@uj;w+2Q6fQfEcSJXgwCTw^QNadV%ybEt(^6U>p`E{vN}m74 zVM~ z{*!+W$;Y(B5ApAS>;siJh(b}g^;4S*dN;KN_V)%Z;yZ9yK#5G_kjy)vl|6obnVAC9 zMt`YAypzs~EOU2BFPVk`SY;3rnA#W3EbI5C=4 zbV{S}sBkGGqk5^NRK(FgE0$K89_9v?86~L*K1~L z?m^65BTU`sVi2(CMB#*aMqN)r2IlD`#QKg0UCowPRp|zSHLs{!MzzJYJ=D=(^f~Ov zK@V0y>WR9jU0be*j5v?+QY*8K^Hs}-(yPWPB}*K?l{Z%(&sW}8lPVU(wTPf#pbErl z_VeTe&Q5Gp0pW2)OT4}`OeI2QCPjc0w2OJVdmX&6ZzIVmJwF^kTJFAQ_#cYL{92cc z_VG}*IrJCqY~opdyz!DAOGp1kw^mbez2qV30wDNAG}bGji6V=WXAd@I>tAVoFZQW9 zV~VCsVrzJOl-|_ZlRFTH%a)Lp&MXUGd7ex3tafatkuVjhhwDO9+6Ci4RdMi4vCck# z@*Cs2<~N63r6dFM9-*C#!{c`I2JhehaoDfLVdt4l)5s<$y&QIm5KDZ;l)evw&BsLJ z#ZSTj4x*ZtsjsQ^E63m>OFbl3qle$z5JW{gnpIiYOp9?i0Sn+J`vma_K|Io0Z9R?L zfcf++5@!SUmNIh{blM!_u`{83Z|1B|kkhzd*y$WYVU_CQb0v4E-KLrmr>h#l^C;P=0ucTX#=a z?EM|Fa5zUOvUqq%(9jXogdivaSy;(VQuXN=%dE?b3Mxs9tvbfBAgd7+)E;{9#-}SX z%|@NwIU8nTTtc|`Mph1(QULvZ3x&uVbj&A^jJ_IUc()PhFZ$J(1Rgl^1bwIaVPlqV z$K%c3*FIwG^WTQ?X%BMXKR%6mlnm1PO(=(3c% z0*OZRWG&k6cqrHHJ4wigzU&^WIRPi*-|;l(j_5j$eT_c;_9I zh0^lSO!__+zI;LeiVi;LODwqP1|ahL4F_DxRJ-L!MXaQ5W$}OMp-Z8SVAKgp-mh2bC<;-e|IvOySG-oh)W*!yt77XE6? zeA32wERZ-@XL*+6$%#{jVO9t~3oIfNH$)vuI=(B6jhXJkzOVpPgDe@NaO}jM-}PX* zx|+hib9v^wr3>`s)|#eX--i|m=#G=fm;gQ7G20U1yRl`jDQ4wZnBN83ZFC(z&j{0#t28P{$*md5);bFlYk z&@;t+v z#To=CikyM|6EA<~Xm%Hhrk;mHX%xI%RK8!1%ml>)Z)u@at={2OxgWc#*?u8uw^NON zaf#kiSg@DAhlv}E+?Yn!h;lq1;8aKd?ygL4wirH&X`irN7s#jcobCU0a{bNig@o1t z{FY{opYaFW{)f5kN75SWV_$Y-3^FXRPrU9rV zA?sbOkGwH7r|#Mr_rSJW5F3X+Thl;z-IK(M99~tMutL3ANh(c}@O`!Sk;W4wJRjva zKg}5}tHG0~)Udpq9c$8jI>{EE)aGUhN`mXcgWKtDcZ{F3raR1j6;}@47M4%e*6PO_ z_bYzdhh6z`Br)X_ra$||Ia#yDniV&$b56Z}rAxCo(K7T7xQsZ77iJCvPPTPAeQf4u+;A+>Axr1-Kbq0XPdv#Op$K zc8+_>+RXK`6)%*wq%rfO6HePc+#S>S4dR~FO|f0@>a6Tx^T-1fsIkX#wb35?r@ z2@eu?^qD5Y!FU=`!UJd@DI-?=2C3P@!oZ_$zrp6s0x>CoMP{gkzsj+q?y!h3%i@7T zn}_Y~qsTFBN~#62>G#JmLIfrp%|~RL2Scck-!MbbfhdDBi|9uaMx40J7ut2G_-O4k zTy0HX0ayo*QOm&mP6^ANpCFoRq?!uFT(?zUTPl@%Y7aUVrYyBbUBbuDnNJ2K*doV-#bCg@@a`$as&BvB3juoUXAUGz-I|z>6k-T z=3II(&}ken$P^fp>F6XgUD)l4Eha$}%JN~$+g;ItW7{p7!@ZR< z=?0|OhNjV1$t7vZz8wu(3(85@h5_V-tCyg&o7NemlbQI-=tDBBM?IOf_$XdntJbN< z;B1J;ULQS3mIb?64Y1_)!0t!21Qzv@MIqf+@Y|RRQA9AgFW_}6fZTnF$Nl3~i@OMq zy!+tN9!O!IpcP*nHY+@X6MPCV008bT_8P&rhy4k+LeyTTSWHJE2__Aa8dERbfq!P7 zWkP<$b$}!@c*wE#YnV#=xOo!JMSN5T26)7gD-iR3PT;7isY$V!{;)oc!zE#J^fhUeHF!iLVnr7 z;5hNv08Ji1!4zFog2>9xlyn9I;&1^jaUqwgWP%R|JaF5EDFl;=n}QlpBh*VREvCYp z44*1CtSM$dU?(XR23kGpik4Ayut`?X@*a}b5$8W*38abUd<3?biv?2%w>xkK8#HLZ zc^7IPGZ?0BV!v;Bk!rC$_7FEHbK~94V2>Rf2d|RtqZ&8pQMp_1uIbb=FyS#kLH<$UJBu z2hUb@PrX>ku0HBdqlhotAJ?!kCj6a-F}J|@LTR)n63<+@)%)!*n+`U8qD$2bZstut zFw%sE6I4T^QlAPv4)U`M#2e!#&lQ=0+0rCMl zSN!rl_cSWM4@+W5N$B7j`NKhVyb2~0*P&Dr{#4+}5}I?ZQ1l3uWl9w(HwU;F1Fb3i z5D9+7=*b{Q&-1^Mqy&=BGw`-)(&VRKQpy**>Wm$J$DyJS5rs0vN)$_Wekx!jKh6Jd zWSvuxFgmoQ+qP}~ZQHhO+qP}nwr$(CZM*xPd7HVDs^mRYsiao+Uf=2}*QzbrS!JfX zmvE6c(aa-|1^<+Y zi}yLM0;qk(M^5v(HZM#uJt>M(0rAAvB(=d}{Bfh<{`Ps;BM1(pef=O;x|ZZ1_14|> zG5Sf2YI`Gy{x85Z1P}I$9puHO^jp0)dk603yZG}u!_3s-P_vu3%U}Tb`t~g?ME!G= zQVQI9`~fSdHuyW}m_kM;T?0J*74QNyEC;jdGH(AX5FS92wDI!h%2WLnB&H#HJi3wQ z8CdY$2z#~|rdHacAOhTjwx?E$ApJX-G!m39Lef}Z5*YP$9+MR$w0j=$?G-%@hSW^zk>XI7>~9%=Px=y~W+tAQ;xF2BWpS`aW&&p&W*k<}KJu;K2b zMxu*rf-{Qtgng@X(pS$S;sy6b2HAg#eRjJULUUKSr|`G@pJA$qs_zBs_6e#ujRIrL zZo@!fIN=0~Z+4~t--B!k7p9%$wJqGM9DZU1R}=L%5RK07yhVBN1Tue3{%n=vwmDlZ zs=b1=2PczqqTimnpaItWCuT%_%_3WgqWGx|2g%DsbsVi)CB8FiruhKYH9k+RXYMvK zr4RY^>wr~N)>PETX)xY0_ucqU%fMz@4Axk4r9M9zzUZ|^)02!)GpC>6@2)} zs-ZE>UDstj>V(xi8R4-Ti?JUGo{i)7QH_hlOtL63|C)7;sRU)VX3j^f5|5txLWj$0 zqwP{*F180ohdh~NO7}kVhk4gUtn$jAyuAb+(7uMT#m!XNqo0B(veSryhau*Ut7db# zG6=b}4>xo~^G=3ACoI5ng|JoAL0`m{N7k3lu<$`T8&?CES94NrCO%P1N$9>3a$i)c zmh4n{nO~uSp*%e!D;Ew(}>;Hvfi^eIF9sHX$=iYc*7Mkm#D znu)~cm(}b`_=_X-lhU(bC}IYa0Ck$+gyFe?8j#O-?VgK>f1`nD-1uWH$lR>#4T2C+ zq04a#(7tQU4Oht!VaCypoTB$|>rq>{F4T?&l_s1<9O>iBQZT*7*E+-TaI+~l%4LT{ z<7Zb}P#f+tY-O*@t?``YtFXPA08V7C^Vo=*HsRH94Wx4s6?$nYGWd zwx{pMcey@_(if7+$zXR#-GQVW>RX2&pE)%XLY;euR^vX*?lE1+@oBk{rV7r8`C)~G z9Lwu(vYgFN3B1*x&`oc!IE_6nN6Zk9e`Qq`m)r?6`Ifi`!mpF%MJgGILX0T9f*0HT zZLs9i4Pmn`ngMrG@qtIP*P(dJ7cR-`P$r$>;4dCQktb*mA60uv(0U{C!G50XXk;G{ zvql~Uu1Z$Z)Y!4JL>Z{$In6|A)9Od+Bd933z@~or(xH8`dPi)lT5|uff9_@qRvu`A zfHqzSN2lA37mg_=uP?sPTX5G33^QW9@mLe5$mO5TtS)G`aU4Rpp!i4YSdhqCVY5W4 zzbJ>b8@}ys?#?iBx0Mjk!$qP#FvE8SaO8f?olaIOShI30oDB7SyR;%6joPw$+9Fn( z2+1r<8lz6my$*dOUF6dEWJVDKR7CCT_wX^49K_|-y?F(uV+h;hA&3Mat*9(CNGD0H zaKZy9*4Wm^D_b+oSApsx)*iDhpZLA-%TkFoFJB?JG1<-r(8Q3z3JJ4DL7ith4-pZ| zE^#*4`dWU^rL)A6(*Zf_L@aB2&3Liu>-pBdhG)PdA_BZ;$JVElR*Y80mzF`pWkk1* zcB$y#+ibgH`tNF!fFx%(_rlbWX0nq+c(bNXC$jFtQ@cT$(ElwrRFQb^`!BW`b5ScL zj@ic}v*Ht%V1%`V@&}~u_||Or;+Mwc$IPUFhO3gO(<~UBk$bk)g^YHBitU=Fkim8y z_*k^O&u)jMHod+zh0yJfY+Y*rS0g@$RVc9VrKQM6=oC>i)K_u20L$r3LtZomUoNoC zi2VWgW1?F5AY_$w%un*L$+rwG8rBB0ShCw@TjX=aTRJ%K_Umd=(zTnWm1vJ&&L+`x zd|k8tLC|+0jz8XiZh3jGGO6t3sp9dzXy0j7%gPvrqwC)=q1HKI!htz`bonBXc69gp zH2OIVV;=%1{U+m475qd{?))aw?;$~;1pC<<0Ex*q?Ff8Luc!J2V*^OPbGtMju97xR zOM7)76!+(QNmVG@+S(Ibv2_SLB`;O$7CO!10Zj$J97rI)Sb4^WZKYWOFvh1v|4tFi5jn(zPiMJ0vT_ED$wwfWzZlF8|xo+$YwXV-crA`enZ zTc~;dufr1H^agXrGl$9&?~PI|Oulsb0dV6&CQqvt_6H|wu5R6KPjz6upmnPlK957?EQh>%~8Jg_g1xb&fb zd5XRmY_5vD)i%xVyT-7AtO*tr!5Bmz$;xaYd`G25x$BTJv;jw^bjkuc1Trl;2!d3q zhQV{Yn&*d(kNK_I>AFZAULE$c$#M~NdkZOHlD;ER8apzqG%1WR;YLIpiaj|GpHZXjw4^9f`6VXnZ&(esZy z-d`2?<1Mat#^ysCS}8E}*$i+`hxk>}uxU$uAFxC7gD*iDnQyUEv~?-wKL_ z_&IP-ICpa}=9t0Y3wsnJX6d8@KwgZfr%5Gx;`$5g&V&d$Pnx9>lgk7ZtknLLLpD~f zAQjiAZN`Kx+3jf(%7<>LR_TvVzyL?rQLs*prSFo;t8x+r^k-o%vltmrM__J8l9}y z$#eq6b=J-QnpR#s@3f~7-nxK?%Rd$(Mg{6X?kJ;{!y0tbL$;4VL? ziW_Q8$tWIY2RZ#C^ku5mbyISv6o49i%Bi+yx5OzE>#Oz$P!a(KAi~-U;!7)k_xm3P zu)}ziTL8>~K3Y_qZR1S%jUE_^9&&d5$rHo>QzuF|z>3$l9|Ecnt!IACkOLdl9{AlKPGWTwbjs5I|ixe9h@hOo{g3kCuzi>-H1D%QC43hJf- z1)vC9i%SmbYLLu553L)5;-pAtquMr|ujI&aKNdl%Rci!?uBcT{C# zUy?R)S{d8H$Y@}6YzczEi?N!EuBHpJ}Akpk0N zSzUm9#l@Fv-c0#xbDKQ{ecd{;{#H+XJxZ5Mps!5)oHd1+)n68(_8^T+)Yh$Y5&cyY zLXCrD>n`p;pHrIJA@JnLs#V3UUFdCm;5+0tSYF5tq}yXQoxh0}CD>Efui53h$3qa> zuQrZBZ~|*iTg&y^7@&rgDW}#LrYc!6tqkk>0X2oQu(nobBzCF(GxDF(7y8p51)G8C z5NVMRmvuOku5;{v{(!?UG|(H#UmssvKaecIY%i5%x)+%@_(Jv|cuq{>vKEbuAuZi4gI?q~K<*@6 zZa|(@#XB_BLZRl~i8I8MJOgwe-=4F!bY(dEp|oQ`T#F2sD76S@aJ!K5nCcDDa z1ET8A7EeRu zSx8H!I~rCax}J6rkki+BYGP%G?W-_ z3+l5A{~NEh#|qpf@jmyVd0=~1yMKG$^AuFC;$)?C zV)aZ3w(mPTmk6{pE^IpUmZc7TPKXewa&fKgzwEbq@6%yLFq7}%?&-5#)UlA>{xR#p zIm642bVYNgb{CFhcm~)_pJp&r%rnO;Q%__GA=H;`sJyH)EQxEY4OB8`;vkKx*Zp(JPhvD6HfYmKw) z?0_bKGgO`w%_;z18O(f>>1~5a9|46t*o=XQ+o~<7}<+(!UQVZKpNWfp2G6_TVA%E_T&5R|W`p3PA6;3D3##&ZyW~)55 zW_`z=3lFG#&*6G3gW&UK?^({bF^d7e6NM~Vt&gL3QZU8;0OEuTY2*A4gRd~?w7D{( z^jd57MpYWg&EdLHDH^~+NvV=m1)JAk{=3-m+V-zSw~PZ=iFT1>)Ib%x(LgER%by+c=-V~lyaaT!42|A|FyMnOsm z98NLEx5QRMsA!4Bw_^Z~2$C};ocn7?ChsY{*`m) ztZ3N5Evy%M*mz;0?$7A26Q0Xr1T_n37ZR8{VLD2WcZ-3Id!tR#*&1KY4BHi-E~c&OdvcZ z=N^b;QOd89J<$EUDn_ScS1UdGzHh1c*;kIW7N%_PLK#t_vOY+N(G1>?%TQFY zeG*?`LtJsD&n|uai|lw)sey!nSg}>^u0-C!z)O5D+LeS1o|2k7%dXI{mL43Aq~em$ zuL=YuR7kWeL{hK#x=t1eE6)1Vy0F3wFI=FbaRUTFEf>M2!_Y}*d=c;vwv9DiW-F!_ zj7Z)NZwc886M&skofDBpL|Kc)q~P${Rn?G(`^z?-rD)|T%;|HNd9oN_Z^+^|CeHw2 z>~&lmAdZ4k`P)&=Dj@eNbXSJ2E_+Uc)wx=7ROi+(e~BjloW|nf&fiI~tc7LT{qIC9 zrDV`c+ADLx29E^PmQJvZ{v0t-qWu@fjzbrQN1WJ?%(Z>x&a*pwVFy>zWMID|YW0{F zUb+m+71ovk?o|kx?lWB-?qJEt#2O8LNgcgn*O}KO2fT6V4{qsr^_~Y!XP8R?E!F~M4VWuw9=uLXl^>oM`5$&P7MGV!80Fk!h+}eF0{k4^8Hkwtj%JF84$Cg2w*G(Z<~n!>(C>$cY>cX7FD_Bf~Rq zj4ke=FI0&dpdbi4Rg$?7no4qQJZ^k*wzWET=J)|XF_UaenykwStLjE=Q}yPyM3W6w zubn&L*gc46Lw4G+LGD^tDgzulbTeyA%xg*m!||gn>_r&9_J2Y?%xv}PKg$ODpV3&H z)OYI?WjMT|Dr2{*;a}8InLX8P%c-Bk_kBLQ*qL;Fy#{+esBuCv-4GA>`mTbJ^y&c4xj;>fiF{Ve45Y2yQM3*~*aZid-3qx!9yW^eB9 zWe~*!zE~!_gu}V46lQ$VmJsxcOD~ZkFyw6*_oj2zCxBUPsq>7v!y+|w{ce;Oflrg% zgsRC`Ol_d`n%mX7yq#b>dyZ!t0&lGFn4F%m{=hoA!maHf3@OzbR`w7q%jzEgP8qGR+p8Fb~_reSOU>Kv^rjAM^@_)A+YH zM<aAx9l^Y^jXg6VkUuxNVjr6R&f(~cf7xlKTUg%6bB-`FG zw?`4YZ(1l>Ru*l-C0YqTS89wdMBY4+9su1)0BZcNyQh(VV`H*yr9-#?w6=VHsy^;q zkK#obm(+WhE%CoDM*O}FMG}khq$g`L*no8Zj6hf-k^0{_m0)QBa(E4x5i%JMf7Ee{1s`Zx`0pitk6 zCmA)YT1&b)r8hyR`!joN1ELu)3nWG9y0Aj1B@O3Ec4RIN>2binvWEg#Q^6b9fPs7Ni2 zeB=+8i82FRiKC@6GRstH4owIAT=Fx3=1zx~f0qK#TtJ6-=Hi7hHmfdmOo5j#519#G zVPhavq_ZkoOI}<;O(W5W6SdG>2Y-l=&ddp(lM;=Nq~DWKux)f8;8&$1aHb5Z+gs`{?0fndf}s;$b0_QKLJm~mei1NOH zZAVK+;*m79dQz?riNzAeeuAQ&bzGSh-``k zSjZpam5&&Q^Da~Bf5+C`e4$-5TtrPPv)}D^J7^b^3yjtQl{}c7qqj1+2C_VOnu@pi zWztH08dpOSIn=QDuNJW%GWqOFzFyhX;qkp^?+QG}cTx5ypOx>{ zHxyU%v|YU6zyZ}|`NlOUW4y~Q6#}L`{zN|B8OsManzE;lSoUX4MV6269m^M_le_2W z#?E*jP5d!?RtnDOqyNVSWWZYb!1&69qbt9d*T4S24GJdAB;MnsQ@W18B`zUMYA$m~#Z4 zRlqPa9B5h+JC08|E!g+8H3NEFa`7CJSEu&tj1Vz$wg17~7s?6xD^`ZxPlg@660DTg z|3xRMe0-ZZFs={v%kJxb`GUeTc;PUuSI0Y{?uGh%*HOVMpXB6y{z4{7^d^fV@V+Vr z7BR*4QslKi`sZ%<&lV;MZLhNP!zwC;S*P&sSr@8!g&+zFIcP+(qZzCWZS3t;k$89o zC&aVdfte5o9a!8xPjh^^ZMz8s4@f%>iQ&r^@#qjdNr&(m^3mO-ygo6`c1c>}ko_fa&ms3`+Y8Z?QN zv0K+uZHS*@II`PeD~#MrAbZm*)m%|}U%G@te%o+wt9a{m63?{QG`n3K=vK;%c);~? zifFBLnwW!mjI$0ctCl(4Zh9GZnzpcUN+!N2W+8k@!-5rd7aTjPGQK_Zeed`$L^ypJ zMf|q+PMjHPNdY?i6p$OtoD8HONJ_}9q>Y0$nYgb5o>yN}03yxmj(6i~3xnUql~bG+ zP+!Skf1x=3KLddkK5_Tb02a-TvTAml359CO%v#`#Ijfl^$%}*zCIoZxy!18qO#v@K z)lXD{>a=BAE(f&|aRNf*0dQ7A$BL06CSITR5&!Ou=j_{fQThhfL92#Wf~3ycrm6-7 z2Sb7;nw`7Ad6_q2dY#=G=Enfy$@E!jOg**nlqzv867}DfU@rfA-8~oW}W2`^^sfZ1cY!EKF}7 z+u*jc#LHE#_l1UG@`ZpVR1I+FK%jP%U-woa9yrP1GNUk`h$ZDp9t zL;?nC{N9Xk%A=KC7&^O4`Ix0AOIP@I$9_JI&&JQg?ENjN(~;`NsX71yP$`#AyGQVrujc4m~9g(pTH?QwXvau<ZACnPJ&5^9;-0ou% zEh6R_|9;moG_=aS0SZbd+A6~UFKgsa0KK6NYu2rrPEuYW+Fcs@4_S27n+Vg}90URSpO5~H(H6+b=Y%HGKxR!Lx{yiFJ=UHk?R?x!4|YJGj|9HZqdHvGmb`c-E|5f>OHq?hULFS7T|B)hsGj-Iz;HO?zP< zyF(+3w^)V6TFez6qgGsG$xwB)JMLb{SWjf)(Q?9ZV~>d65f`D&8y(_y&6qS}4OHN} z7W0x}%W($WeK4+kS2wZLxPUpWIWLX#&tK*hDstqWe;0GobNFWYqm_%TZyg|q1N=O5qIi3; zs8#4twycjmAqPOjbh{D)dB1o`?SH0*45^FvEcCb43%HMKqHpIv*6?6mX*6pzzi-rN z=~l~OzEizX+IDg3=g|s4QI+tDAVZSKIx68W&t-Nl`uK(6{J^WY#{@WN~jv)nPuFxUTcP|AG%wJyIgIL-x=Xrl(Y`wEfqK8x+^`e}a$m{YBU`$opml6|>_wQ~kcF68BlJMA80hay643W}|N-KptUqXEf;Pg zN7y{2tYE3#qEidoV z+d|q>-Lz!`gAAIQGromtE8a`f=cHG>5cc$<;^uTk6b>pB>C;BPSj2t@ZJAC4$z z(3?w0Q`woRfb`^be9ho>2Vc^*;nHy{^LSGLDZu-IiNY#)(QL>#Un+V;iO!J2o-q*r8<`{mka$!ljaeR=MxKHt@lzd%5UQsRW%f#S)F4gQ}goPM-sMMsX zWe!$UTf?Q|rLB?EGhqziS|`z9u!)Mvd=t{$Lev4q#E`$M!xBdj2h?;US4ou>yKm%3 zkdQz!yhG)@Y*%^2m6Nuy`UOg#$P0g3s?Om3g^a4ScS{ZRuG`+z^}u|tr1w1dg#S=E zzmDG1@Q`lGG(LOafOYxWzVa^Z$1KiTmfV@Stvdq=$IP+Ajn`coQZIUwYTn8*3Ys>FazmjWU>F{=5r`q90r0Wk5twE z(<&v+Jqf&mrhbv6=6do_dKlV9Uz)Scy5-K6ZK-a%IImWg2NX?VF~KdN@iFoF3R{{T zZL_dxY}36!nC3so&g&3qNN4j?1hlkB;o}t}h%w56jDAtu8@ggdLa3r9#9Xwvm;g1G&YGFGzd)`W28@ud+d3l8 zvNPhCrtNaaHfxXZ@Id4EFv^6p>by}gKk;4`6aQR3F95TrCNS|fteS?_2$p!rM%h<` z`eIRMD&05)E@KTlAEP7I)H-zVVys2EnC#>M^az?rMJvU>4DJoK^TUXVK%x)EC}(5cR@#xdG z7g)jxgQG$+VR}o$1#(xaUV}rX`P(2LF~H-lgr|kZI+P)t{D}5l_F4^IY^e*))%Ow7^dP3;f6KLTVFFP8QcFUtd=rvYE zD|$=pyv40Fs-EIK$eSk;F<-t=-uX-`4#rSp881nwZd&smoVf#nu zu@7rq6zr_m@+JOiYPol73cY43x7-$Qx{NY$UQ0()o3vbgRcrb2!jU5IZoqv0sqI#` z`J6gC_?kJ*?G5^EI}a(9H+d==#H4gC5|PJVZKn6lYF95M3fNMK0enKAur|NIx5EnM zf3-pUb4_LB4jPkJ;btA~EDV!qaTz4;zWvO=XU*XF$?X4Z zL4~yTz*ji+&qLH)n(o&ce%_JcJS6MeF91a6Gtg-@!|Uk(Sn=5c7`Ti$pZSc5F>VqT z@Z4m)jJt6#>Be^M9gV+BG5aob9|LS z=)a3zqwPV2R>2Lan7MUa(r=Gq*c$ouZD9-rB^(U2XK`a-o;JfcZR!}vPSszSt~>wL zubNSkLK8nnB6_w^3D#jS_(x;(>mUM;i;J6(6yMecD~rZ6 z6N`JUflBBVMKa2CD?E54x)^U<1zz){T=C$NwBSE=mUt27>&>V0)@6_^3SyB~l|8>< zhwpcu+c;i!w{{ucEq3{>U?f+1$#wlX>Eb&Xoq~ain2cP96vgEhS;3%K-^4_L7`&SL z_9?GRr4|8>Zm#TwwYUJs`li=fzbT4DH8!_&mA)*!7lacaAZ^M#*^uGG@`Dn?<-lHu z?v`~>W&29*-7t@z_bpOTnsjx%XS$iFWRM=Y7*VG58hMxDxPd9lGmw!t`p|C)_t=HT z*Z=ues_WcI?J$RFMEOFbG&Viw-l5tc&ZpMp?W}&(lf@R>zhs{E$FoHI&Utz5D|-1V zEdVy!dF-b-E5i!SuDuauI>O_d*}9l|Tn$md${Mv6AseE8YNVmzbrm_SK=57=9;M0L z1;XrttTcZs_jK3Ja&kXyYfrpWnOH}N(XkvoCHW5dAk9iZvDz=*r@rI5M)ssZkMYnt zD#a9B4{Qcc@KQ-lytj|;!s@8!sONS)efqvOO9q0zJEvClX>=Vez47zJJ&&iV2 zS}|CR)Ouik_!d^!Gt$7+M>?4#;V@6epfaV81;wLX%#>oUuEVgS*`+t3Cjd9j%W{Be zt&)`G_k+c5I#lGFEX6XR<*_Cmgd{IHjJgs%GIRg{*HY=FQXfFPpsEP-AxWj6+=iSy zl_K&CV;hjVKCXocH2-3W-#=7c{Qx$Y^TK%cnR&RSp|}x?W90-pFxRw8XIRzKK%mG)R!BU-DweR7nX?d5Pz|L~ zub-av4vo zDTxZWIQ%_yAGsRIsg23j`)0`U05UM_hSUA$1@d1J$pmKP*KuCd&*4E+7ik_WQ$0%LE+R&sEPlk22(mhfx)JPZ@JHXd3=2zJK zAOtdtp`14hjmB_U&SRbKI8M549hKH`t-kFh&!S7R9yC94gEL;q5jN4ali^98!bbr9 z>5+g8JTCwa#cpa`?P02ouFj z-D8GFa2w3URj$)u@0j9VB;?%?G#;!yuI5CYpqaiMf{el^PC_I z35xhI7lV(>G$_0sq2H>p(S2jUS@XFAJw6c-USOs=<09OAhuoxWQS}CGK)54SR{f$+ zZ9I~|^myugvrrCVZirVLk;z2OokS&0_J8q)sLa7ER_(kYYpWFfGp(vvc?M!63#SC+ zB_obUTC7OIC@o#olLK^(yE9eZ4z4sqJyr@Rvu$}I9*gAfR84bSf!%X zf5RTTyMyW;1-_T6J`ChTOGHJlziTd`##XdhV|w}4hfWBp6bj1G|5DzOxfR?yMEVt* zrAwh9!Si@zoF+~IMZgFP!qGC_jQ$8X5ezaj7Z^GAsr}+4?~)X3km{bRDlK)3)KvY% zB2|9;$uHgZA>S8d;t8}cSfW(6ZFgFhl0(oh&2HuTxoky(W|~eB%bnlb3^pMyZ6vZW z+5|49PcuarTc1*152;wcj{Q4e;Mk$`^2Md2per#(xy04_OG>yN*Kc)MUX96oV`;$k z)fJ(0w=27iAgjYaA`@OR-3yOldyomqS682%%P3eN!9;Ze^Yk)19K!YHRDPj`qqk}i zg;04yY9E6sXLW!6OUu3Qt`e`ULja--GwaA{p#TX7LdOF}w?SY2DlcWv(&z$fn$m>^ zuU+1zTlyWZFg0+No}}d-Q;f*lWOjWSOcsjnzo%o~&{Jj#DYYl;o}m-v;7d#EKzly} znGxPf)fSb0B^KKTLM?SJGWJ|1(cw4zybKeIi&m~1)+3_mZQ`XgC>J09dBFx@5}!rv zfJp(i1px|S&+VB`!7u~o1KF~YmcIS(-oPMtmz5kL15ZynYHrhLqsx<65{csB z7GiviIKc;18#;8-_|nzSC@Z$Dumw&z`!D-t|5jL*tovac(V98G3Z%`CS#-RwPT)}% zc6M1;uw(H<(?aj<1K+zw$;cdgFbkGlC~swk%ax1Ug7FXPK7A1|*KY}TRUOhTqu4Zra-cp|FF?3%;1ErKx=j)O(-e1`E%bEE z4T?j$jz6!|x9u)wff?6$&(W`6#I`xA7jDkV=t?`@s$8|>1*=E%{p&lnZsP5mZAKzd>!!_P2h^-~;SD2C2hLda5B7QrJ~$&ZW^F2J)HUFQGtc>qv$YbW93X^O37t$+`(ZCeUOtYrPuL*ZP?@Cl;f!q9qXDIP=U%YaDlwE4Bmd)nMKHkJ z4g%)>7s2rL-^Bg@*u7>JwtD{;!Pg|&N?B=-AUfsH;G1SpmPG7vEWjFJfi z1tK^K2{D~Llp<7Mp1(axkd`c-0LYY}C;>|Zo7Sb89nIl@#E~*+o|8$kA}4lqieF$# zv$I;$^2Wer_21I(x>sF`-}ReE-`kgKAiFL`#uSh`KR!UW-(PQCot=Y&gQexpguhc)Rlp+T*kE zoXa^-YA$F#=3#nz);1U0M^!Ni;6pT>(OC!XgfR5VETOi((zbIif$`6p2-HgCWs=Z4 ztS^T3GI%cbA^#RB|FqC=21XhkdIDSk0ZMm+`ag_#AL413_)NUf&R^G;N#1`2g^Yxp z*u(!S@@t6{4D?fn3eQz}lPQ}fE{h24xNDyRZ_*UdJLSkZrO!M)=bjmAzOD39Yb_*{ z+0vyN{Swr%OADfzzguBDH!9yF6NS{iX>GC`q0MV##&>Z~qkHK*<6C!1S-&BsCs2ew z3=-xFS0>e3aJ{hgPI(Lmm$)AzD2IIYpH}}KWPw!+cBSO+cyt3lz%1En>jnzf6V@~N zTC0M*bJg7W2jNa;H`sy?Ax>6_@+Z=wia5q|DBHv&aT_NH+YVM^eNMp?;F%Di<(lI) zMBRNCKeoNim)$>dj>1O95YUz{tN?3%)oV%x%-9#U7d;sZKIt#|Fr+-_0SDzUCNT!S zp+qHGnMB%n!k?0vW(}}HT&Z3jso3quQ$gBDsY>@!pSNE2Md|VTNx*Z+Y#-gb8>DLu zu-hy}=xZ_?^&WNL>@Yrree3yrOFpn+(p}foYHB4piAn_3Wh~Wg9a1^@V&@Z6hSfs@ zgxL7}gAKhUafC`6iBHKP+wk=x98OsIYb zsb8GIs}=j!2cCLfTp%{kz42Xn>Heh3GfGMH8vD~fJTc$z6xhyPn~C@Vt^=blt&yYf z;Cj$iLFFhJANW&(<4?KDv`D`lun=#%EQNr}TX&gmxgqN6Z+eO&GqcA2A}l>Dw?J+c zBQ(~h>r{RWPsF15HQAX;M#kUmeffa+9UXFklJJ-jlOr0NFwkq=x z=x$s+ogK2Z?Uv#e(;=n8fjl{6WF1pqXR8%c7d$pnQIrWi&bF3nUN9iMNb0r6ssBFO zK!eA?dL$NhIfh-^nu8j9i;cP-Y+eY&81eKPPxT*yC~2OQlM0YhTf3SW#ezBjxp6o5 zM^{Xa6pKtsd+0a!TbySElqcLQBCMa+YhZU+)fwq@<=zWEfu)aL;;1}_th}PNC9d7o zyXA)bWF00^J%nExc~vBsr5+RRwo-_w(B zVk~KFB$AAgONPHLK?cJ+p#kpCKm5Z?oGj6J@&2y)`lqzq%~g|^PS{a{2ZKB;PeN+=l6;uD7uwRCSbOvbgG0x~juBg!Zb`xunF8lBO z-iM>hQqFg*I(^{gRJ=O~T`;+#4{a6+8gvMHV6Sf={XbU;k!rewtITv}Q)@FuR9Sqk zq`agcm<1fJ!?~3XHpEQD=H&8K5A=UGld}H|b^eiq7u!;ggW+G^4;p=CH!}sJubIWp zepc*UMVp4pzvIYU*Itgl&DTPi#lu4Ilr%JU&Q-FVqct9qm|7cy(mZi>FEfFhDFS~6 z$ES*&0zca9n$tBMGmmak@N15W@0hj^CEV6w9FjhXK_Nb-D1ob4VbB$GD%q_jO`3}$ zM#mX9+S?@Am0E`$TU##fBYF$$oEo(WNCT!9G5Qw)?zsk7RRE(0r3PA=qp6}8pQ>;;r6{(IEd-$l{a4=B*r zf6JE&=+f7>mDbn)64lq|uF%(CkIk@|^v*9?U$xY%)qHg1E`@W288w9?JB7)0jn%K? z^UmeYk8?e(9p#tf((*#blk;8dyWI!$@$H!whx)!kQ^WREr12olFAr+sh|dX#35ZYz zz=HsJ@NE3Pa|9zdOvEyIM?Ck#6l`gI-=KlxB-z#0zyd2FL zRm@!++?-9#LAR6rA0qt!lld2uS6E)P;Zbz9HU}a0ii-dRGnw7U;6P_+q<|L+nbt8iwS@zF<4uh@o+P9i;0S} zFo_DYFf%iYvk7yGFo|#pi*bsGGjXxAbMP_#kEQ<`Witm;H#?BT|4=sjLz(&iMfpFL z{)eWF|3lUP1&9BWDeM2u^nWb3JAYC z1yIS#!PUXV%E1vRDhgy_VrBzU$s3zm+rM6<{)^y$S@b)S82?)+{T-)_{{*T4JZRaHQ`3Ax zQBu1MK>=XC4Gbm?E$@dQjS3b4UWQ_z&HB`2$S)rrk9RygO&xxlSZ#K&FvwV=-g)+? zyy^0pYTbU}Xy19UPYQ-4>w#l}h!L`aqbee&i54LR$WQ{Asf$F$gHVm2aKI%3QK`J4 zcH@DtpiiI+L4k0ATFH4)G;jkH!o6Z%!O{|}IFF3~P;w&cfhuU(V2qCg-R~SB z^sXtNH656@QIf8uQ~?ueK`-U1gN|(G^bd6-s3>%B3Y>vE12450FtP+uD3$(v82N;0 z6)JvRVYA>*;)#GV;Fr9dx65aAFn}L_F##h}`U=O?OSQi^7Geq#iV0N;H9EVrp0Qts z?$AtRN^8lK6v!8i`b+jl+do{+kwIL%Ze&_SU%AA?1?pW2bt4Du@?(i%TpmK9zTr)q zHosm*EOq`P81}1R5B6SWpd|nZ2q0FL(gc;1CLFyNsfn>6ym#3G0svh6)s6LS!LVhdrvVMSsI@lV?eLSh~23)k(U4uhl+4uVMmIh0RdX+nw=%L>pZHse@X|F@clO&4X<#l zXpTXG-~g|I>p3e~elMMn2hf2p8VSm7txbaSb|1ANLI31jK~z-cj|^J#x4C9WK<3&t zphk%R3GfI^NN?nVX>!#jn$Xd*B&Cwy5=BR%4Vw0D%XFH#{tXy?Qc%6Y+KeT z;k!|${6rp6zgRF4b}TjKPc7>(;nc?v`Pxm%jsUh>C45M)9> ze?!Li3R$+t2$?a69zI0bwj!JC^w0jeO7O1&Fx-eDp+Td=cg<5ARuFln`qeq?UbP>f zvm|+R6jKgZd=SEgNmHa-+2nhIQ?*z~rij5;*nuH(OM2agBx0_dmvmJ1LEBXO`vo})4@ zT#*uC`oKr%4~SF;vHh07ED|=GyhyMCG2mtWN4Z@-dBjUwsBPV`!|lt;3!P!8^M+1_ zMdm23zf^q{b07!|J?5upJRiJ7ZXqg|S1xY!9FS6EI5G$Fj@ANZxV0oLx-Nnt5I_xd z&Li|GSyCVXncS<;q1kDa41ctFXqU+08is-3x2r;dgcLs~^}>k}q9z3!$|Sf>0`3S| z-JwqijKAkYa2B>E#TMgHct2fFft?NjfRoIG2AxaCXJ6SuZd?1==%lP3Rkf*M^V_Hh zw=Fo^$$EX|{DWxkYYzEtNP+^&KJrjP1Xdb9FB1F#@`v@+RCA6=Sz&w`>aV`(=6C<~+-+5>p%guiaP>!O!`t6RZrwJO7xx2M&V{LXHXkdfsUW zH)vK2EY1@<<`E&ml;m>W5It;LN-;bsI}mxo!WWl?PQBU^zYJdtPn-PLQ!mbv1bZF33G~u_l+)HxO)#jQaMH96{7C(3VHh@ z2@+!cnu5+FFsxpY*0!Xjl5f-Cmr1fB%^P#eKCWo=tCFo_p8y49=ln~yoK=c8LD^wK)_=@pHY=>d6-eJf(ps?n>n(*cL`;T&5+z;1$PnD)?$O8)< zuGUqS^vye{X|)ThG_g*gFa!HH%vxT3Bza>-@9yr&^HqLiU01ru2#Cx}e;LLNs zgq$z>1~K6)5k?(=|XUO!^?6vnE7WO=m^0B_iDW6}vTtDAqO2 z)vYZr-Yuj`h5NggkLlDXtX>^W>BO&i(9}0UV*c?$<5x(SHt=uKQK@vGgmA3LZajeZ z1_%|K^49R(5UpC!`aHqcZDtAwX%V)_9rMeJS4pvRwqez>prqmFQ+Y(az@ZbKopnf^ z<66laHZWEg_~y5#K!}4pC8&$*n1f8o7A`?GmRTS94lR_xuVfi+_KtpdKyQ~g{E{62 z@2>B>RAm;FeKr2RQ;zpmffZrT)y)rsx2Q}(zlNdt*B*;ah6aQP2OGtIgwJbo{ceEk zk%~$s040QFWqOSQ91^YU7vkOKc}5r>pq&;(^>)?4;NIPeSk3aRfUL2rs#_>oD&w!H zKT*@<;av-BS}c@U%v+t`)-ga+P*%o!4$IcHOz*e+@85$x8E^irNjMPfvycx}v1pj^@Q-4lI{gKblbwVDAg9o-M~eQC zUG`d>1^S`aW#z%#_Wg2o#aI;xaofsm4MP2#xJLPCXJIuhmH?*$13;auC&HjimJ@jIQdsED(~9# z4t6b5|MV~Lu;2!y>RcyLKBI6LNT8yfV#;I~KKE&Za`LYr%LCvuizoxwuU#bI03y<$C12R3Bs zZ&p+|uQ_16;%6KS#QS)#OmpYyNGe}sk+?=Ic^KE2d~)zx^q)F#i81gI^LGo#ZB2DU z_M>io%dT1bO)ES_BZCHvAO&34cs7X8B|wCMziSQ^;w#}npPvRS5YX{p!{WFwPAFT5 zaNJuM4K8-^BW3FlUbxQKg?RZ{p6%6(mPb8FS?pB@GhW_J!P#YYSq_T@T`LEq`gRVB zi&JfxhevKUgoL8+|KN`E>Mt=j{hem7)h!`f0jGxzPCvgSGT42*5#27{Fz}c#;g~u@ z?p_0SEq%f5ouz>w?|_1P+NG3X{D8FLPGWYa{X@Na%B))T1LCb`8pi3r2>|#?I{|xO z4MZCgoNGvb`es9fDy98hgII-INT6il|HU*y2h zoinqXnDZ;-v&*sP2yq1w{x`EEynqM~zj*ZXkE25Dx5@fMMa&eO-IB?1n|ZdTvUSl> z{FER!Sy0!YXp-eNHjGPWNP8#D;B8VHFG3;0VmG-k$uY1(O&r{?me%}9*RImq&fzVh z2Cu$-EmI}7qCd-Cr7l@cZoG@bfF8;+swP&A{xM7A zZJYod#r-A0JNI%t@|$Cu4;f8|pJ+7~@hcV)P-QQ{Jb8bB+XoxAVacAQM6O?rZQHS? z%RqcZ43SHW78Eka2+i~(#lc8|tQknRR0Nq+wUz%US&}EYX5d}Hl^a3x*RnYcUYl$M zRlno~?}fHQYdg`qmBDuo6VXNYCiC;#BYXhFDDHn-5U*HJ3)11w|E(1WR~pR_6(OK* zx*39Umzjr#J!;207*VX{WilSIeKsaYjH!a`Qfe3}_H*RCooI>v<}eRojf%|#;e<|m zX72=PQLjz+>f{QSdW%ws0vWDoJ*EBN(0b;+rVpNRH9}z1# zGaZNXC;G2cRQ~OiSV%GiEcHmJyO>jjaKvoF_G=Yq?>*;cMB(bV$Gtm4@eM;q%4DmM z&&cvJ!-A>d3Z6XfBky;lsJo(q%hilK(e}Fso3d(>`R`#>kIVVd%|aNGXhRZIJHfUc zjG8vtNj4eBtQC)>moe3oNwHl!=ziE{)zzXQIH$X%DcDHr99Xk}x>toMg*{g6uxL6a; zn}P)H*0TTmMDX3*tiA+P2MiPP<}ke6iL#Hf zl|ACGxDSJX)K(Z+J4+-AZ>#&Wcvt#SAM%B47UztFio)?PLxDNeQRZM-FOAmDca?szT0 z>s@%qT0Br6GU|(*P&=lhg|HNuCF7aUN^%5Elztw9>`8KAN)zo*@*P;IP^1C#pUQU1RfZ5oQlQB-J}34=MDe% zRw+4dTZPA;7kjB{Q{Yf0{sZwRS=0vy-PygKS(Pyc>!+K#3ZYYvqPxa#)iRVQ3-24x zzIA8Ebg@5F+)jC5vQ>`N3+B?TR*ROnRoc0>Hq9_^gHV_RrJYr~(r-H5 z49yGkG)Te19KUlT$be!X0~&N;9Vbf&>0fLMSg<+M`zu-3^ns0XN+O}3Ax!e*-e10R znvC^|7F({L>XRo6n8vDA&OZxq(4imA@3Vb-Oe}xZ9;Iua6JsvFB~*fNT0f8_-@I}8 znTpW|M&@ajYJucs=c6M3gQUyz=ZxvjGEa9>@{A%Slt85?34znwNj5h(PYxLQu_3Fe zfk=Qi_@2~z3b+O5*(r)Gy#sHz^lUeszcd_ejEgJ#wtsuz+g|Ozu-5YPmurJg77}HgBiv59GNGK5V7zgV)L%pXNpXStQ|RmqyS>6N%078V>7YOU_^c`sP|v{ug(D|mhCDM6NGD^NEQx@d%?>6bNOR*mWC6h)!UV%@L3hB)cP>|#rh zHa7GgG6#J6;UN3@+GMMypI2V5XdLW=W_0WQoa}*V=8qTuF?J*bz;V%!4R;$j$43!? z5~Dd88mHc~Bv%!}k4ArFNQDmw^Ys$_T^#JFFa1MK5~?=N#=b3DVmY#cF2cEG>--*} zq6{Azk)oeYCGG|5v$H>kD!;oZe$iNeMo4%oJr+I-ORd0$WO^Lb?msQ>e&Wkz!EPX5 zKmbmaLQPgj?$r17AwzLmreIlMSx|^omE^Lz0l16?>VxHkcPyhjclXHd|6cSJ3gb|mOQaZitjJ|i(02oo5pho zZFJT&0f#7pAEGs4wTMvM3%0yb$geQU02e!ilS z3J{?ccsTy1AUrh2*lW%ln>dUorM0rTA}WK??S6#uIP6)L!8VS4to#>2%gzIBk#RQo zlO3*Y8^jQ=x@Db`KIcc*)wh9qzGz5Kbn`fVg^p-z*fzM^+Bu-ImHqsbtT1)Yz9BuN z*g79JoYiTdUu_CX^16S`9PYd}ojUPwX%u+rnE;Ld$bKS$&k>-(UPsE2VZFHv-d=5Tk!!8?w29Z z-H!V8YP?&4&pB3)_nO3mb1tZ0&eiNrQrJmx>Qnb}3Y^Qd~l-V9E%}-E=&tSsrI`RuLj817L2K z`+y^+yqrg7qY#Sv6cMTWM2Zu(Yf6J)lJfzw@-yx2@|*M3&*8P@o9?`}|;pBw-o1ZUN?WJM%4cBv+NlXMSTTMP1eS;nmnl+i6&|o;HGwjM^Y@Xk(T3@I_fxlQ{sngp{*ne&qIvVT z2yON@M5y5_$x7)Fcq7@#hmc;mZGUEzm_VeUOXMv1L}Fa<8o1JmY8qDBbpP~~{v)gG z%+?nBa+P^?+yE@H`km$DM`T%i}T96*S>C(LW?a18u0Wq)%H|!A%N- zNt^cci*X&3^`8z{n(IDtS>c0btbZ%LZ zbPnm7_jJ-DD*daT%V7a!?=clNR%e2#I0vDKDn=Y(K?i7e>EDMbV{<^M}Elb(tXxFKrredAqm{&XeHX zoR?>USxEkdr|cNY$&_v{(xWFlAc=au;mtw+V)upqOudJL?Aq42%@>d*w9w%|13SB2 zR?)P%TD2Rf4{%H4FLw4J;y?I%00b3Pg#%|D3h}LwPx97ze4Qw!j8nm2NPh+iJSa~X zG9;$VBf{4f$CBpl$d9As5gz}Avg%>zdEud1@3+|bpG6w6TXO{{;<8w0z3 z!9Dc#l%JMw`jwM%KDb~TplUb%I;nN>A)TM0!Mjt^_qbzxPa+I8 zPmy`3PGQzjqcq6nxl}?ub7}1~?&M=;<1DN{M;;#$gq&;{P|U)QFKk_bT%;*%5I!D~ z;G)>34uDs~etMi9be2)Y^FWNV*g`i-Na2#kI_jhb3+Q ztH?>>`T!7ac{(PnsmK+g9++;cB)1i!5dV1;JONOi^Jmw}8E%?b4LL^02dgRl0^~0mvGpNX`}nP3 z8jWzo+->?J+)Zk2cJ!!LAOB*PF~H;N(*;nU;7;ZT4e3b+Y@gv0Q!I-wj94$>nQ{RhAU z5`18V%4Z(T8Zo)HhRmoD@$e3L`{aL~<`n>pf@hS6v8CHb%#}r+-}H@exd;evU1n47{lXyA~$v7K0S7pqkWeFU(elW!6yI0z$$pPo?1 zQVso!8#u5hpatRk+ie@{B>c9F8$B}$Y#gDVyJVr|#>tLHgSW7mH<=YEyfMy?&?dCwI*fgsP=9%DHTa z4dL{Cgc%e8-*H3e&#-Y%oocw}+5y)b6?VFzsZULStA_Wv^3z+w*h?cp{5jc;vFww{ zO$*YpWelO;5WFDCH^GMo60W~lh7|v2t;B~)HEI!#bkiXLbu!YiDv1H4bKarWw1fwu zkKg9%)SJeirtmmC@DWlxNy!(k)x5Mh4_thTCh7{pjbY)kShhHahwB4);RkK})N}i- z&t6*n!EN`%DwKlD3m`wt!pK7$!t>;qz%MN6d}64w%N(_CIy6nlAYlwN<3nnNVIlhY zY#F2Tr^%0C%7kepX>*kQPQI3xcOO#bhX__rV}sOrP1S>AJ=g(bgK1{dlot z#oL=v(e|MrJ?E;o(afyC2U58So2`?s%>ATI)U-%M!Ja#O&lsFnUNOvZkPXlzJgYVoHAA@oi?u zVFhE+%un0jIKBRQ^m}XZO$G(r?Wi&9BU?_-@ER&idMDQf#?;OWzRf}(({VLY_+qa2 z4KR4dDX-1@GgC~iU&72D>*au5*PscJ&(@AO`FS~`sbvAb$_VRrNIY|^<6yYUA8P>L z2iBNV#Te|77~x%cm~IRxHIs1;#bT8kI!wua1bM~NltHdbd3kxS9kEMZ_~c?LS@^8P zfspX=YCvA4Ak&=3Ta}nN!>6Kn-_>RgsOJ9h0m%5SRi2ETKOq{3Y84HJ9@CWS7>5Mz z_ViViiNvXjo_Evq=ht|43pFWKD>?%On}?_Ha)oS5`A5!QwrO1MGB_n%>XMcnwS%qD z9<7li;l2iH?&;eKyq#E5bE14MiA2N<#!&xGehY9+y;iZXg3AD<<~1yJ5do{Q$=gzx zYwTa&gD`PFX2Lu1Reh^tofdz$v_-g;s#Rj(HOVT8e6YDZ+}oqoaj0cBXW`JDXE~?Y zRoh=v*Th$=TU5F5B&$Rj`&z$Z= zc)iD(lkoY9@X3m>siu`kwtz270z+^wl|t>O7fMi_J7g9@=*S1Kyf&I?v;sz6W(}HE=XPUZf8+rb zVy52V8CuvnoVfCCNq53l*FTKZF45q*K8jU4EQnoc|&kB z$4D*OA@{s}j=ksZ5BnZCE!6LCRW#T{q(aDDL#98V>7JVI5BEqJr_5jtVq;lAFC_K!PJiGwn1=p#sO@uy7Z~ zXSgdr0;h1Os|m&{Ny+N#70;ihk`L?OZEe@_Zm-P~NNe;bBmGTojTHOoL@C=OHhgpZ zi-SYKBkL6l%su@@1>KIm)<5CZ6aLXM84E&=NyK{t2#H-#zDUw1QvR87|BiCMldtfe zPu+AdUobd`GThMZL_%`T{o<>VjP~&|t(d85Be8BpY|Pf1zS3$UT9Gzk9+rc($pz+n z>7h75XN*JN4XY|dr;Hr;<*+~D4vKUN9Fh)~gun}>306RNJ=UJL@D+dXJ)=xXLbUHy zY|Z6I6}c;&W^N}$yW?xjt%akm!xfy5;?^*wn;{tbPU#D?N<5!EUYzpFr~yJOXxv{3 z*nKqup9u==TMoy;u5CyE)P%RepqLC~#G8DvQad9j*VOvZ_ej2S)-Aobi8CSg$dl?R zV8P+^^+(r@((uIUwb!A=dIcpiA$A0Y7K|2d8oxu{_Od3+^9U>R z53%m$808KQ8zmID2b{MQlvOZxICph#AhTE`kx{A`2UlGnrp8OxJL3kpTx*qAc58F+(bc)wTx!vW8@&5Mh zS@Kg$T^CHo<+&+v?g|7RUtyP5M%C=`P;-n07As8L$>~fxedhne+?4=gCeDVZ zTPLhQ!SE>OedZ@ae%V!g=W~BJZdgA-;*^USMA_WjE~f#Uk4%EUO3++xjb0Q=B1fVJ z2k``teznSzI}PU+C92y%tROXNaX(}Dt>^-^Ww{-T)8}EJJ!6+N(sM2k zh5#oBSrn}MW;aBZ81Ct~*fehs)S}OBu=6+u4?h{e5oUElekSau^dlAn_xas~Gl1X$ z&pi!~V(9aMM2jNZMSH0I8Yd!NV}wZgBi_<3L1rS9dwvR!avqv^fLGnyK%?j(oi872 z@nUbsBx-)wxV^ueJr8k2t1ir6AtbES>o8e7@nteUjmZ#P&?coX;Y}Fh<J@T00c0A~SsT=h7-5AGC(1dp8MnVBP5ljOT6a&n557rR{{aB0Irl-!S-pL{n0U}CA^&7=*MeaxqIG&bg zM$S0d;FryG?PK|r&@@Q)FUrW__vEWp5xMc2a{^MrWO$7h|3DwR~k5QhdD6IzboTAI4EaC1aP{?-rNE+>vwAk4Dfjm1`nQ8gR(Zs{IHo!KG~K9 z$wB+;Ro#ZVpOe~eh~P{ZNl^i?0GNnxO$9o~)#xl?yxYTd4p1XfJ({_$(2o%~6kI}l zTR|}3CS+!Io=KE(rV05fSCz{@w0@DPR_n|yhil^}EzKkyteAO^DE(AxV;zWobHDw7MU2$MdZY`ndfDVcGBHRoiv3P-%1!i^~wLUU2 z>DTlth@s8>ye&G8aKsgYi3?B2OD!bASr()`N)VD!dfB@ zOQ_vkqqKMr*50g}W|; z-o$xc7WI@TYbsYKqBn-q%8At>-|A$)E5I68>XB`YHi{hA5Wg)KhHKc2DbO-^`>51@ znn=i#4=aT@A$GWyLyr6IhYEqv8y4Yu42)lNR&iI|Vx*Peg<=W2wU)%(Y)jHcaJEc~ zt=!S`)4~s{mopAFGHRewQVng5`?EQ!P+$DcQCWM291pMe>m#)4aJ|t8R3EXg?MD%? z7wkRA0Tke^N&;ulCwV`7Km3?mX#qPLhjj#x*Ym6JP(k@`ae8tVPVOC>5Vj_YPKtLJ zw~Ieej$K}v(=nsq)}q6wy@AQ}GF_7}rqiK`iU0Jbm5@TeJmZbHw%Ray{1;ouYw^kr z@_q?Y$c*>pL*-@nVZS;NqCYhr_xZ165Hs1rFqQ{8tT{OJM19Vngt_AU@)&PHXVAsY z)Z0TKWpWwuF%g$A(79TtdVKp>>z1HFAX6xsN3`bB{oYD`;R4hqxA zDJ1dgYY{FZ1r%>2IpFw{Zt#3ncslFI0pI%R+3lwa`C$64mwQ-VSKMsU*LYkvlpkdm z>*!;T3gsO$03NE*y%Uhp^oHG%WH_{Fb=8Ag6UV~dg8+y15HN1Em2DJ3#9u2x+X2+9 z>ARFYHB!LSg$+h6%pch=uPEQ@LkaJ>4R#H&LqG-RI?|s$@uk4V(-=REg1Uder@+NS z`+FE1juB!;k1wo)2W#f`||?yY>Y{LyOo;PoTx% zQJ75~i_EaRJ@iq!zohpbrj?G2?#nk4A$P# zah7WndjE~Np7C8}NB@zhD@-*vw{tZzookG=D+A|2QZJ0dz%DHq=(zAAWs@7CyiYZ~ z0#RQHoiv<(RLlcn9HWx+i*$Tkx?v%AHOlSvQHIxiYG=qj6OgV#lFSBfbY-vdbQeV- zZY0u%a*-);f`aH;;j8;1`~sGCfel??CJk8iI1X+~58vqis+Z6qLd?Xf(No)Rv8}RZ zx;tWZ6wZqs<`@`Hw6DW=#O|j2=}FmGgH&_2j8E}*FDdB~W$Y&hv!k$_jag4>C3)Jg zD5a!Vc2FgGhJ>$x=LJ#raBrae7M|n2?$K`$CHrv z*@9>GC44GDxc_}%+Ds@n_03=g?x239c>Lx;dWk%AF~&1tKb3|g?&oN|Iv9^U;xJYt z2~J|dhXq@bPgQ87F%wJNzN*e!N+diU?^675-Whcp-6$+MGHKKdeN{R&LM9B2WqO9> z@ZKCZLXHXKh5DX3=O?DwJ~t^#ucL8`6hpTAXl#HS$2;&>TdDPG9#10Rj| zDrDU6kqJDP{+Vq@O(xI$Kbf{>Cxcz=gph+WA?`4?WD{ycsspE4NZU|-`1-Bmr`UxU zlZ%20Z?SegC}Q1A(wW_j7F(?UK8*$$l)n}d#CWHBI`$&a^C)-+?l$Rjh8crv^MNlM zHJiRc*bS3@Zcm)kwBlyR6rGi!iMFs7@8O5_Cukor=gxVxt37or3O45hcR6Bcl%-w5 zh7Zol?e73I+Sm=GO;d(Yr|roKzWGQ`#39p_m}}^X^gVL);b_Hd12zfkfR%bx#2-mG zP?1ENyi(m^8@;?y#*Tb2e~A`Ms?-2Q20d;Up%_k(=*_UO%kyabkhIu4gIXZNHbd-Z zDD1W;XV~rY_C`0R$C!zj;Y?jI9Ct<_vASixozQ|wt(k!fo3jIWuwUL+Du1<$+L7Ht z5Y@%h3%B`xOPlaC+es(nmThY@!8v}dz+6m=Gc8#bFh^8pg0R3mD~C)!@dW8l46Ea< zWeYs>eBJrE1W@f4A>F=J449q_?ockQ!5RWaDjH{^+~XOF+mGZx|y&q#M{rrw}+760Kp{SN({|9(2ImKi%Wz2<`PAj9~lS@Zxk?IB-X( z;{!s;*>^!bW!QTkZ&EY7+Jd*HMcyBbmAlP|2te-J0;;obV1&VTGKwn|L-e4vVV&TY z66u2d{Y%)-P()Wuvy|vpTJc$6Hhqxmrhu@wY_=Q~REo#FfTg|Y_Ygtl`+!ZD(}K?| zBu?pSlOf6aNu1%~^9k11SZ5Zukm|Uxm#7lchL9h+oL#8UpuXb}$K~;Xk(i)fh8IXF zov|T)IrJT74BBQ={8Tyqmp3N@l@4VKKh(TY;PNu*e%s6FtHZ#KC1RLtZF<>}JdO5= zl4M7?BaEHtmTe_1`aVY@eFYEt41eLvsRUdirp}2RWsTAjSQ?}kf?W~A$6VW-ygM=M zoI$3Fa@*`)Dq4s2kRRQ}adn^~8^Qnmy{n}pFO>S6A0-3v*Ao`cXkHtS$gWNws7k8* zHuqjaLbtANhRtxc4rXWq#Eb_?u!1~Z@ExExe9(z3R4?9# zXN4rS)8{xMREjCaZnZh1_f1&ObAmn)2hvYeNKldh9xn)^H5WbGY9UzE6K;!Uy z_l)zcR0F&V-vgDVKPX@3+vj$K6EN= zVsuhE5c~Ua;rs^s@0gL9jcG8E%n8LX1!mbXzJDZp(=jSh$tL^VjT1P@EY0$88I@Fm zs%Cz3jQ`a75p8e{kEWDC@%g`#rK# z#IUi&XhC?NK2oSsOAjr#*2Av)bPOXH@Go8WwLNTw`W-hW->;DYrWgV(rdaDdq+?%?e(MMNdz}Wk2*12)2xsPq zK$^`u?0`OtO!7v}?<^gGAI&*ZvMT!YWg5B#l2M>q68QnWfZ`}~BJPwXP6#0K)66gG zgaRNL&~BLCbvKkh-S3@h7$0)0@OQ26{^SBoXT>MqzK=DsfMPNm*aJnTXdo8uDr!uP zL&$u5Ap={d`bAk^)0 z?_d#x=|_Qp?+87JleBgV-5Abv&8xmk|ATj>q@Ybmk^+@{nS{b;bqEr}ea)NEW3HTLqEJ`v5#SXKMAm8 za)z*pRBLkxm^Ieubd=fqRW*_p7>s|%L9nGBH+JoQGUB(06vA;6j%7xQI{BgEK3BGC z+#QUOZ7Hgn6o5dQz7a&A>Ka134xaTskDD;Xpo8pJBJ*E+K0T~BZ?D>PQLq?u;zq6r zx4Q1PuwB2M0L755W8(0BwO422O7!OKxt6l@!wBqO2gWOgmbzeO2ldp7hT^aQB>U`i3t-FRH^ez1$mHe}EHs`aVM7Tq?2^q?0VuEy0uMab zs69P?JiZ*=);Xg5z26)HHf7WhR9MIo%pKMc(5vQ_U#`me7Rk8B8fD7I{fub3csE#G zCrb!;y}1t{1&9jc(A2UUuQCuob!ZNcpns5U{wgtEYr7VAF6`f1-BvYn=v+uXpn5$tx@n3!v7H`O9`OCRus>O!TbvoNzxdmRACLuFqK_NrDx zt)kv=`$j0ah7V9AKm(%4BdxwES?dw)Ou%Qg?X{f>3w%Au&lHC*Z8f$g7 zH7tzHpvPTSm3So+sGn4TgcMl1A_!|;*6g#zfCKjh7evL(#41JOIF^D+HF71t|Hknu z9tJoC4)=S`DO%2$*f0HbVu8S$!_^A!K4W6Ip#TAaLAN~u+dfy^VJL+nG+4(QT{lV+ zNhHPNL?zk!lu;H{dBq-$%IiqTCau3&v$-Sraz?5(F}Oaa$M#e=eRBL-*DmAk{Vj%xMtv~9E>nnknyms_hed2oUz-Xn)VMW}or3Lzzi z{Y3Fvjl+9s~q$pyFpVUCuTA>aY9a>0p16 z*y!2~6`biz#bL_%rqN&3nXJhhGBjAh=?jI8%Qq_HI0A}sRMGeQ3+n2Rx0Y??J#}?n zvIaax<>f9t`d3(1q%c+DWY<`9hpRc}E7X2hGO2P*vwcYwADmjtQxEJkp=$GD{@!OD zh)3>Ht(wvH!F=5Cjw-+FPHj&S_vXRLo5s~JA!0n%`)X;2l2A{W{LkX329-8Y2 zk<5)%Xfh6GjEpz!TY1=Mv!beCgww zn>A`t>BGaF=}EZnbQZ|sfgrx5o{@Y|AX_*}1ilGlWhhFbo#&%Vgl98owOQ1duTczm zKXyHy&HiOtvhU}u=1PWee;)zw=R39%MEbJhwWeXhb`cUBAk9)=;u8GqEKA>qyuE8$ z8b%a{4OMNnmJqb~Iik!UaIjmZK>Cb((Vm+R5&;u+>T!Uj^aAfzoxehZhX52BgwOCi zEs(JvUBtc6xy!pa3GgZw(j)yRXg{D05zTZw?oFSOGW)x-9Jz9d z{UIP=eerADo?tT`0Q~N>k6G=^KH*($UAy^0Zzi8|f3d#;d0gsNq@L2luLzQP;d|re zkGjo^s~0@?+8P>R68q|Gc(-CSjqMy@67Sx3+$5gj7)y3%ez6u@+Gc;xI%#sU_tS(J z7$5)oEadey^P-1iU5PkTM$1ONTPd81MU)2VwxHjC3!uOGvS*UvxC+kAu2rv@nay$? zmTr;)m8|2%1(mF}0C%~K)vY(e#e;R5hQ!j6X6JJz3BcD{Z?bI=vt29~%Nt*B|1;j- z({;Fz=cGa}QWkF|Dih)+X4W<4W*2;`!v>9E6BgNgg`}o2PM#ks=YsvAahZVNhZ!r+ z!jjLVOl3(K&G%hqQwir2k6?{k-n}+A2rnPIDT)wXyCi;y_K^M6)4jg^%G|BrY-&U2 zgTM-C$@~()q)~~yT|px?sPockWfv(62HQBfcS}iU1AlbrqmKEgfYj=*8i>?)9vdgw zK<)!b9Zw;DcgJc)ip99C=+Q#?S5XO#2YKQtGkptQ(gRZ=B3rcaxc0PQOi)Ha_=Cac zx#FjLNM+;n32f&E>cdh*+;xVNN%f%aKs=DlehzN=J4OP+<);2ISZ;Fl-`+{Vjej|W zw#VE4=jH9!mpnZ;s!9@#o1Ray5p72YM;o6UgVz0Zn|35!W|x!{{l3u8>+*Tz3n8j4 zGW0&bP@w6GnI>(pMj3u=Uc(~7r2~v#y5Wu?98I;COz zH;W(=z_>7VZLhNjD-aON7w)t76PJwzJFPfj)g8v5%@~=84WPNnZe~C3SN82QJ=31k zMmmB#Sx5AX+RkLqwaYNSPjl;TT|tx@&2&tPX;J1LbWpdqvc+15@ONu~*v8Arxdp~I z)W3q|^J`CsAXKFC&G%dBqhi9DgvAuf)+xp6Ac?GFrY6i@_&gRXZI?q?(*n8<589RA zhE#@t>&d=P2*>>UC+z1)J+bF@`2em0epFA`SbCc&nAWNuxN%V=IYh|5Va!)`NL~-- z0@hV{uas%-N`UgX#B?~&4?SZRT`p%3IMN(@ zAksaa`!pdU1ayO#c`A)MuKSVj0#_-CeIni2{CGltlkm?Um;jC4a7N1i9~I{qSZDC` z?Z#|u+g4-Swr$(CZ8l9~+eu?Pjcq$8IB)ylefmH9`QCGOX7)ETd#-!4M#jwzd3$=T zO?pLCuYR|ZP*EHuMZ9i$Zv3!nw~`Ss1sDL9ehj~lDe_r^=6)duhaOfGDCwWR>wT>^ z$#FyuZ0vw!=SQ=z*405kD*U=BFz^QJs%(G&7*hMMN;Hx6PhD^Tzcx^bRVKAWT?8t( zi+hj30g2zvWjjhle3)PONOp)4emO88B-v`t#bdL9x(6+d(m7eXdSlhOU5 z@t%fUi?A6GyrRG0>5x1FNtC4LoQJ59qM?LO7MTG8QU|HI-W{#x{H6#OPr?PC1io<2 zpx?Vexk$m=p2;=Y$pH z&qfIefL|jDBxmA5S&{QomUa@$5&nh^g#+Jic22U?drkK3?9|m!_fmbo#4HE~(!P>I zP<1)D4qj?Sz38yAr~7?|pTJU+8V5(h3%?QNj>}}NsW0cHyJZ6Ki4-^}W3VWt3-PDx z+1Um&YiP$qaWXqGIQ^O_FVgw71NJ*Gh<|eUzB!T9)t_gmDfiTCl=Vbn0!8?t4EL@> zq=JYd6wnFB?Ms6e_}>IoAS&o*9$MKNXRRd?6G@U!2s{N~TZ>)jVvNISVD2Mix#;q+ z1z*f9ItFL9S36Q@&pn7c;zy+$xL(6`)?eA1++`FB6Zt8y?(!LwZM3PfJg;`<}Am;TVbhF`Z5ZczO<3%<0tCLhB>qeK=YE9c`n&Fe?~ zY-78y7$iy6BsixQ)uJ`qWF*%!s7bFeqQ>JzB>qB`dm$D4&jwiGFCYEVoNCt4eaHsU z%qj0U@%(;lSnx#)zavl71y3AcJ`5Z}7llTX%H(FwjbvVfz|MY$Nb6Gw5t137jR->f z1rim-?RvYkT}|*G%uSAQj1H^fOaAXw7o+5$vP{lV_Q;F$VO^*mgfApm&K`R08x3|z zXDbms901s(mpRgUXzv2WipE;lCM9@6c|^7U!fTAu+o|K7SE;pVWlS$#@kh%RZ^H(uAON0Z0f~zrx?> zBwxw?|4Z2LAlnA%_qKQ&d3eM`*8vX(KeN+OUts4jfg%Q69}$+KKmEHiUTb#>OY4nN z2#*1V5U%wQ4^Tzfy2^R>;e5wkoWCnn?k5VZ!7 zk4uj32`O^5zAZuUrTpg^nP@@2uzY^x$4hvkiNt);H{tI&{fgEJ^~R5e3Hxi*rWpc0 zO-64207gcCHd^Y=;25~^iV^( z{abYjL+=WfU|`LmSsT7#a^eU9gQ$Tlg55UxVoqb2W@k~mtdWq8!ZBZ)W=)H*;eB^T zVA|CJ`L^FK1k1A7|L1=Q{=_LckaP#(OKyBX49`@Hc9Pb09LjAdkbPZ~!VH0r>_#ce zdF9I5D4S>PY1Rzka$gdh)0M&qw!N`s!^~ziJ|A$+W!{!JB8R-^IH{`mcK$6`wTtoB z*<)J)UT6@77!6J6nn8k3_C)B}{O|gx(F+Je%B^4{EJUA1L%V+r;0ErQ;!zF+Z^P^L z-I+r~SyAxAfpcVVvT|1ZD(_^v+_{cghIjooy7sG_@_|ELz^_iefSU8=TlZAkX)bRPmj-^bW$AJY( z2r2DnrF|`uD3!M%21)P-r6}3c5?nLHyDcKZFJj>!tr!j?#ET;a6fB*bV%2b~Nj*u4 zIByu%!&?8|#TbxtmVaQqzbOV%m((!x&fM&$!eHOMe)vg%d7MJ7t1f;`i2YX7MaPo4 zn9D;Q@k?>99GUDk=A@F`@SR$es5d3ANv$d)Hw-F>4@;T??11eSXjvDI^{bxMrA${Xk7Jn4w|%F>}^W zR&P#({VLRoTGoh^xATmNk2gMK_(|=}oO(G1(|=;T4+KP?r#3Ei=FF+IF6~4!u|-ELufNF;aeUXZzQLMni|)+z54;Bt${V7@Qp=qi zG+w}0PndD-H=$ss`2&@iU;E6bu>~h`=01-`17OuT1Sykwkl%q$KSO{zhMIk{1;Ynt z)J!QX6eMpQ4Yh%^rJHgduvGP&Yzmoy)6&c}TPJ+AdgyPJt;!>+^?_i<7LBG%PwvT~!VZpRkyGl5C&n?okrNd`0+#fqh(jxhcuN^4ZX4ZJ)!HNwOq$ z-wMUq*wEW1niQH|m*Hhdutt(QL_C;UZ6o~$Gj;rXlSrFJIwAg#eVO|G9pL)|1%P+T zm@0r3Ige&yG4K=aqp8v^7TqSC7=K|#fA2ut;i5TFg@T<>;e3cwqXXHtbWM*^7O!cE z!c&)^^t-nz|NBim$Db5z9v|Tj%NqbfgQ~r%f8^@{){AwG?rN4ESkloiYN1XH?bE$bu zwg8zGKFni0=>J@U1@iX_lbZy+F`aR%1so^O3k?uaYmY`B$>M+jGtjHpo4xlI)%bnu zh#gPObtPH)p&AtDAsk)9UA{j~np`yBP)X_&zlui?r9r?B{EfEZF7I?+NK)H#2)Kf~ z`LR7=z}HjbhW`Ew`kz+77`>I6vnn99(rwr&r02 zWg@ft(R)p(QfK^wUY`Et)gQLJPDnYj$9p3j0JL4|cpo$8sG@YcF;u@41gwk`r?%SW ze6Wu6>ZZqhB&UrZewF%=hI@WPSOA?US@hp{(t`?ScCyXMCUxlA&jz`@5W{`p4EaAJ z`jYg44^leXx+8(u!q#Lc>j&XEU^Wizk=(rteBeiDFO} zVnW!d;qRF1Bo%Q>Ly9@kMkb$>;s`D}@V{`uzHad0_4(_5lmA1yFaGk)@yIr9f`als z7hlPT_!v}m%0(?^aHC6X{I~$O_tRLb6)Xve!wpNE4$D50DDWNZoummB^f9npUcpG{ zhpRq86Ju7V>Eu}F9CXNX%o@O6ucrY}Jj#FgcP7vpyu`k0M+owuz&RHnBJ-?QK4gp- z?;Pc4XdL*~x9FS@s3(;rwF%y43nh*t{}ac{W-($p7AYna7~+=eU!^$s4+fTo0!7yK z52waif!?)X%gxK`2J3Tp zo|f0!n;@D@X&X%Bp_JwAob$t-71Uc_BF*C18sA{3D(s0sH$jz1JRiCG0A*UEYIRe1 zX}&Rg8J{oj-~P#5X?8PJcGYRV%EEH{DJ6J;yLA62M>la_P~o>{>x)o9@A@e*_7lr+ z^Tt^Y#R~lG;Tg8?FD@wKb67wcp+6bI2kAmLnqxSaJz>YN;T!rce-~HGr`Qo4_He#f z-+2-%aBD~M5n-)Dp#WEvKqa19DmYktKFu@kg_^}xx8}w(3IC=3p(Fni#$Ot|bifZj z5i(gq#~t%aYGh3(K}>)6RF@$*^$g*4V#K{u z(G2}x9oGG$!-MRqRVNT2S(e3cFT7lzbC?EMR5&;*K2{N~`xXV(E(I{JK|ZbR8+5uQBfw@etQ%BXtCq4b?$#d#&6<>|eHe;D{uNJKXH@FAGu2XoMgw zvrwl*Z8t!HJu!)c2*}0APclqi3#;Iu^?Ep*Xps16}yG`+9cBmzHuh89OL3;=4D2d&d=!aYY zcO?cb(?7N14p>kzF_xoonc+L8AU{Hp3r{7H71)E*@J~a_-g!Z&-1v>QsR2~QN6w~`AxOnt^0%Y%alzmyhWBHx)bnVC#FHM zXmh04W?Vs(Gp3Xz?YuBjlhf5z^?rG*i$g7UlMvl1nOxsoT09bmnc=3WQE4Wo+grIV z#5w|mf6X15Ao%0DXtx!^IgSX1jrA6NbP1_S?G}IZH-Pbge{@@jgRUUeZ)Gf;8ho*N z#a&(egU8dg`89JAg%Yok*Z&i{L|LsZI+p#MBmD#5)JzpRp;}~5^dS}+g_ul% zQ?NYR_ZszG{D2uhKtlMVOi<5Ktj@&N>z6IVqdC{{$!DMV^-^a9 zmQ;guzm#X(*S?JWqPb{R{CIcNynua18ZXAxO@=e_ zZL*c(a0bb4oIx7);Cl#E!~RF1Zej)dk>NRkO-Ua72bf4}2FUK2k+24$JOM!uFr9bG z)e8JCqp;MnYu%Uj?$8Bm6aH_i0dxnqu2u%`3&-xaA@%j1ulxe;`nCu8e5;AO{F#H{ zJF8S0#K?ZT+a?WG#^zU)cc0rP3sCDdBdixHOh zi|Kgseg`0x z&}u`BqK?>;thf-e-)a%OTFcAQq^?(e*Z@{uG}r$}nbnU(1sx1R*^4*mi{^|Nx;);h zQHUKIQ1VgRq7gE*6`%XG%2ycO>%udA(rbVlA@h>n`Ns#jRAK^*`N4luR6y>NXwG*R zj99%+J-cOjw?Y_+`Hr;^6u(b$JjOIGNfAH2Ee^2b9p`_7K%A%*`hc%rGATv?Bz(dd zPHb(>YT;t=WaQg|wd3FBA^&lue}`Q|Tso>DqTnQ=RJpt)yFn)_Wf);(_%iJ`J3Wr& z$ZDNc8ad^=>E;$rYg&c9UV6-3LsbORj&gS?=dy=jx;K!nOb+OQfzM$6?>D1?-(?&2 zl~Y2UGmpL&#d2tpKNkyRKvf1;!+-#i874>ygq*W*MGxZj^hkhSgA2;#FRvCHgxd!{ zf>Pser}6v@qM>M4Dqw8MJi4IYE}^R$m+n>)r(Z=SYHDTZ zTC^=xq8M}pAz3IJsTm=L+0CGhWcDFm2M0!4ZaKy_q=a->c~Xcz`aQISzP2(H_zWih zu2dHMF5R#%NdN-uLn$-lYY_tg^aCD{9e4=lpMoj4Go5d!ZJr-$p$>n?BV4y%4 z>xXg`?>*$3T&@tk0HQ&U`V_|8ac!tEsGf<2y>MLHn6Y2pEOw-9iI z+9Au2leWZvBTbZ*;hb+~M}f#^Ad}Hh;yFT%#}wWgdLaz+Y`-qV@66hk!$y<^68}Ir zIi_&293WQh^-I3$813-@lfISVKR+Ab-uzkbD0R~6y-&ic@!a|o#7_g7^gdu>)W*Rc z873Rr6<%&W(pQTAy^huv&t^yVUljx;O8lL2tH_*t1`BOR^+6fhbCqG8867kOfsrDE z{-t+6T{GL%b~AweqF_QDiedO1)$5U7Lnd&tCHAhzl0MbqOu--(mj>Vz|;303jrz$9vNWU z&2$ivV;qpol(gqDr4!dZ+@`dX&>o}4P)AJXV|pIe>?ieSg~04WR2xNSj07BX6f?OF z>adeWr8$e6%}JPzm#egz5Ad|_;zjeXCy+^#Mo-7t3Q7S61ze30sM40_W~nRRX=dI_;dJI$6C#Xn4=RiTHrvccl_*iaXtTEDI=D|QsMVJ5SkvWK9Qe01 z?vAm5+u|?PA(wxxEPwT4`6#I(#cwufv=F}te~E_^ z?xa?c(34Ac{&KTl(wje1cXZB%XX$(sF_`0gNf+GI73&?bFLOOq+x@gg+fidmcbJ-L z;*(}DlAa4l4UzqRvZwyIPB5DhGmFVxA6Vxs$3SN~q;BG(H!6!lc4CFHD4xJFt3eVL z51z!r-4c2V*RcSd&Cu?> zCRbzp=vq8V)m?=;-Q@}!5%F{oT?9*VL7ehdBZvP>dI};FAw?SYdHrxZ3a8G>Tf+f*0SyCI1HOf z*2f5N)xQT^Z^pn~cbE=>PJ9Oh8=9)P=n$m1`Or2}Q}VmB;m_o9hytIKMLH$`b!=zi zT$fQxR&j7uM2DvH8dqwW-ECPN1+Fipi}A-|FKaMBW*g14T^q~!IkxYvWLQM3i#>s) zYuQw$mMFj(hhgBe#qKYD8%pe#2ESIL?1KjsC+o*U-qUw#_V>pXgPA9_j&MoXi*?SU zC;K2P{Z!Yz+c&KM?3VK#FL|6|;n438m=9UdLMV(8+}d#vhoL&dhukhOPoX7$kUEQBmvX@YY1~lPxLzXBwtiP|{9-BCo#iQW#=bQ`PZRF^J!Uszmbf$2qrY=y5l~t$rmvK?gyYfXKpzLWtJh4 zME;p1cl{K1vm_#=u*f0w13HhD$V67tn-#Ugvh`=Hn1)5N3oPZMF=sAg3agFV-pRyM z6lK9X>|@-p<;Q%UYxo?&*_b$!s|vP>v-4a$1-KQy2~q?H0>4`9JD29TTeCg5iS_GU z?Y%2}@O-g^m*bamJqZcjb)p~7q`Bst%4D?k2y6YKga%R)kaQn*S!sn?glt+Nz?g42 zKYri27>Sl>Apag!C46M(@^N?cLNVhCi`nV2Y1mcWqDfd26<;QIsg6b9Cu8P)S>+Dv zSntvqz<5d8R69AIC@+|a1!ickoB_tR+=qKQYS?wfK7gbf+U*>FvY8|al3WDX=ShAr z3qaeG;#Z*KO+w#N-#v)$=KE*>dZ`smvQk7=EUTIq=_is5NmD$?NJ~8HNNlD={WW)$Jacdfu}eS3gFdquM#P zR+p-@s2{ZRztOe%@$zwe56hajq@dJzb}93m$MqaR$A~q<*bgi;d$|XUNcM=U;_b&_ z(9L9CW}I7F8B!Gx6}r9wIssPRaf=id4QB*X$QpvcdotRYVd)h7c0O^3Hnt+%`Bm^4`vQ z+fwzudp#iM`uiD^o0f9EhD(RpQKNwcrg;ktvU0~I!EC3X9w$jN@56GzaKezK2~vZB ziD@$OJPl^}U{X-KWf+kcR+_f%FxG#;Og8`>9&P)vFcv%IL7nzMM(Q$a19kL#^5j?L z-`$;}JR_Namg_Q}J*lxJ6>ZEqKO$=x9%Ph~hEU=)v68OVcC#9Al9#85sn=zyz4k27 zOqYjE8#`=#EcVvZMeI%_qtO~ftjy%*7GfRiWK?+{3uotk0HMHU%U{Ij#{^p@Pt8l- z6tIfWeqvaax^IWQbicdEd=^lAFg10hiZR9UBMO_`tKZ*-C10f2A0WzS;cSmO7l?^f=0Snw zms_i<)Nzt4tM!S)=UdZ_YCN?4=^kW@W>nMchLv;hflv!nQ^=R6QDt;esXaR;8|*OXNPnMl7bfS0&wDmZ>8SJvbdNKTrgL)X{x!h&{^R;7M#I+@@5c$P9B zLo?<7W_qk__N9>SBO>7Zlb6mxCggM+2{s=MkvgeE+!Rf?S%l{Xu!lOQ&pkIA)1C`2 zi=cA!$4h#9>{xR!ZM-&LzzsXrOj0$d<5Itg$LNy~VBQ5cMd=7;SLFK|nP!DYxAK#UCH4jYg8am_`)_Tw8||@QDxRmk?vuXX4T!Zff$*sV zW@^$ow+jwK^v^ZfLAP(kIHi_QUv$s2@ud{tfU;*EjX#VEQ$Hhx+3t+KKf548j@tg7 z3kEe!wD0jGD1kgo0tHR0E@xkW2hly0Bg9q_HaH5m!d!vmia z*;ltBQ=ud(MboFI*Y9uR#pbsqI&gdx?ksU~gW7H%-5D}{(a_m<6wWFKSJdz;9va#V z5f5Dh*}hDgAw%1{x;Pnci&~F+UJpgV(6-ao<|yN$;VGx0uZDAbFy5Sf#Bu2m%{-?) zB?sR-Fj0`dkP^RfsiCS})4Pg&7dA6~Nhki|U^HBGh{-!wUnX+2mb+HLC|m{HcryJ%7kU^*ht)ifbFGgO&Gc|TEQ^N3pVMLCqMC{ zjfKIC2MVl60%dT>0&{AP*QLKF=*JdJq+weq4pun7KzS@&La#EV(9MFua6ye{c|a(o zId92eF282x&JYNg*r{o}3j1X&F4Xm9@-BH$851&jQe_;F8KZ;usKzE3Fcuf&Ogx<9wzE+W)o zM8`|gz`Tqb(~xCkXoDUFuy`NkqUz|rk*9{c4Ad=9`gdE{9-FJgAiTW=8NCJ{7I++O zTR-?(8h!uSX2pW{$=qe726ROPBc=Y3R6k-I>U=j_sROV|#C@7<3-%+=#%x`PiD}N!Q!Js`KtN0y~xL1?VFD6^~ZEbqu9v2`vMtz|v?)Y1r|s zRv29OrP@5_V{Ry=rZmV-BORFEEf_On!+*NvH5C`Tvp5DbPV1C}9DA~eYghn&{7Qr= zCzf?eb7s^kCOY5DpfL7KyBi6 z_KkD8jjHu0UU7ZeBpOGp{ zf!Ar@droaOflX$&fu_GwWx7vk0I$9FLqb<#En8aZC>EwB---A#F+AwN$`XXw&b zy55t_5_lv2JZ!Dk&F7>pn3Pz9UQ4HP7Hq52N{wn=FJ}~O9rny~x@twq??~=cW%ER& zve7k4UqnLpX?cmgAP=x1+kcJ&QY}1u_#`^thsIz*B$yWvI=Zf1H^=oiQIN8WG*aI| z(IZ#&PVUfPRAxV%y(373^lwgq1>v6JpHa~z@~~tkCaGRU3MeKd)6k7Tdga{wtJZBC z{6Bgh6<;lDAifvot4I8H&o(fzh`<*v%W)mIp@5s}5DNxirc~F&dKM#|sY^{#Im^zn zAUf-ggAR{^oVQ6p_ZhJ}kO&{9AUlK*Nmoahk>KEHa;xC5nR1@y~oPE>|zSYktqfZw<|8QQBxE z@cA(WSg*;$FV|vKEvIX{2;OWUIBCSFu2t7W2axuTc09U}u-jZJNzR-U{%<1hc?E4D}WV z3+|z5QNL29j@3w{DhHCy7NVF!T=XvV*YG_aL!#FpnXO~cqI-|$)SzV9&{)AhN|uAF zeVIjY;SSl|rA<8~#`K-jdf|p3sndu9Kmk2x=0zyFnQ|8?ut}!eI#MUUfUkVQd69Xd zPvGEFU9@kl6iMgJ{_c@7lZAL2zAIC_-1$A$-&PkcQN#T5l7J%5cy&yZ8ym&2m(X(J zI^0!K1Y`oax-a&y>RKq{U9;wwf-|THwkmrEk}4@1-oHP_TIcDWB)ka6Rh{kV&XmdL z7A`SZc4n#B|BWod0U} z_Vf2%CRO-0)my4_BH%KD!|~I=^#NIBVZ`6xP`6!>#P9B#OmsZ2XX}@rx^pM*VGzQT zj5M)T+N}%?)*l_C<8C&j6Du{l2?H_OqCaG5F!N#`n*1gFZeDMki5>7I8&PwJA(Y3V zrHjx6^tf2YYtj6!v@<%UlVs=QzUR=;4+e7kNChp*)a|q=IMM8-u<&et50>sM>nhiq znt~hVcW;&u{(5@1Tudvob}G?B4(k=o_^n()aS~A+dx-~zYl{&2=qy_~*+zu>_gGR< zSgbd?iK=IGfIiCmT|*ukV$Z`?eC*sO4kZpI7QQ!PU#{qvm1erM6;GDyh!YvzsQnS$ z^F1+t%T#W$l5X4se0UqpsP?$S*xR(EBnzO3naENlDrJ6o!GkSx_+ISuSGBT|bFv+> zx?3_LFq76ejZF@Ng_-p(aE`(+#R^|PnQB$0sbyBGanxB!EA=m{aFV!R;Q0f_rG)dU zMgYghz|INfts44Asnvm$1U@Fa@o%gpv>MIOCd_^hWp9Rtb;#KOgG)H|s>rH0J0a7} z_w8Fa5}TgPMdPVru_Ryp>6$7LuPn8?mZPs}^u6TiG97QzWy(r7rF8BRLUS5fd-4p6 z>X)Js{j{`DdU3*Y=dsCa2y4n)GBtYSy1=Lsg9f<#uRXwKT7`0YrB7O5T4kGc1#3~I zkoj{@+bWiQv0Tm+rM^{fEbaaY?mdDml6W|vA4?&Wh3Fx;YaXD&I%e3iLW%EM9Ozu@ zq117&AIL>7I7Vkiq}-yNJ5sx=HJl<(@^kyW@*AZTi|XTDH$a2&q&1nC8G)3n-Z>5o z&nT*XO>LSvnqOCleY$K-=cJkQ~?*@Of-8oGIT zGYgZoxw*LYbU{X*m)vvnX*Hrj#&4!hbMbEPq}a7)lGB%_sw&CP-;|e`TsvuxRQT)< zj1c|LnsAtmHQnYH7L74BOSbw=?snfTAG0MtlS`9=%_c}*W$sBJULFJJm~X&gRum*P z*t7!EJ*JsUBx)-y`{~gQU<*@u73w99-|jnKxRC{=Qj+sSlvz;1YP-vjvX0I|MRh&sAs0HUviWo^xw@b=JfFFGpX#+sCX_Z2=P_oa2@J;4#f1W1)Ql`tZ{ln?-B?)J1%5?#CRV_eg zs&GN5d1)U@ezcx~3dGpcj{rwWz4x3_!j+7i@Q1Mtp#40BQONq@5&O3Qiil?e-x%# z{6uxy4jkr%k;6W;qvbcvlg~$qQ;LE^Cn5KaMlRmsK8>p=jCA_=$45!CC zrszsE6Q9fCMSGV-b+7#n)~o&W8_1YjMy9vdi*Q;ij%1a)D7_bnq&Wev)|5S3 zurJyvN;hC+G?=BA%aKX&5AC{BT>V~@^1oY~C7r~}ulh35v(Fzu+T0&_3SHl#1sV|E z?v`!kseDPtXlp%Kz!d;dhI#@6iMew4M_DMfqsAe+Df5~|a>;%K(I$vJRA%xrCt!KH zs|(rg$w8Y+-vU}9m8=d`%r&R34Y5dZ{gaF^YaOyp6k8WCGbMBQ7aNN)57>_`-5Ay? z7KlHJ3~MW}R+kkKtvpU%r21rDv(|`e*2LEcP5Qgy@GahL=&Uz9VBWD!81_Z0PO`QP z%WNz9xG00F=0q{;oa;P12@O7%g<3H<}THF(=Vq>>kc80sRy$?bu zTMR#GCp&71MvSR3UC`*U(Us*Npxni!*fnsaty7s3s}=Io$ts^QA*L70@TWz`g+vBu z{BFv8K8~W1&7@P+-6hr3JI`Rd@XtS zlmg||Qf7&}Pi1`UBBSl1-WgrZ-6F>^e;A_jOyK#wj`rTpod@2+26F;#Lb64dse^N` zgVhVBSvLjOtAn+zL)Td?klEn*ekyU5f%tfk58phSN8d=^mgQ6Mhw!Ff0AA8xA6b;y;{#u>GbD>7V7?i= zfhq*xXx3D^w-`(qr*|k9dk+7ssW|<>1cHkVSIM_^Jtx3_&8rYnfRscyoD?vrtj2QS zGxa3%2UQoxzhiHrHu>u5M=vcdQG;fcpZ6R2^Fq;?+NfXE%zyG;OZEG6bhg9`BbFZw zy#K?@c4;iK&96@_@B4)E%Sl{hY@`0q?{O>#95(xw_Zc<&jykD<@UccOF0Dhu4!<~R zzt==?82i=GD1b_Q{ct^e$o)W=(a{Q!G;*55)`>KnwJXLqBeElYSBJ}?;#Pm1!!(34(@wiwJg zseAV$R4eZ;SUk#OA_BWPU_ffKOAh_e661)>i)Ft*3sw@Z>mzj7)D9`Ci7vE+cs!b) zDGFtY;p_OX@K@^CSzn~0r9{_p_$au#0I@3GJD zC*a0tEVt+$dGJY;C4&#m3Mz~vqzc!jgQN1pwC_2zUT3(Bm$+`po$Rod0Ri1`;IglI zrH1!RrzunZ=tamkeT(-LCbP#XR+i-WDn(5ksD(#g4}MfeKi~U4+zbb`JBJ4$b41uu zDhPcMT6CWtp{a(%*K z6`}$@JDEwSt_glQ&QuiDCzRctI|kPv<~8jxS{l9h@m#l;=&}e&QlOy##Tf>VElEJ62 zf=HFNOzSksw~sZ#6n|b$>>u^g7Cw~iDhoFcMANe5$JLjk!nxSVj<-mj;zNZ|tty z^#3^_zz17N`b7puj>KeFqiy>k_ii%b;C1#ipO62F@O{HoSzI?fB``%W7o0^iP=ob! z8*1^gZY1i*8VaG%>8*9i5ww~#C|zj%Xe7)^9RKI67m{b8vM7gqQGHVI8nD%=Vy(+s zsGLWWXS_cJM$hEd-L0AgYrH8H|EOM9f0_*zv8ica(|QFt?1wN<)nb9nhq7y_>)4FA z)k1SIXBe8NsBg*SYr%9Hh|pS>Mv|p0w7}f$^r$HsZprE#!R619C8N~I7Q09Pz}H$x zz1n#_uYOc37zzk%Z{@vT9@J%b>iVTDAblbkg+Y+jie`y6@;xlFgpuDqBE+fl3zxuf z09|$Zx(sQA2mL9X1_qhD!7t@|W2yRmckQQY|8mbK0lrIo7v-W zqgeaCeBtEzdl!Is;#PPhd>o5QBNG9f_Z5%Mgg~SOo%ig4 zM%6qBpu6~|S0WMxovdGTjW$E^4FYz~PpjpC`v=Y|(N)D%#ubyQn!&_!ea^;cjphd> z4u2dSU|9TO0lF`aDjYk=%W~;+Fv1kRr*<&3csZT4{XH7}J64y;4dLNoKuAqIK(Vpq zQr&CDQ8Hn|p0F_2m_6)SQ~FN!5&5HV&m8*HtEWPnjh|u_YMxZ52Ys)CWena;J4QurZB#WWYii{Uop-_0M1 z9@<;zrfO&-%=}r~{|-Z!^gsv0NGY^E2N>6tSH04_$~tgYjeDB+u~B8lX`WVWnZnBm zR7&Si4^C2pGP#^-F%yyX_?NpHxskxi-~Y_iCsha_L$WZ8q>H{KdAAa67e>J*)x@@^ zd41mdb`Zep=tt%Z@u~EFbaK?UX!mk7T0@xs)#|tf9Ht5T_HgDjD+|~+OEsfe`$;iG z!pdT8sweqjKdIX5iZ4b9^8ZJW91+Mv_F}vTt2^XAmaokF6G01qcbVSy9Myt%lGe53 zNk>#q=A7oKwd+LDQj&LgG{xiS%V~tej|WKC{USd^e~0&?m)@Nve{8eL8^E_kD^EXi z>tt4%!~u+pm)h8>p^0+@!%)3871 z!7*1m$)WO&zwj11)wL5W*5e|SKTi*C4@D36CTL{T6VchySd`0pBsiyVWIWer9RU_L zuw-lrU>h1)7pUN#?|LyBMHqI#mH21N|KI4tpbh$3ENb*6H(K;FM&M_1@@u@a$8N-T zZtNTQY@7a0cn1ZINcHilLRE)%m&NuLWi;KQYGF{5H9~)HI_-Cqxbn_^9JDxhTOQv5 zINaDC(u;q>=TEa5MOG&S55JB9A6OD)5V{f-UV~NY3^(?U1SI*~kIp4fRQNjHG*}Sk z5VwtLkWLFKbe-^Xy0zTFSPMe;vxPJ$L4nh>w<)tdeWeSagMYr}{_Av|Q;aCEwuT3L zyvMd}+qP}nwr$(CZQHhOd*<%@a34-?PLuYbY14-`>B?&V?^m5o7>G!?{2luE75W06 zu)r^J%SJ^JGhIN@r_JJ-)eD|so;;d+ujLM3a z4O+{^D@+B>zR}En&FQ*MBIrc#4DO)mi+ju;)Pshjodqyh8Tu__5tCJIAjfpGHAdim zSfyQW;9yOsoEtGZt7ax;gs+%RsRZnGNzqLj-FM-3pMh{*Ap4cQjVJ|cV6bO;I&VL3 z@`FWv%XH~&Fje(zM#aFny}qWWp`s#s%T{fDDN~++^5QzXbdh<(J$1LMtvuy~Har!! z8Pqn14)OKIM4RJ$mu+Q{M5RH{*--X%?sO7)4+jVw{i%x!xxISe(6fwu;+tc_GBGds zq|sSzYqc_h^4^|XS~}{VlDGHaP2K@XeZ^fl+VkK4!)VSWik{AG0N@W>**;%|6gwym z@QT4P|98tIM5Ui_`!&(jgN++#JpzF=Jmvkdk9RNydl=q9%^SZu1Wol%6Vqew($LxG2+TeR`V%qmA(WEf5R$E1$M14Mg z`vfd-NV<9k`Gb@-l4Mp=QW7i+MTao}+yd}8=FP8akEZi*|D9Z6TPG*=%?(2vXVY*s zThc*Ipy2$$aCZPwtA5-8i&{NFAm`s3##8s%<=5<9yM)Ul0!mIxqv+`c0RnRL$zygdtjH>((y4CHF(u!xNWAu7uu&RjsE{UQuF zRw)$5CwsKlOq_6`|NbV?B^x=V)9h-BAbcj$gmVj! z&Pwol-)uNg;?`geh8X4F#6k2Bn$Bpcx0=lQ7i#p$gJfO9w9&yLd9mADp53dS03n6y zL_3$4mE{Rug0~vef{D*AValQ1EE9a7 zWYr1TDN`l};37M`N!6U&zqpqu@h`Q_Ov#c+i4@h_G;K*LJF_h}Z1$3o&YJ7U-Ymab z?eWrq9{Xkb#*WT0g*td8QRawcy@OeKwJ<+>cW_>&T)N#ry-y9HUf?-}B7$Uo0KzXb zOZa!KGqF-2dCguaYvp>pq6{=<+Dh*dkYp5qxf#`WZsAyPndo7GFbbydApdq>p$f9k zJ+Uj(+&D#qbU$Vkczbzii6_O0AJSYN6RZ^bviwcUB1t}9IlqJu=-PSRL2>gV?uCSG zNFNFh(f{W}&HwL0k+AW#1C>VU@d?)!clAhFlkK#2bR~9Xvx8v0gobV0DH)o6X5eby zjXDF_d1~@za8E-D3A^$h-)(imwe4H08pb-Visb7P-hRB6g$x3*Fr1EZfzB%Nnz7@gV5S9WvbIDK5^ zz+bcURA1A27YXp%!NLcawH&mu1Wut`ndCLx1_s7jp@)w*VCa|(1TNFms{48mfjiP8 zUDD}yIy5*vs&9EC@OIUcw!f2Ad5zQ3C0`)%gw%CfOBOoWxn%{SpcR8feb^5vE1RN2 znRPV0TvzgqnJ@u%CN1=4zaB@TvizsaElP2jsRUmv%ter$#XM_6qAuQh2kXvS0l^Ky zT>aBRYtc2DjW)%3rAn?N0isL8odM#8X$wYU1a|nDx?u3-cCNCDND%Xxo-g<_*>WG{ ztSY|&-8Z}z95stbUq7eOWH&-mug?#cT{1j_7yF6|xziql6a^tTiZv2RH((WOG0*9y_$rYo7TH2oJmT$KlR0rPiD2@$bqh7DD^{Y*Ht|BCZNY zm&=RB42@pvpE&=hqkO2>=zT|AN7%&q&{e8Zj14+KnH=!evih#;nYmh>Ww2$mLr=&= zPJ3sr zZEd!ThaJq`(UR>4%1cHub0_$#rye;GvTBaPoSm4*x?W}Vf4$ZtvEWI}{y7-<&dY%2 z=sy;Ej|^hsY-0X}7t=K8$#=E;cufO6(5+&A&POjGmjE#k-G{Jc ziQ&kOk2^J!(;UqT#zzY~VFKP3j!15>x!)Z|ZjeU2^QNsCtO_UH41%t-;Cnn$TZdC3 zL3DR&F#|onxQw}gTWdV*A(NL&w(J(@^f^7M?vR=%T1?b_bHJDIeu~%9>csIvnV?ws z?GT4cNX^rg;t-+rIP^|g{8x``^wkkGTdox_&`PlSc2$O{Dx$?_&FKW$uaxiJ( zZe8md3C}^phrPd?#jHD5mYElqlI|X|X@`tuF&v90fT8qEVW`nm3({V(ItPJBb4dcg zR+(8S*R{1uZePUsh$&?d{X*l+M>LMjlOEuH%49E2XoDNk{B--@AK0GVVtn_&hcTt; zZN@at@7b|DIZvAtQrUOk_asfqhu0$F3;k&M41b7;oDzwVLz1VQaYX*q;3;75l+}Q&nxQZB zL;;Y~IIS}ztfybX83QSJR1Z_T;_XFK*y4!aq{=r*s{5={h^ytbw=R>>n*b;HEf>f4 zVw=N(e2xWF7H1mpBU1eO+6`h%R!nQV4kS;qFT2CfdeLF?)CmXQ!-KNI5wq|EW$w*LiQ)dD#knR$>aRR$`ICA=tR~N_qjekv;l1i_W|v8Ss~Erx>Ok@LBcC z=3_mYZsCi=Dg-y;n{R4kohyERT-gQ*(K~~{DD~^#_Wor)zPW_!p+Pr|;FU-ls4-31 z2s_OD9$<-=%Z5X2s%DwF|M??5F~rED!YM?Y574Y~n#9ao zXrhV8Z03I{d-ZW+pig79C5KQSzdr~UCtFLMHhy2O@YT&B@tQ(a<4iZLAd=|dO%^#H z`To|BdOK-LsT&z-(^I`dw)X42WS{HGuHY(npTBjJW=-Y2lw*g&}yyhoepeQnc}G+K8Z<9b6hM0z2Dvfy!SD#A`0Nuh2eub zZaT3>L+FQV(ywc}#M-#Fg+7h1jc|8n=#CL-NBSGvG(}K{y_5NUSgTh=7_Skt+^okH zaJ4Z?GJM9ZRH)wM<*J+y98XX<0N47q(h^`&bWq&Gj^7FU3Sm&J+9IUwqKOo77>Jlb z%-2a%>}JMbqI`65KcJM0_LMGr}cM1??S-483POh;M zr^o;{mulJk;f;Qg>HLo$-9c$;@x2><3#0>fBJ zCQ9NYjCs4B17_^aFsTiN68x76G9YRXQT2U{TnoIicMQ}75KQAZ~M$uVIIb>Fj|hT|yQzhCESkuy3O{xArU-_>cI)MA#fT=W8YHM7f35@A)w z#)-D>Z$yNUstW(5pK~a=wTc7|+^z2<0G72#6e^jV8)KLOq{ABH*xxRDS_Wog_3&i8 zZ^3|#xI!E*=XwTFQG2_Ptc)`0!ASN#Ope(|hFH1K*rpRii{ZKYP7y2wHU)|@d#Fbk zj<;5Hr7E(qDC3?FOniiiO|IeVxY~~+7C)_O!Z{Ofyk_v3A{3@USn1MhXcm#Vb zu%)U*yArioh|sea%U#%6owqvr3eb&x%Z(&c88Y^F`rbA7LimibV5LppkZPjTi-mGc z-0TudJ(O`MZesc_@Cm2p0|MWeQUSiEMNSp#OKx1MX#HIWAa>@Dh|NFf@Yb!fkq`6yEPWbQ%|?lW{vh7Gx&Z-@xCGru_fN}xdGMI>yni`>s(3&In z%PJscB}I?n-mE57WQ0K=LhHx6T?#~u%}BBZpYgC-N4C+Exi2p|<+?F-hVjb@b3o35 zdRxp=gHov}AdqsCrl)3Y!3*o3CfvsE;UwHnF&+9~^Kc(Y^`PxQX9gD2;k%j9yYI78 z655Vn6X-4RozI)I>|*^Vl8&}>QEP{qHR&PQh}bcIulh?48Bh{=W&uZ4lB$l`jxWL+&}ypzei=fox%@}Pq?ZKQ+to`!1aTp zKUtcyD*WyL^FwGfcN4M^Ke%nZwXll`!ZVRrhz5aVgo42`4Sj?1Ba4zpGT!M^4NWo4 zz`7UJ;zqb_@*0x1us?wzy`#n@N_J?Rcbdj~cJ?>)pN6o%nbd%#+i=j^(P>0$Y1vI~#7)?GMgHoqcKcZSN6XymH}#(x5w$2(&=Kh@ zFJOgGR3&cuAfxsGe(bi30ABwkc#AuuDVsNqk1!8(t}@foxM?9r0Ovi?5rl2AbV0$Y z0!^uWE`@93-UEx8U-G}+@8wyhN(%m`n9SGgK7_ygX4A66gGm%w;D#QDC$n7wIup4N zgcvr`C#SyO-1Q2oWU))h(=;aoENzAD04#jpJS)2s_EPv&b8Y zu-~u64^Ll#K=p+=B%CqtQ6)OxkFGiPA*cR_`rka5LNKFTInod-8!AI~2ET36N5W0u z>nRlB&e?QIR^3=fZAS61_bj14^Qf0t>1~Rc#<2=?(&Ak?YLVr542<@|?{oml_Y3eC z{T5%V2Eyb62957Zq*P!~7u`uCd{wBaABs(~WCV-0#=SfNM8+kR3raV`Bc$ta1+-dt zT^m)DMnUiPbS%u;{QQ8{%N)J)||4#0)-pOJet zW!$li$yxzwus`JIZGDA+m@Wbxv0m5f8RA4U{kn%c=t|4*bYbsM>1>sKO18Vfu@y+989X}if#`m2gG{57Yo+bPEyk!4ulCV_k zswqW@KKun_7g!p{Z4GDhSzBMpk1=nYSI3ymPco1^Mvcl3Y6LBT0F`EsZ>y-@qc{?x zKC&z$#V&;wQL+l7EJP-lrHfjgeXp4@9k)ZE_+uwoB}#Z77!MTgHuuTCMP7HoMw67i zTyqRue9(zUWw%3J3D#`S3YDmbHBVnC9K$hvLL00sSo_wPg#jB;$ zA>s4X+$RoC+Rx*fUnQrBe&%AeE^82c!BuVu8oa08ld;PQ(Z1vW3Mn2|M=UD(ROCx| z1+7!X#9tIN8y)=~NTHn@ri=E*U*{i&Lt?N!{E#_{d@1f^5~Fgh#t>US^r$uTc!LAlZSjVXJ7DlS{|KE`4> zQ3gov0-I$ZNKls(?M7Os8vy666bt_XJcn$_qF$9ZJnvzS7aEiml%+o z9eH^3mlnCT9V&y&c5^Df+1GuSZMw)UI=`6X)11d*?Vn9w+of=$V6lY!CT!_W8k+Of z-waA=^J?l%=Ti|Ax2;G_ip+M8r=&Apb!tg2uY<0SbMj(gqe_R{ZLk1aU5V}}CZ8Rq zGabe7OK)S7CvE7YlH0_{6x<0|cy>0e)7)Op>iW2Oq?K`A}~20w0hqg9qW7~!J3;t^tb$Js2Zpl zs92|M?A7x!_9`IwzCclwmb+iErAtD9-q&8hsU$!5nVgp4!P(i}V+q17a)CK_7ok(q z@GQno#sK*K3u{{OJuq)a3sQN^MGfHiIj9$r1ZivVO<7{(Qr$Y@Mg{By7{rILWm)FK zbtKy!ScBn6C6;AumpcvwXs}R|40~Pi6|6d}Q|9n6rC{6g3$x895L$H4M$FE~4*&(T z?6HC%aar?wFD#YHCb+E)Gh41EMRgr`Le}xaM!9az>4-pcd+`2UM$kY*&(Sc2v%}b! zS0ybi7{C(ov)dJ6Z5iIz`MK;qQqA#d9#t{B4z}nAAkRL!}ug& zIQ+Hp5QZJ7>;CEg1`d2W{ve4fW*xjovc^UuM^dfgf+jlDvkBN_(6kk)O8WVx(xyaPDDElYhlqw3gvim9c zo4c?CbxsYUiY24;6#UJ+pjz*P#LyL8yq{I9J}?wRDeslPhUR{Wk(Q4K5d=0aX*zo} z<Mk6r-i{RF`RL3o;HbgROGx$S8GvKX^J(kgfNRd}#~PC48;?NNcU6hg0i z`{%FZmG2CO$vwFW8Ems5!=M$p<+(_YK(aW6)p3ms;0M(k?ClpqqmSoESSNp#9swP7 z{SvWB_t4LwhLffkAC1Yp^P7(P6*lySanq_neig@Yegtg|hCe-gA%b-z1@uWdHX?~r z1^Rlo*lUv#=N+!kA4fLOBgqEO(mD^$jKxel^vYc_1Nu!_0f~>_+6<1I8-vk##u;0$W@ zy-g`gg%*q+77l+LIl4?gnAti!xy_#kdhzu%>DZqAMx9fbvnIlai_OoJa8ji${Ehoy zxXZ-Ux=umw!mwe}6b)7W`SasGxvkj5yzFhez z3h~WSylHuuXpB9cB9qet7<#AU{B0ZGiMPfT#|tS06KH1%pFt+Kf#IEG6w1=~>01cT zb{{M6pHJSQ6|KC9FzeJNMNsxB)nZX-KF=E1NiJYzzaYO%yCSSqzd!$B^5Dqbl3u!SRAN%knB+-NJa*1qX=rGF@Z8YY>8z&n*!uIHh3b@T| zWo6H5j}{D0Hg6VkuyqH#^FkxnK#_pPKxzb3*iOjqidVY<7pJ3BAZU+H>R&pfQOEwy z4`_FC4g7|1XA>%!ydBbWK^%MX{1wAvAJZ2~Y|&;qG^WfgxH~csYs<`q zQco2@=)1(lG|C1Dqmk7W#r_N{ zV=Tu|%f3;-vRZ|izUOsA=DmVzK3+v@c;-Iv<6pxnAf2ea!ktCkkwDZW`ylkwfTj|u+syW7 z;@+M#V${T0KB6AJs$a>%`HzZ}0JZ;$F|miZBvulaAlCaIPOp;9r#O?K(>Q z3hm}cRKa17o^ZiJfteXXztj%|oGMKhu0{v^SF{q{26f8qtC)p!!;`HNI~JWQIIN+K zCT`??Ke#0tM#FveC%YT$>+^iWj8wh(&1Hc|bF+Css zZCPC~eM-aZ};Jm8C3w!6#sx#BpwNo@uGS()O61hJBuY zwlk-j48!^&RACKI_aO&vdW)foFn#;H$p>tn!6$1Q`56%j$kRI29?6ZSZ zH_42xz27CQ9?yFccE(d?D8xM#NoUp;8ks*K4E27DYA2q0)i_YMh0SM57tH86wqNS_ z_tV=jXAdge#?|R;%e`;ZvNEuB0=5MuIsKG4rp0$P-hG*Qc^&y8lW*$k>jK z$UG$A_}F7XlRQPuVRco3JqrO%(p56k%IquOOfCJA34C<4*B*YUfse>$H56@;x*(R+)r zsl{jZnu>bk-4@0WO|IgSn;I~S2jq(scs8sZBF+=CyQ$T|4{XS*+HI zNg}T!tb8NGFT6c&7MB$EKg~HmKvn&dm!|`bUdu?qRe!efW%msyXd-fI&f(y9U}A9Q z>$vBD7_Ew{7T02i?_-UR3r4OxH93TvQKw8Kd=siWNJDxqF~&?mx!ZM)6dTBai|H|!g}cROMK>L;!a8KNrHuVJtS?i?${y}+q{vwXnFUUb zuxQeIKGLQ|e3^mn#;#1F`-A)5AU5ttDb14-26Fc+yHtGQN|Uj49-}SJeW55p1PacH z2fu51M;wP2yNK#mkWgHXP}q(H82ZW1tk0MYn9-s2RBLQUgUBYsEOG5}m5ly8uI%`Q z&>|D>S;>`1dW;53gtqAqm&8GSf)m*CUG%?fR>-K@dTYR$e2JkJuVZ#;af;)obz8)77%o@Y3= z3D;1m|45!F!hrd*Tm(OxHLu~2$Y8jMUy9qc?Z$n0-2uJ()r@mu640)#Je<#sS?AgDk>FjM8IlaJHPV6hdH|xr1aT?8O6L=#Z z4LJ-=;S4-!S+Y>K>C(NF-LWwj*cTG|N=qp*_o;x4;`C+}4v(GxEKLO$Df*q+zVWJr z8}wmpdd7?VcJw`Vy1PM(XL=_&Ch5`g4_QXutbgjD@6wG$Thr|CM_WAfu=bmOCT%5( zxwFb;mFOC1fNu#Sk=X?JdB!ZOyD5=9{#4pP3vxh2j&L%5$CkB&!%{UI4d;7#7QHFi zWm7xgRfOjwFgpMDjHrT#hCpd9@K3LCwl4IY4LxnxzwTfhP?%>8N{kBO$WdI~$;x3Y z^}W2*tLU_o`$#72498B4qP+HDAkTauJU4 z8jfGcvx6bR#WlBsEElrWZxQlc8pst0!$s|0RUq}GDO&Fizt!v_=F*6Oiekkza|Yk> z90;k6T5p!$1rZD649iysq$?g^&L!ZN`Ob)-=rQqZ1@5@ED3!_YU{k#Priyu%N{>=3SVzJFOrvtTj$D zrauIobTk9)H)o$&ToU&s)V4iYjJb!AmIy^(G_*sgwOkmM8-+7IC!vmZtu?~#HKkQo zK#`>y5emQ-wIN*x(UKMYa)A7!~1kt?9J-yP@B4EiqTh7o0 zR~v((MDqvtC8VMjZNpvo^v2DB776S#U*$+lj>?(mWI|ZmJ|v18jdzCM7lQ7{?P| zX*PJkHt)yQNQ$vi2Bq0R;7zORDd{t_*aer%GeYOmKMGgK@|V_ufA6MdDHO7lO&|O> z(`R3XxSw`i*|^B=J}OgonJNL9*?db>k+ugGo^FTi2N2Qd@q~%OZI1>5EUN!mPch=` za%;bPs&L4zaUlbxK&@!fx+&g|9`$eme&mK4mPRcBmh8!`0GPBMhI;jt&gx(|hzFzD z(umoCk;1HU)G~)cG4IU$roD@59#h4zVr~eUbM{X!;GM1ts{?l-P$QmV--)?hWE-;#k87%HQi+Q#!3WixL^BM2CEf1rhAuh_>SB z`(~eU{*?~OdOlluX{TfzYlYzN)w2Lb#>|ps1IPahJJqL{rJTJ@@NC+CCj0~<(}_Ya zhvsaYJhU?{rb9BGauR-yg3dTA)aCE{?tYbJmNwicWLV=2_Oa55u17^~F!s(4B+xvDCblW{Z z0e@>1G_tpwLj=11Qohx+8OPVCfdDy&pVl&!545d%KbbFF#B*0fj-QK{>ejxQ0}7|^ z2=5V8H>(YU3r0-nkpxhpAb{$v)#>3}zcrZWf!xqFhfg69 z@!_ZHk0ww?q_Rd}OYf6TN8NX8s%^d(X>uymM-0X1CaB32%NFthI%iQ%M@IVldi|E;pXd!9DO=I3_ zZ8pdQyn^{Sw-F^5*~Z_Ah`SQELXBuG$*=qmrdNg4)3WuF_QoPbaWgMGc1`;-RdQf6H#l*7CQ5{%4)m`BAQ$Is0!}-psF|1N7>~`X;{Im zL3!C)B1(^){@vYK0soKqUWZm0ZTt#aA)@dNcPa>7+Ks8nZfI-YtZ5J!Ky79#lgJgu zJi8e27u-`2UL?^a&k3m`KY%SvThpO*kg^FT`SEpmxogm07M_YiSJNFeWRh}Fa?P9@ z)&{SN=k}b|h^hZJPkm5BNe&w=JndQ?J5>cQ)9|1)LS2 z#))hKKvD2$&_Y8zL_9+v4-;bMQ~B-kX)(Y`y6?eAGhlN#?0NcFQxv#n>_;s}SJ0){ zG^b#BUy0u2^I$H;jYL(bRaUv4BEWIwfy{dwp`)G1Q=;Fn39y6ywdthj>`1Ydpt(#Q zHnhGJ(WxtjZz&TUq!#tsgIhGE1ejQ@MgN>l)z3}SL6K4o0JVehY$U!R;nVK7{>*z7%dZ!fiOk++Xzjq!bSwQr_^X$g+~YA9T>J%nzAdsf$v#Z& zNy3nj_v$W91f_I_(OT58;J2r=^ns9`Mvy>3@*V2jw|<>b#f~Y!b6-+6c+M% zV=e%CsaIQ1_x*GNgJl0j^Ru3D7y;K55_IN`O%{L`g;*HmrB+LL({HLbEE4s0ShhIn3w!X z3NBvunvovw?hf3(WU#mAY1qB0sX_TdO-cc9?aFBvRYvC`F3o_9eV1ymulco-iE1KO z89$p%_jFQN6PZHJ{65x_r9Batm9|26zM%0(F*0mRb`mjdee4@oOn5D^wLC8f=?6$# zxHA1FVKrEhBAO;N2`k$1z(_OLCcASr++K?d>DV`PVdtVaPX323o^Mn zX>x5UMP9Cb+)nAi$nKUJD`JECyV~yAZnY_wrg?GWp2GG>R^PXVwy%y&c{$I+Lsj4K zLpHXl$3lDrqP+w2{qaOWQPWLxdx5{afL3S z#{?Zd@8CP@v;T+FCpf;+Ul1)x!&akUln`D`r_=i?^yDAH^N;2Qaanld8$KkDG^QXP zi!d=m3<~MR?63rzpYp0fhcMo2#Qh49w9%6|EkJP4d}5{?uh7wO=o>tTDN?)E)Z zO#_h=jGaNlE1^G5^f9BajM#ORFM19C{BiTJLs4R{)Yl>+1T^6$X!>OVM!b%~844+sx%_-lj zwY;@0F<2zNKF5iUy3!6J@ED!W5W?Zte_nj{ zf1isUer;24jr{Q=B8P4;Uqb5Re;A>WwU0f7Gs}L#F8cQ*h=H}|qG11qumi>DJ!f&V|1DU{PBlO0k&BCnxM8(P^;i5!l zx%-ewOs-B3AR7JK+X#Wc^f#E8s8~ioJzVq`E!#O@+o3@WUXw#GP=s^SUm1Iu9>oe3 zMI(pDBI@lmJ;u6}o>@wi>vC1BsYEgx(YleksKmTvbJwPZQm(F4mP4F+nGs z@a2zXwc8PFC+_m|=T#m)&`NmhU;S@e;TMwK@I4{92nwuCsDPxBEHkFYx616;_=-yT2oi|&KAS>ENptzl=GsYO5h7br$X-1eeNua)uwiXVw3PZ4 z$EEvwdaAM?SMS+r2K#Hahc`Djbt)>kv7nhDi)9~= zu&a+1rKhN=hKhysSr4At+uL`4Q)GoM$e&-%Jr`1kPSEP-hZ}mq=2SGt!<UOiN<8VLj^k@DSR;49oe}BP{=|0Hvc-sz7?fBQz?5DH9ZO6t`QT4}X zfbDTsHE0eXM$C_#=MPIFA|lG;GLsv#Am31^%gdie+#Q;6+_@U;cBu(tJY)_b^&djp zo!JQ8R!q^<7J28R%vxICIr4pE*UFuHptROiHru-|EM#dgNN+_9g!PJ;orw| zR;qS$W6CfL2H*@&PV{BNNpro9Q`dXJ?sQ=e@)()~};dYggVu zvKs66@VjD)1ujJ-=7aiy>i4eaD?Hu-$W`C!M};>pwTanOZX?$QelCK{!KFD^1h2ajypE-hP_oMJKD52$t+?se#COIh{KQ|J)|V5ALfd)X;%As_|Q z#w{f0QYXV5M;-0U$qnfKaXzJD57u>?Scd;qozx2Ea`Z*YG5Yd0)1jv|TfIt|&P%b1 z9Ly5B=)1F9Fh1V{keD=o{DIUjl6^6Z^;QBeJ2BHBdT5n?>rM+@Ey3J0q$<~6f*D=xIIdXuZhqqvnMzbrKlSePRI zg9>eKf}@BVrNNAUCy5$^z;gKzC>L1#HtT3-4SU>HV-^lH=g2n&n#P7mWDC#ALLcmn zyMd19RMR3YL&c_7r$T0v)UoRzJVDyjNNh;4r)P{!O5q8pr_&{K@)qCbrr`<9(@8O} zduJ34i&{@xne&!6C58%xWDuIQ{HGY_EK9QtpLGjkKvJ2&;1^*0D(dAc8mYc-K zGYjh&T3J7ixAZe|cRASE$8Y(}b}bA$__lr*Q|QFw~i6@02vsj0m=oX;C_Ta(mlw>=BQyi34<8uB~SU^Bhb zdKkQW-xiN-57eKIb0W_v+~U>z`tn?9dbFFkqMbXY;CjH)i}NP%Z_5q86ji-U@R#Ax`fRvQ_=W8*C|vgefOAjEeH|9u{eb$6Jef4su*kCK-XX+hf~}RM{#3X zVm$b##eKf?`@z7?8`)2KpvvyShX|-_XTnxXCAC91&JnTW8d{W-3*47UEA>@h2cW%G zt~u_kMtdxlaSWaiH6gZYwv55PwnsI@O&z48JCW*Z3f>Zz!W;j%GuT<@a{Q^?lrl`@ zTG1p(y)b47rMN->(~Q43h{ze^CpuW@XTZOtymfg@6)UZCBhiD&6G3zE@jN#5+0H%< z!0t3&2#8&iSaD2IPR#FKbnA(YMcODoki8J(+qWRFl!lG@K;@CcQFe}45Fud9>tbd) zWzdV{&#*#>^M}1JIu6>^g|TBw+b%3xkG4;jF|+Y`H$*@$2u{2b=X9ydz{8VV|(1iGpT4L=RuqzOx`E zR=@EWSt3bd>R7b|XeYzqQciJM6}5h+XMnTd?06k0hvE>b9dHnuUW=rCRipiN8ZbHl(Bv8AWfzow(%IasgXkq)|Wy?z;37} zTw(lzaOjoa_{S;zx64mYF*+P~lt}q+Oo`g%P*=u`;jkTxPpr>r94)y#(9mQm4Q^ei zMnUy=WB|>anwv_a(CB% zDFgSDXwmP|g_m5`Q|bv$-%GiS?JhV+RI7tQHGfn^lT4OJj%{vpVMi*ZD605k)JTOx zo9wHe|IGgQ zaNx1D!t=@^BBUMqnJJHZ8Ne4_Y{*YC!-fT{tON3`DW?a!`c##&ymnYQN`+cNPi{54qrFmlBs<&Ws6aJ#t_gj@jLW^yd6`n-y#%-xSFb1Bc1^%A@TpMte zp<@3&lECkUFdx|-@( z`Y$L20Q%qNUxE5p|1UzdaHItW`0qoJ|8uCJt+k!4jj@f>|C`jQZ+DmeZ-Hzu005%@ zHp$T0(aF}@$Xwsb)|AG=u~>Q95|JON7xjZT%5#I--m*TR2z&!ApP)J}4=kQ;J^Knq z#w28YeJO#4?9Kk63`{;B&kbHO7V?1CQ1P4At8tS!(vnbn7GM7 z(IEKK%&oP#F*~2{4kvo6jv0iR%WO7?ek%JeAaeUG*@J{M+sU(LmtN%yprr1 zu_m#8`F?&gahA8w<>}`6Y;bkA7e?gYJ+vugC=EPVLqn_W;7Jb4gpAdWgAssa=7+qo zCBQmIbDY2SjE}+g%HPx*8?rv4Rw;e#jX&&1Hn+3&Kpq=jumSRd4^3ELIbxb`D@K8z z=z(5JB%O1?;gGdaq;>~d*q<0u9(u7F?YofbaSM~HaAlFxyU={u1>Lhnal1v*e=MCf zm$xW^Y|mwDm9<U^}Uy4saW9;`s_i{hFXhgJ8M-QhkA%oP;SNpZD_8bSM*B5r2J=#zon|(EW2$!12Mu!b76^v1e@L zh@mmVR<{_qS;ldOIty4Y2@NMVB=r|H()pK(G!UhUnYA4iQU_}0x2YnhxaFEN|Ktgv zViX8mR&2Xm=cy8ImFc{Kg|+3jrGRkHLcM%oawjgPW|P6DtvW}`Xq2ykq7xAflVjTU z1_r}o3%hLl+LtA0`D zJ-y5cI51Vstz-JM+v+(_#dDg;;-OD1A$K74NIvQTHOThm@8X-SU%ouj#TjNXPV5=_ z>Es{8I{mYWgp0(migX0E8e~#KnVqFUAi23p83Vy&Ei>0v@U` z-wnxr)IisqwjY*M7tN_PIwSqJo7hy}9-rrz>Dyah&;1ySo(N+D6ZwGdgYASN@ydYW z`382&p?~DCWmkfWq25#!V3l-|3wINGSAesC;b zQXh)rzyfi`B+81wMq{Et7JDa3!U6GDfUG8gNPsVhGO)6wcpVF@2gE1{t1-=Y%+zqv zEyPxyp2E&D04OAlw8KIIJ1I+q62Aqj%Vo(gR9iYA-Q_RFF48x12Ehab0IzcvrIp2l zvtQS!dS=P@)L%AqEo3Jm-0NepQv;%B-IVXB680u}4i+plB{$EO6n3^q z%z(?HgIn7FO!H}Uj3wW{G{++X0FeJ*KPo#bXH#<<8dqZj8fPbSE60C{-d5eU-JpZ_ z$zA&GpH@6mTPRSjC@V1!wh<7Z)|k{ODQ6f5~~=M zI;SJBp2W$`?vTeEMMu zhOr~hQxJBCPKAOHcZP|r&5F(tf`08AQq_l*ATD92z*005fIxg8hK=BTSVpd1Ohlxp zDZqU!CCNazl~yLT&Y4CGLv(6MU1mrOtd#I$!tNp8I;0lyO6N!IvVcyhck_l#^9-aO zJ-|Ya7$5SoJ|gv{Z8Y~#6@H#DxD#;BZ~?uO25&!` zQSeDoRq9JeUCxn792269=7(N80_y|s6|W1(4W>i%jwBBr`z30&cAU&AI5%6>X#feUZy`MsDNK^QqBzrV!)RrBjiO!s1#`tMS#^-Qs21 zXmwo`W;=l@?P^3(%kSx0$}Bd7__Lf8|DmTTR8K$L)ZnbEBVJ#w_o?b5*_-;nsgA7k zK{b_M)-zXv>s~Gh+{bg*A;ULAbJlH4epf~QKfj#^P@pSmRUhB3tkuY z;_UFDi!aO}8Lc9G7>OWKXFL?jE z9fkYP6k3@Z{MYWX{yRk#j1&N1B^Cex@4sI+u(fq^baK$Qqp|*%S_{WxZ)?}hG3UG2 zti)eF18q#T0C;29OfaUY!{+SAw{sKM&KH(aL0pm@Zg~mouYe)4I(erAo6OGsj2)OAo7QO-=p~`t8?fKp zt%TR%mYt?R>hI%{orP>OG@(X&=SG^14)svt4mcYZCxGdT0vMB4BhE3#1f|QP3$&{2 zE0)R*m_UAbZ7JGgMWF1yBL}zVgLShc-7MXnw`(8Y9OE|&rVr{Lw%(xx(^T4-UZ;vc z&5rGUCh*g7+r&ryMjR@@IwvflP&ojC8{J4M^do(zSSTX(b!666r)|>Vl!TNXZF#Rh zz|GP8$fxVycxFHKHoR8j9;$|L=60uD?wvG&Z?Dt3QykSF()CZ^jaBs-u$ZMbo14@6 zDu7*fFT;5u#XCy^i>-3q8?IxMyZ-n~k^;cjQA5SbE548SiYPy6*Z~J*EKub84Gc z8^OqoDnwI)b#I;8NjN@b^WCR|gqkxTe%GdzgsMptY3Z;C<#;+-jRsI11d`_%LFXK@ zu70@pu4Vy{}b(6c+WtX0K69wdo~Vn~UeeS=KH3>0y3jR4PV z_%sA_Qe)=)Q>H-rd;e1Udh7GX1BFftd%*C1w^(_*+xrPX z`}=fqnya%Pd-aw1H_56+dULPK&C?Pev>eE&wROI-@Zax561)7Nuy4ZG5` z3L*_>ujuSWlm~)(5TX;M(z~0mQyYEhGB0)v)vupZzM7B(rr^CG)EYTH6(M+sJ4#^< zW6c53>d3%qgYlbj((pU3%VxzdidA^is&Rozja5zwkf)h6FyX1(voPXVj9ovk00^rv z403%bEDHzwQ#Ws6A#Xup(a>kHWjZ5YY3@iBnS&*qPW0hg1?@@GPDGIav~}8`zF>|m zcQJ@JNIt?T3qaCmcfh5e35CFtFkwCL0xA*f7SL4Cr`KB`@sgIBE3EMF&r&-Jhxofux6-#}h?UFZ3!#z`4~c8s^O;?F#k{6!xsGeM8rvH>KCUe$m2# zIJ-O#s=aUj8b5aSOJjjZD@z8z^Ttj6-@!#-F1>@S!qlw7$Ld^+UJ}_;SyV;Zs)R)? zZ6~!HgUbTJ=~e2luRq`lsrz_`2Ixy~wy)&WehTDprO- znSAiM-|^oNm(EPS4k=A)cpiSmLcf$7HnG^$V=ewNs!|Cr;gtQqhP6eY)|8hQ{f}JL z3ELGk-Ys2H$WT#G7w97aR_r>1{2$~}OWlS>o0;RzriS!{lweIp5Xb*TVu{nR9 zaU&QJ=UJF_7i>8;Gnz$~$DEirvB_4OOAbg;Mq@TGZ=v!(WMs<}tYeN68Kg5?v369X za`l^~hRF1Hz#hXJaE5<3ag0XdQ}*yQ60oA8$Jzcj<${`fA;P-R?07ZRYh|uisx*a^ zgq83+geP`gNC7bJ%|?>tZ}0aAmd2*3-uh_x`Km>V*qIYNnh{q z>k+2dr;n@ZKc1PmU2_Fg>^%TLoc9+-RX)x%KL=FXE9*XC_aTA#sY*g(W>G=r5q#m; z`K1bDiy_uM2RM@DUR7LI+GsApYBzjzj-pAt-;9yzLun#K$X5&aS05Le__?k6A z2EoxBV9S+{;dX`O+vqxC91c{u->i;Z?+?(R+Dav&4{*F;x`LaUFgk(<)VPnWg8327 zo9pz8ba%0pn&B5)>l3SE%9zgtRUb9*ACPRL41b{JU2w~q^@0?_WD*{n8hDu*d2T8a zClV)kW1{x#0WGEMS+dh}cDk23^u@E>4)2)`If*k`J@-zD8c>ZJQe&&lR-VXa_jd}| zBIG$SnSib*YLDLB9%9EE2np#G4p()!wJkNHM>xShC*+b45aCUHb7t7fKtgbQf)5R8 zkKE$yT!!Eh#14H!9G>v$(%Rbc03q>xe({WDFxVi4^0A(?^DMINn1<5=f@yw&XY1k| zt*a4?&t^F*VC|V;SVMc~0Wd0`pxXBM>?gFS>?|B);frozAvJk!aMpsl$jmrUboUI2 zN}02PDAn+)YEMLAmN(*H3DsUL0jBYN-WcCH{uo@{QM?wjD4HqJs{kZV#L0MRUgEU} z3NuXFxM>9EqOq~^TwiC-p7i`Cv!C&)3unNGla_s;h6FiD}$-(utu8w14~**&^vAp7MSIBk*_IgH5V(R zgyk_8a8m`3GkXQ`Yr?Bd5dSKnRAoIU)-(>3N4jZ^1(i?mX3TDw%*1n*yugcO}) zXVN$!dSstX`L$@DA#iMX{XEt`XFv;D*ZKHs@S_Gp zQ8TphhOa*;clm{!ZN93dkh`XC86H-YH|n$o0kyLX1wwJ>OV;7xtpcU=VGa{_0gEhd z-JhJPG?_(-fp4Q4hlA}NFP^!fo0ICv4+RGur-Ig~)#eeMaI?vmAqFE2%V)`PQBxHL zB7D3*;H%G9sTegD;(9Ye2Pg=J*~ zpd=l}1m)CaJ-{cyJ;A?yy`B6i=0o-(C#rE&m40{tdZmEs@!*(A?7-%Qp*h^C7zxp& z&WX5h5^B(f-bfH-6eS<~;y*v<{eu*CsnBPyYi;>pq1}Tz2nA~e4pF7dagx5p$HR!g z=k8YZz#ge=ahdhn2W`vPr4%5faZ5!c*|G6y^nfFw1^j+`0HgMqbZ+(n5$0=hYPRB< zPd!aL>xNE(JR(npA_MDH&U#0-__h_td>B{4-2n#0hYw6hZ+JEsSI{e|0ivHHPfOq6 zSI)dIHdW4`M5tzN(0sXyMmdL8iR(R|qtM@u7ad5l7;I4I;gx7qPlR$}Tv#y;Q<%;T zBdIv|$jk(aq;N)QK#$HFH8{rwjt z<*^j4llG5mF=&Wn^Yq;>dhSK^u=?83ut|s<_nX(vf*=~+XZZdX1pOQ=J@)9qsGOKy zQCXi#a#P^5=oIUX@EM=iM(Qa^eVPv-YUxrQ4Vq&ozhRY&J+%C3R%J=l67Z5y6>hTL zYdT53D0^6&|4wa9-K&5rL{1F1wq10PWps9(Prf#7ne$AHC6+sc2YWLA3&gkb&7aQ= zkL;Que_S;$9WI(Vzxo14%;!V>`M~es>{O!6sVXvKjtEoTfEWr-KlQ(z-03BS9M|D` z8J$)^bkWxbi20+0)SN0?QI%*`aA@ks%aSSU1~i4;WozI_W0TB=+9d@x3~EKbu%bRtCYLSaNip#2ly{1pQ*3i+e$ zW-HX?tDSKLv0P1~Lbp^D&HBU$?a`DSGm(7Tk5B5HmTurSo zd#SOFwvvlI%HJZ53k@94ek6??Xrl`JlQtCOak&?U35f?pJbDSqf`t~?dGo{Z*z#Bq zAuwQE7W4G|sG>n~p@4Zj!sjF{1pvjN!s}kyTXE3`2f&(G=5Qdn2KP)l?;gF zD@QD3n~-0Oz=Zm`6rSq48!>Y4?06&lc~K_c)PCfgzc<*x}?j>4vn)ZtBWxZy~CdwVnrl4|Wv`BMOnu;9s1zI89XNE0+^f4ot7epkPF zWnX7~8hwAL5~vh}D)k+4CxozZN9^)5Cp3vWTh_lI7D=E6#u;!^$l_(_gr@43|^3j0^ z8KVp36Xcys)9Eyruc%b)Dyu~HHOiEG{M3#>*XqdZ&l(~AJ}!BE7O2!KxM9W~_UZtJ zc2AU?t(5i#scxg>|0PN3OM+tWOn)YBMt-+4r-LfJY62_l(9T)VQz{jyxj(1C91E;i z*TLe^9*B`?b8}(aHa^x*i_dg$Y{)MAj0>SDaQpn%ln|8h_Ltu5^pVosbvp?}aS+wJ zT>mL3wza{FuZt6XKw>Hl2X#Zaus! z^IXqZT4j0wkHSPT_YRXnQ)mL2ankY?H@)sW3G|?H)##ZT`iH3AVJOWPbOX52Vmc%#ztsI|eE8;`Rv+z)DXb5|yqud0 z>XLnO;NxZa(%18G5svq#{B|uOy^N&)(#U8y3^IF)N;TVF!EdO?E|<-sl42crKBCPX zB!!kOwIPat>N>*9e>J8f4o}N8J%}ut%7`EHTt1093-b@OetOL<$-`I~SIJN3EjlRr z2D~T?4Y@l^2j!TE@Jp+c>aXzV`*ah}4B0Rssp0(1IOz{&lL}=k6ah^moV3AWyKfef zO9$&LB%6-t%9V*@ReWM9ltu6jNOjSIthFL)+aXf2*x7#C4z&NmY5zW1povKOgixYr zdK5#0KMVyg6Px->LzF;BZTub%o}SKPShitTKe>00kjqfH)ETCc zDZlTiLSnJ8?f&Nn+rXl``PFr}Q^>-gMG4#R% z0r|F}0Zhc~7p^GRMZtcH1%eQNk8I6rVt-lFyWg7qobnD1x+OY(+=Jn*sD9 z&r!#f(eV;nZ%0m|Ak~+tY}t4mwI6q21zCxvC9~K@2hKY?%nakL{tLNoCT6gMe#~q0M9FhL)X?OIMl7&o#grnN+~(iKLWxbmqwE>& z;42Wc{oh4=xqL2OgGqm>M+$hl4JR)B|z&6bU0mr7=ei zy22CNxI8la`ZobFDq`XxWNQ{vx(Qg_e>a1j`RXo&o1xkh18V4S$-P&P6l8pycd@Gu zY*v7K9lHQ5%a_BhO%{qh zB)*Pbi?m6Jck78}l(BHW{3fVequ1D2648b(S@myg{;qFZl@rW%{4>&`!K|#s^Z@%< zt4%{}@&PywB!2W0=8l{y>aTRh;CSv_*<=iDMSb(YBVfWgVB@io8qQ95n;mK&h0l0b z+JCt8Z-Va21449F^0frT1MU;1l{HHVo%$a)>JcIkr*|Zc$AKUj6a;&RL243d!grxQ zUgV{+wKDXtLz{e*P63+2^?=yv*lmnYdvdy;WVo(k<*D)@@A_L}Aku7CDu?~4NXTrJ?Klh=5N$~ z@ySgyJGUrl(FF`m$xrh;o^pjIc)B~ga;^#b0*2FRm2R}SoQ}tm66n~4o0af;XnD6X z6)9}(`&YZ`e9Wr2kq&uzTTq9Ei6uPD|B$h$zYnQVADVPqd{87B!E&ie(G@euvQMdT zeY9%QEY~@dwzN=Ys}23k&=zG-UtOiT2;4Cg0b}#|vn{ylc7-m^EgTEgy_1KT#N!R< zW!dMZQer|65F-41C@Gr_xo(rmNzM_-U<*pBrVRS>YEBiWm?elCMhUdhp)HSmPNE$@ zd(JchrEZr&$R60hzPs`S+dS~3Q%%fATE^t>bb$>nvZk?*6a_C{C}LCT#KOom#>t;J zFdkyqDh(Ise1{{>FF`hcczqjhfotVL(W38 z!)Ox?Z;~0nyVlbe8_10tmWfFWrj912qXBP0e}KD@%y_N?^Jc34bP8C@)dt3F7YF>> zuenu`krLQRq77$<#4lX)3&aVnQnXQN|L-h*B_f5PmWXk%t#zQlZDAWB1+tuq z+hCT*MxiB5%IF>trlXWvhE{=GD7<7^gQ*zVO;@)~sdWUAXh%9-wU<$4>o*RkpXZ6- znd*v8buy9+tal8>iWRcU>AVIC+yGlwk(W4)O*7hWcseE0QivrI`h3V~w3rmr5!eb? z8pit$TbA~G=sBzb0>RuXxap@Tq3rwN*EOP?;hz%>vg3}7JFU-I4T5%;6MQqXj9!A| zfoLHd(~wc$KVRl49YzH?Tzi!h3^A-2RiMa|H}^`Fu0F@Pl=2(+1nM#Vq|o=_3@OJ(gE zu!a?Tg|p?q_DL>b3>qqOxy=dN47Z6jIZK$%)t{*-J&yX9whVwZ9<2-LxNA9$J(w+Hh0T2N#N>K?M2S^{CKwBD#|8Dsqv4xYLaIGG^&)> zf{#tS2tG1?JDvu-hBrB<>5Z?o+3ZzMIP92$FXvq4%#SB48LKs8=&z}BRC?qTowi6L zC4P=^i_%R9<~LMd!u*oJURkC|`X%B{fO_B#-<#@6o?AdR(orQ?(uAPVPRw4Zo{g&J zqf*O!m%{-?Hs%)#eKwR87J|3wwHs6pj4=V1&7`RJOv}EH6JNOUN;~+$h8IcKf?vLB zRukPnXUU5ZmeM@59lq^GOFI~}T8s!D(hpOQ&w5y{BbckrSp>(Oqr-PW|F7e^mW~Et zMP2Cq9}j(SljUjBtK71{UNXuvaNjB6PbZ8`R;8+HZljryXpL3N1`4&g{4alh0<96e zLuD^&IH>*TIbMk>DAxOgz_-+z+jvYV8|QX0jXJVy{W-Gt zS2D6FA#hbQRXg6YJ#c7esTy@thA&Z&hkY<5UrEa*S=0tMpLoCllCd-mvi<;U-D;WO zWk56vi!iDdE&T?rDJgX@}F*C*O4(Un;JE&dZ=nQgd?jnA$M+ zsF!ine-EK5NmXgSe?##VaYyq>&i?lGMX<&GV?h{Y_#Gi(f71TY(Nmzf9%l8=a+fMP z>p-rJTKrsD@&`LhOm*)Caim4w)w5}_Ezu11I$QVxD3Q$ZjRCNm=fv6RJ*EA*)G zqp4DRx_Z=7+q@*bK}-k$*fw|cnWUFOytVHTii78ri8Pv4Ix}J1`=skThZPb#6GBb5 z#|*#x7L3%a$5IRui-MUk*5cVxM(ZNWXEH_VSCdSQXQcw9a${*t96V7R`F^nVZ>{`% zA}_vG*=BQc;eAgR z@ReB0K(9!_Vu>{!y&`tt7aa!Tny~Y^zx1I92^a&9i0pHAV@qlOZNF{y@<`zC2k{c-9`b|8XuYW zR!pv(%hQA<7diBaALW=W6c)W}U=bK<=FrM1t-J}lnj(@q4=B(>0O6<1KdeCS%-3Fn zY!t}}I{lRmhoD}ZxO)YAW7&w{4l3$zIscgIp+k#Tz1|1A;8)al4%OlZ$tSZ8gdZXI z`JapDq7!lU1G)6IM2a7BpO{K}`c9Afy+06S?NPkaH4CwHV=B)!N<7jih+T;RArz zSDCr79jyD3x)lJ;gz%r_t&=>jpL2!}1y~>vrw6>O7LF!85vtmRz*svRWC|?63^P9; zt9MyHldD?(#C+qc=)*mlD}7ujnSLt)kzSwgIHag&m%&+wN9!=L*U~%%1szZJOs6N7xuP+|=u#++5c5Tls@L!D3*&Ogh zoTuP4umANG9T$(-5(u}2uFQ|P#Wf}BM9bvMY(&I}ZY&RnPyT$wKqZ2w>_jZ=sGKa` z1B4!b`I>&gxjF@Cu&wG$7wwtn%s|B=HSXC%&~fX{MfKl zaES{!PbLbzHLGG;Y@>h1cKQG8@fE& zyG}jak>!pp<4E$<|AV1tvs(lL1l}LsC1rOns>-sH9m1pryw?_#ohz%ycN-3F;SGKi zM*R?mm2o|!0(2cLn#IWub%auXXXU zFoE&EQIwj_Caq+=b6bF1SC7~`;w4O{zBvlZ=_%$um4~?yP);t;RM8+6(Uv7yalUO= zJ&Sq_|G)rVq`%__hqygK!l*lGn2quDN|_;lJerKk%sVC?S4%(*4$-+xtyFNGrr2MQ zMyFGe-1^{3n^YLZL{PyFg7SlC(C)x9sx1emx*dYmj#8a!yAT*?boKb0xJo((mpfwS zeu^#QIIn!DsUZ0V@-Y5bw!UBaY#MDMJGC|<2DCH*@i!*v{FN_uR9-@xFy}_9Eus-A z9C-f|OYce(^++_(#;31!x9Rv8<1`g5BnkWRr3&8}5dL_d|#A z)6u{WlwU^-^1t_*wFb;?Y?C0&at&d=U!&|%Qah%wBUvBH6rV*1dHszCa z5#^zO&e5*vrm;ECeL2W_!~BbCG< zS$+Mr9@@E{OlOa3JOQERRFRu-LT)X$NjzT#ii7MIAOK0mxX;yAR9|5Vx@V$^UDtZT z;&7wP-V$VCHE-Lk61~XCb>FUP5P?3mm zI^{T+|As~3ojr#I8xhtt*R(_OWcM(vgMGp&+=V%GXHB|;4E^V-nbQc{C1qyFT0#t z9`9G(r0Mn26pDHChHUNibARqEwl|4BDcz?1>RZM0xy>ms!aKPq@kP%wT%0G7H_0{a zNN1L=%g0X@{p0+1EberwnC+Te7@}8#i{k+XH%s)EK)I(oyY>#-y0JW+E&A6VFM>>2 z+1KOF^}zjll&vh*8{@}6*WZ`WNrn}fT!5ox)qi@}v85;O&KI0> zr%}K~XUV#oEGvd9S%XdWU>@tGw6#uPTR$>Y`m)~IpOZNK*pU0h%~xAqBS0*pz8?dR zf;SRGf-2zL0XX_-c4);KNEfYGF4{8M>b@HYX_|`5FP&zV%8r z-r7_0WT1vcVGt-^r<;GsYr5=8*5q*7eGHTlr-^@+*B#uxswec|_iD9WxsBfqtbk-p zdRje(IT9b8G$DdiX)uYu>;Ru+{JSZ4!|?<3TcU2*O)M82Y&Z17=cpQ)<-&)6Hb?dy zaHRt1cdiiuQN)AsWCJY1mwvU=Db1XoHtZsgX{3EDu_4kXhclGWM9g3De;_d{oO{fx ztNzw6vB59$>2}q(1v)eIOKMVCTGEe`pkwqW*DDwBgP1c4PAUoq;vAxhglMoyc@Xyoq#xnMGTDvy!uUd^AQV zz0~%2x%=|{t(9?UjHwU9iWuv3oiK|Z@g#$I!DBT~&#s<0GD&yoB-4Rj=#*~Xz9n7W z#K$H!_G*+^{S*gbb`8m~#eBGloVrdU-0|t5ww+x$zg~a5ZrSRH!R}+}?)lqtenZ98 zNxcG@)K2~4*ruq6`}OTE(G z7Le)Q=IPk^qpxYRaQ#!LW{|JEH)p_ZfTQ$@KN^5kk85OE*15KrSx6rExLcaqIhlzz ztJ~Gq<;jrs4BPw(e%ijqSN~(N%8Rzz@4lO@L#qE9o9>!}X0W-V27>cr4!rG&d84q( z8B>3($Gv7X=^dVkw#9h%MhSShd)>-<-?Q~$SudITSDPb7t>n^+_chc&muKB(FxI5m zS@0YmHdPX>6n7-C^z)BUS^h3nYBqirH0=OnN>&K>7lz$8V{Y#BmxXZ~y6vmJmvT9x zDpNpw)q-`7!n{8-z$#L{KQ6k>$3Bd|8($xS{<^ovXzPWDkZ63!eOL1(u$SO9-*ny7 zen~aDaw+GP!0SM?X7H%kP>0(XaIh!@819nf-Wo%1bHpNl+d38R#E+F@z$uPO9LnbQ zj}qv4GiMOPyp2VS@z!NqI8K!!b8^CiTb8NL z%7+aAbFEwMd!l==e;P2-ZO#K8Sx$Ebfb;gX+uoiY&rsM;*PX0gznElp&_~!56d(l+ z{GEx=E0our3@AIjjq9!}Jagbzzby=>Q~QzOg_ORg zpf-2Yd0rEpfd#Lu-4%^)T(0~#pDLj-{|W}hzx0orL!;ddH#Q4Fo}(@Ba}V6> zV?Qcht=24-)#5Zml;Z2x1BRaH=)F+=Cp}DJtdA+V0+$s9ofdDH9bWCEgCX#NeA=_w z`d*9&NF+qypmUMM(bC(Ksx&g!cd%^HVq4uNOn!-7pD3Ej6XuGe<`8u!9MmQ7m~!I^ zJrt5h-ReiCU8kfj)ui36h>k4?CwygdN}2jII-dl;=_uyfK0NG-aY9d^W{5H_eAk1~ zCD9j4)2mtQX1hTb>Yq`M8@Cm#PhdyPc^&(_#*6;Usd|luK23k*1XeBYH1D)RJg8_Q(Tj+%>J zegL5m`J7iD+%z80jU#Pd*t*1rK?oMaXl5AzGstg&(@r8fAdPO$QmJ&^Z_WewkL$F^ zUIPaQ1>S#B01~u<$Qb2G4j78)YZfrOjS>D4pNs2lG17W@h;V~$WD#5u!Hq;!`hp}1 z8u_QETrucln6g84_AApY)Cs|!IMN?PzBOg3@H>L8_2n9>_7iQL-D25!b%cEGtf&N8 zCEYtzVS0qmN8=3q6n2SyPfQ-gn0|)XI_Vv$rg!U5jZMaWI@h0YDwxz*3sp(FPY%7|*%v-DRg! zS?a*C?uO6P>oeG2*|1kuq5G5kYW!Pe<96N}v6^N{Z7x=_97Ma2_QVg>T%6g=Fdaac z^Pmei-w6Jv2%QaZ8Zl(T0+H?HLjqdi#cJWrR+h(D}seEyq1S9ISve_%ts->_g!b!HK2flnVCE}nFrvqEbYKYLEy z?&7<0dA`2;^B-&1iSLdQ!+(Pt#cE$dP4y--|lk1dp=Y5 za!BFL+&w3{-ugUQUiZ8V!P(~iK3z$FgE~E&x6!W(m>KU_$CKWDrE3~;|bFu0#p!+{wbL%GA%dIG?DFhDY80fn2e zVObCjXWzl4g@8AVaY!d_E25GtkA^JY4}6rUo<9?W(%*+o0aP0LVXei7v*y=m;y9A^ zKe?WL0|n>Y!XsPwNn70=s}geB8lrU%ei0c-rZN?dENLG4xOV3iKb|zBcY0 ze;?oMA3NdPM8ch~A78h-^)-JFXA`>kncLIa?$cKFcmX(vzxKZ)i#XE^(6NP1yFq%n zA*=93v*2EJ5?`4%e#XCD#)Hwb-$CdjEdaoq9MYK;cL15Xfs2~_*6R9xAM2uE1R-P3 zLD5I#(j-9Ut^`_X*5u3#UMuclZxxB^y7^pAMn=xx-94|y{=BHtWAc17WMcRHT&Bj# z@uUQ?*#EOKpZk2?|7eQuaKY&?a6jtv^@VmV%pfgyo+^IogtIZTdV@4Tn8hH+%-aTf zR;>EcNJ>|n&h8pF=EqF~QMy7C}s0hKct@?X`K2vfikA$Tzh6GE- zzM9;xKO^ccF8W5D(>R~krCqvddNI}m%!0o_^za*kY#(3=1YS+Z%!z8dTm4rn5R6K^ct$8~@ucxGvP%8Gr%cfl`*zyyjM9i$3nL&EQ5ScB^op z^lu(kfCEQ{e0neF8mc+j7O0$#dq?WjJu99rsm+Odatsw1Uosef2_6GZ55SK9IzPFi zBx3JoN=3&uH=PL7+qV|?TE4@FS;-D1xn$7x@HQ*nZZP}902>28cTvALdmzh!#dxWo zh|83qDA~@xF}2!=qQKh0F9-e4uwt__iGS-VO=qCNcH2XYyK%1;ap<$UP@75s=nc?< z44IWv-2QU(uX?`Tpwvz#a`VCIRV_J3fP@8(E87*fAJQTFDd9Td%*KLsdg$AuY`Ga= z9g&lzgKIXEr1Z~jO;g$)d<~y#zt13}o#$&9kDH}<5M5T_iT1sgqW+5H zVI0nNL+$POQA_B~e>rzTKB24Snqk7aJQ8kp;?hMcQgA{kET@h!vBO!{&pnxdDRJE0 ze|RHocw}WXQT*j$+gY2!uj8w`JSH|b7cwm(o74fyYD_es>cbw>)Eu)#P>C-)+JmKw zE+a^K;u#eEa~BUSpcY{}=-ePxde4*%=)>Hst!x3@gaO161GpOBC8ICd6I#>TV& zjJpLxu$uGSeY5ni41T~Vo_R6sgP#Vkm#?)MUu=+ogCF}C9vO=%)Mm$LL+>x!ueB9! z>!HykDoYj}s?AMzKjbh_WYa5Oa2myfqAWSx?Vwlg-JD3SI7bB_LUNu2Ec|4St2y}J z$Wj^*S+}#o9+&w~ux}=20Isqe5Q#_ZaVwwyJ}_6nmvmaxjH`}Hkc}ik&PgOE_do@V zO0>96;1V^as`+osfc(a5P=G7HK42{Mcg%7-27o*bhyFF&VlAM*VYIcRPlJu7LM`3N zqQfvcQjGYzR-zFft^$x5X)E=GxkjG+3Q#LjR;G^E~td3N>fB%%*cER-lzdQ-(araH4tC#yJrkz}${Qu1zKN z1x|_VCOJsXFoenGN|pFDz6=j8_ii#-1@6|bzlnPsS$*UUWNyN=>6Rcjk(jyE5A*CCP|@3oCm?CX z4VE>^FT%?&?BtX&AkT(MyY2MqXUjVxj&uQId#hR8R)4Z-i-)Lp(^RWvYL<{kmk%uejq!ZET4LJdRE{74`% z(HQcwSXf|&9NQ$7?naEMJvt+^a3}xbbSv&b4h-d)Ne#_335FK!P&{4++W;;0aAr#i z++^yYc-d8*Jcv|&7oA*es6MKBfp;~s9zFn!BBs$tBdk++*DIB#4l_nP@#(nSyUDA! zK3?PSC)&ZM(gI)gIG{G)ZZ>j&6O*=Le%1Qh*gPp@Au_?QRTFovV6+E!T+7KZ#2=D$Q7S+LaX%+EGCH%oIZ5J%#Ed)b?guRPN z9Yp~%FbGG^^@%S47Y$8FgOW`Fy8Tb^mw3BH`IZ;UJ6D?jtIXP8D{2kpWMN=vouQW! z{r><)K)JuD2J1Etrr`|r|Iv)4l`wKG+M^NaPD8&^yvf=+h##l6SWt=$#&Hmi4L@(e zPd>O=v*0DhQc-)Uxm`-~s?!9ulXJ9CNqRj42hb$G6ZFQH#XgW_hq@m5sDAhSH87o_ z!g%e(@O?TqCZ$yW}C7F3I%s<4q1U7H6Q(`eC*lJI-?M>9i_So8D% z6sa@oVn{QkFjDL6erA@G9XV8kENZQaPk&6H4@a>r)T)^!pj{2noX>cc?2@8Z(wn5D zNa$=75n46WgJ!cy=G&Y!tjT6lAxLMG`p3p*OgWV>Li>yeKNyhw%Pa-`WKbd`2 zxTl8y!P}28(|2c7Qk>naw`pAF>*9|zIZN+0+jO@>%B&a_Cqqd451lPb`s$@4#)VwmRrWXfQ)LD=HN?i z`YRh-a!-H8rRQ>H-bm3!bwq}d1fbvTj(?vNTi-EA*pWu~Xh;gksQDfq_w?g!`k^Rqc5?KUZ~t|w z(D5kX(F+n5`1hn`ZxcRDN3#I`)C312oPIe20s#I3Dwuvnf4@e{RLcfY7Da}IVDJ&b zAbp5>5xgKRfzW^~zJlGt3j9y@rGhVnv)<3S0eGcq`qG=o-l+`@x5F8B{Hs~ebMa?_ zUB=75La~wOKYHjos9ERAz9c)_BvE%Be)~0l`~S_L`~TS};NuSOM)YYw6D%22r`(Ub-JiHPO0)rnb2mnxD!z%0iLd8qp>#j; z`s&)Fg&AVKLoc>ho5yelS5gGxpW{ zN!p>?-{mcUAKCz>8qQ+RcOIIT_KORk4V?$}I|e5Mi`>+|WDzuj?4=rten52S5#Fd* zda(O?IHVd*Rn5H-)!lRYj*pUifUYLGQ64?gh#?^CLUft|dm!N*G_$dv_rF42u_KL$ zs3&TA@xV*u6iu37)9KjUf(7u{lY;wEv55>aXg8lY)`{n|oC4QXwquLN%BK`%Vi$A@ zAb#h-X|q4ZHJ#9zA}2Q9{Yog(k* zd{w!pGK=5}NNF-TSqBTmfXe*0#|>YpwH5=<>WO|eWHem zTHDbiB`AJmf(Rbe*cXeA0GurqsX*;>1x)E{>wg&EggB5?@n@q6aM{yPgaVK%`qWu% z)vS!&u+9(JO6Jh`5o7@|N+(pyN$?#WQq!Dho&;6PG5*k#qt|wdB}6) z->=KPKW`KKqKcb6qUTNf5u@C|>8OqYF`G6M%Y#I*{i&GF5RHb_@t{QwFmpMY(GaCF z$KgcylX=y_pdGn6kBOua3G&QXeTH5U^pI|WpCY(MtrV<5eT*&E2DY3cvY2mFHA>$5 zL@i;15)#dd-Nu66CtzJVVY^pLrpkdD!kUT<0g+l-5ciQ3|I3n7$|Q70o`@ z4vB{0#W*R?$VLQpNmNta_Udl6^zj9Dp#F}ZYm0ZFGpo&^=}E}$1%`wT@%UEUYh6HE zH;M6#fE1=`A8spN<+jmd8HX&cHP^T==M_CBpY$X49xD=H;>xnsOC6^ofnO@}ZQ z%0Z;)$XTiKPstI;FI554kM!={%(Mgy)Cy1UKgt{$A?GHP-W39Sfb6Qscv@@ ztqK%viERoLRI~hw%PXU~4ce?8H=z}+L|Mq}Ophz%7zqJ3AyQRHiCv{A)~$)dB>`!> ztOb84i2@*vD|M(vlc9g5<+Njr9EEiw=0 zvXT@9G?Gz19Oj-Vq(m2LMf)<0wE#7|)iscNW~%IMMaISNS>zqFmpWByk#A?D>o<*R z)|^*@oK4j!}jN^-F9HGB&k33shL12t^bWPi^>SPkZ;kiYN zU%+#guok%!AlL7V<}BiK$4CQ^BF>EL9$lCf+Zb6YXssIx6px#TeN{CQmH=}wm zFpN_Fhy~d{;0^36D|(9V!UwAh7E6^tg~-rB-AMptU{(ZRs7}hyQhbKxy^3kH#FG_S zRzN}t_)`YC8p{T?G%$(iP5jUib7RE; zGrFCw;R^ZBYk9Qs#@uJPP4c*jPN%Y0&Ex&~iFX zx#dc`scN?(9fRFiTmVFHH|P>iKP}5H`Xf(8SdgbNtO+T!ivA<6aspe?cbuaYElIfu z!LnZz-R`ZavH(N_=leyh=9&oQnZ{SI0T{~2;KaTBuw!yum z5z>P6^n{SepfNBG819wAZZ_K?g`$y%{q^9D=x77Gbi5`-c16}F402g0#)1iTHO^xZ z{4%gz>XpMKFlDtvzJPVbe&T2g6wm8{EQ6~GVnxb%74TrDOFDzIVD-r{Nk`9xItSYw zKBepHLY>To7~vR|XrD0W0{wI9ezyoLB2|hb30^K>kvYIp=>a)N)>Hsg9f0jmd!0f> zM`4>81vko<(ead#ku=^VHZ9e`LA;8yH8PdNOHK4Bi)?$g;~h^~qJs(%3r zN`o){!rldraQ?!ACnNK#Nu01e^1i^rhAe+NkgRo{7WsUCxGj?X+!5`PB0xiIpyt;t z(S)N_!d3YdoGy>phs)TqH7vGUhem?7b8>L722(Ykr@i1%Ohe~0w`UonA~iGy|D(9kETE=amdQeR!f)Gw)vmBfsf5oD8iv+m608V z(E9cJSFj`CAzi{FZQr@qmt=Z*b0X#i9dg=gGFD2Hkc1i@hfpx`ZN=DIPb9UnCeNK6 zP-_wi$|En-Cv$QHqUw}bb2@7gt=D~-!ww0cV^yE%Go9zHlXlAu4-d|^CPJ7`&?)l%yL292xO z`yel&OgB^rKaAgp7P0Y>&fTbC%-d2=mBTR~H)E_(2R~}FV_hZl5i)$<7(H>!6TLQ{ zYT3l!L*9wIa8$LNfGSj=T52%>C&yoxfSl1z3VoVbI;4&*vVJk_74MbPAK43FOtRFJ*Ml?T#*kBPDIiE( z4YafpBNB9JcaaohJ zUMQE}Bio`s5#Mm=A;1XkW55oVzs!0U-t_m2*~5bjNA!@Q4?PWZAoW&o2jYqtg9-$Y zI0 zMj9>}aK!Zq3d&+n0*dE1LS0At9Wetcj15rIX8?)&a2;cp*Av{*ekANr=x{?(fRW&! zFGZxx$7mn71lLJuS;ZZ%5w+Hg?HqBm%M^78kyk;w6y6&M?TNeqCJXL(RAjT53VJfO zmO^t=K~i_iPB9`5^1N9^ZR}bbKN!(QL{123XgiR5kci4&2|{5vXZe@8mCsalT)f(h z=hp*cnzMO;@%KJXO&~HF$d+UEqpOUCY=OmDmb=uBU|%I!q!*WcM4*CA zm)aK+YoQi{nt`qdb%{BfK&G7_0K4(^SW*`A`9d2D^|bWkrBqJvUL+@SvNq# z$sx2<|Ec09TKN2!?RIF;Sks@Fs=CoOe!AnE)^+)S-i~I1G1|Rn@%5BgL?h+a?`<&v z7FJlhRpubynp0lw89;`i9jp)?K`Q%?Vkd_)LsVHR7%QhqWE7wdO;^RH{%eo)j4@EO zKtKDO%1(6$rTdB&9Ds{scb9J;CZBylenBB~|LsSsc>x}`H*pduEi5_oht=;P8S zqff=hn&V!D%SK47D5(ub>6U@@aab@K zBn7-o$%|u@7Xvo|&CmP&qiVZOYw1(l)E0`2s0vL1Gz}&zD?zqKvU(|^YfI-8WTkGniWEhzKQtT@k9SrhK2@qr2on)9Vje94` z$QKrWW}pj+I%_?#?v{=&2CC6|QYGuV*8V0(jX@T60-I+T!+YCmd^?>w+jLhhKcI*= zDcA60ArlNd7N=*t=}-VH%O=iD;D;1PQ#e@&2=_DJEy#|Rz5_?*zz{~xNBSY0S?RBSp)2@+nCk;+&=15h)P||pk_6j zR>;0~L?M-Lc~Irom^#CsaXQTa{mtA)vpEK)YfY>*4w)G?^&$7QDt0NNA$dvkEzd16 z0XW|t&jYfCw1#pX@E+F&AQd_@ob?=pJZDDjQgn>i)XE9%a!%NxyMzG-MaZ!%JyRHo z7rOjZ0yYh#C=T@jfPr5!=U_6}6l80OizAwI9GW@K(7Otd`t-}$IN@o9g9y$6F{imq z5_^{8V15LCZuEONgYT5BIy`wq_lOcakIJp8V#JFH}&HL zNf4mSXv8sI)iaa<3)twQpO8OBG07!Z5}v~b{C+<>9C8Jo`Z<6Esjn#<#>I%Z--4`b zRe~_IU9)emD!1cANWstm1I5raW$uD8C_eWx0E)#xHAq*$7Vl36` z`SQ-~V9@bxqc{bs=?o|RzV#W2p{Qy!f6_M;TepM7yWL9piy;(yS(%kYOxKk5B%_Q{ zd7jD;2PmCF5UV|P9jXmO+~dnK%k&ek#uR@CyETykcWaS1pS}5B`bNDf!vq6!eTV+& ztz|jr=6Bdfo*~q0RF=f7nh_Vg#E}M-4dtM68lx}ltLginP z*28TErl>!(VsHl*73|%o$WGw?o}*Yd_WnWD0`U(#gFu6Ss9L+UR`U1Zm(_eh31=`w z8@>gJzFebYQ<0Zpx)wnMHz#o2!V*8l6o*ZUowbc@L|%kwI}FG)QF*xLXauTWS$450 zVA;h)^~3WEOj=7!5Lz9HS8WKOs+i*NC-!}(XQ{0W_v zH!Jd+t-MFdqFOs?j z&>d~x5a6g}VJzmwF{${UO~oxL?_lRtlfU8Pq?)HJt!KQoWSAyF;iS@}UmG*hrj-ZK zHqh5`3}<2cAjXXr4u_~k(gM$Pkr>l?X^|;8Ae$X62`Tw%JBh3-e_> ziT%iHvdWbtWMpGpgA5y?uz8{xj7LS)&cH$Nu774L=xO*1v!#0s|`%cqyiVm9f{=h=xz+2J$7TqF!5fn0u!3P32^KGhlq6`XD#lv-&6A z{ToSF$+&RuKUM4NdadtIR{OeA?a`}RYcv|EZhom7Lf<@8>l&-M3efPmVhMtY&Uiye zDP!}L%u=3pUh^B_$Vo(K*&$&{BGJaq&0)imSQ;+|7;07wi8RzvmKZu&c5P#iL<*O_ z2Bh#Kd*z_#6VMs22`=hgKz;gA9}rSX-pClshXQff7Q@Ssrjm_&{y*wD#P!UQVYh|g z+1e;p6DAPA^z~;poQ=^XE7;mCR?X6S7v=BGT$tAt9 zHBAWxyfUi@D@finrqyoOo>j`Xew3jqMU#i-H5cW1`$R7xZx*#vu5Z$t z^wXz$h)I0Omnyr%m`U^risN3JqZ+IyENL_z9nUz4NFB|#trGY1ky6Grj2p-T9}~Rd z1PVli4VZrnN26R@g{gHUc}>3hpV*uB*R;XLRVa{qLC7`4EGX8>;T9zm0s|Um^R&R` zr#E10CGj#1xBvWPJrX7v;?ZNVO`K}GqKrgZl{oM@2heWYpUiF8@Anf7aAr$nGJy$* zVH=!YIE6;TK=#hgL?e*`h6fU11y~75#0>9vr1g42-VqSa4VyfN&ZoBcLCVVBVv4{1 zY=Wd=^6+wS@Gg@c+)UHwGkO8H2k%_wDXL|v{9UD3^n!!uI=#1;(Q_L1|M-vDL!CJB zr(o*5D>rcWBUFUsU#{TdRhsRcnfUos{#U?FsJ}-I3JEo0+Jb0%j`>tEZcWFs zC#uE4MX)f0>@P~1V)6iuU>P4_w&$c7-S8|K#5Y^l_Tjd~hq1)Iq!}#&oZAH+K`}+9 zbg2NR83r~FGk`lA4AXuU)Ly|-!wYnF>~?zv5GC)}yim8me)U(~?iJKbPLcPEU~xF$ ztx!s`tDsjL4kHZslcDFFGx*vOSLZeKZt5r>vC^4wvUpcoBXG4{5v#J9HPdb zj)bGqQmBNv!58Z43v?#7NWXjx_xZNG*>Ev^XMM5X zRzBEAW%5y0N|$y~X!y%|(Z~C(EWW*H`R2X!&hV#0j7;V@v*Y-|0LD%o3Fs20K|C1H zr|@8(mE|6ORcG-sq(b--hmVElc$1i&@!mdT{(R=D$%$k{>>uv=?KRcYGfY}CHmDk= zvlB9qwRUWwu1~b#OGr{b%UM4R8)0DDk~}ksk9nSjlP}9CTt5F0E*)~pV%!_m-+3MZ zbrb^Z9=d;-T;BG^miIz@DoTJ!qm9B1@}N=(>%}(A$(71u4}A1O-I&g9F3NGqMwBRO zDQ6<%09={ZD*OeCNKMR2WR|;rHuE!2XKsu_=8vKHeIAh4YbEnXyPFqaP4_oORvF4t z7(l&d1mGfgFr5RUdoWP&EON_Tsz7wI9?bWvciKybir?M(v+yOdP*ABF>E~)yb{8d0M zMki{nxYkM4P6Ei{_p9{dxky7k3|HmNEp+jW>q`)&l;N8}AS=i}>nX zWc1DS_W{sWNUaUr0cNwdkPc-5)uz@8(ekcMA-LL5f5Issfnw$^DIolI;FO4))m@G1Mlkb9iKBh2|eckrD5?fp*1koN*AHc&~dIC7u z#G)Q;U;)Pw#WJ8XFq$rAY)@JS*8zq|f|J|Ds7PF!^wSIg z4TMVEbg~?vup`IA2}5u#2T`$3NX~vZl;Y&KSAmfwQ0%T!lrSq)$2H5J6CoGSj|DD~ z&kH8hQu=8%+dX+Pobd9L4n>|o+zc}ur~XDdp%0Kdf`iOm!8u;y{KzXLZdQ79PsV9NkNEzT)wSS9xu2KK+a9C%Jo!4TZRSvPoiiINEvl)89@ zq5e_g7_6$}%V2z0K%r$bfr;j?0cfrU3i{#Dp&%KswDg?UevXmVW$N&OhGFO{01lV4 ze7l^74;?lD>zL;R*9uHBwDh&VsliRZ4^YV3e1~k2K4*gjf-3XGR;Whz^5sRy9 z^}$AH#3}d3+P1jC7!#(1lAY3CJZi0Xi6?L2sU_8-%Cd*RL7)nNJg(~*3xY~r+Tljd z7$_YIK`9Y#)kaFgPFCEx6(f1t35Xhs79+ex;J!A>0Y^1MJ{D6BS2~lzkUDVcxA#X5 zQAaL-p#f70J7y_;R&MlL9l{wACCA zwi>|c19Qt8Ag^oyHusFx@e}R!VnEMLS5{D{=12$6 zvw2#-shl^W>V76;EDm0czy&Q9cG7o;Xm|FTVeYKhy$)Z)usCwBhbJ0eJ{~DEC@9UI z%t29cCn5(-83>}%N}=OIlZhap?pm`Riy#t?3O^jrrQ9P6NUmX%ap-t1w7dngP9e#T ziO;jjxj$LEDZ7M9@5h4t6r^W7zmmDo3Y`lLa1d3f!!nH%jq0R9|2;y6Uzin1j(TzD zkE8bD)R_JvlB(P}no#E?;@|9iCtU9Tk$yajZX%ee-C2wt)=QkVvv|K<;;YKOJ4;gF z*O!dZet^Rm6+HV8%TWNLG?C>fvS9BE@8@KE0_}L zD2Oes_KSh^jDKMEmIX}9uk!b|GvIZAX!}+E{&og?GyRqR{&u#Dw`scmRsQ~Vwl5`% z`S~GP!F-|T-1xXQPHIX8bVG)mdPcEz)z+;0!zZNAtf!&}?q-0JR3Ym$mGxW_>+Hx# z6qOc-1L+y<2ScyVrT81Gl>LAb!qK$o+JCFm{;u3qDyREe-KLCnKO}yUmilne8#pIC z&Hym#Vlc-?@b^pqEBO1!AM$boK-Mk)!s*%=DQWJv8c-533#>$ku4)EKuc<`%+A2z-obo8fT-Mg;Zm7~$v2*FUZLXzY`yh>$)Frh;j~IB zMx4;nb6`6*ti+EiqJO3YrL<9n zdcab({%Ac)t0#cbB*?`RPDtcyl){mj-mH0XY$~E^sb_*fFg1bvDAGa28Z`x+J)-tx zz^#*PP=5z)9@!>b)9(!v>Q;MtY_QGDo~^y)9%$FF;+$2Yjd0K^zt9(5MnSMX*e zl-L9=nX+vd2&3eifS-|wMU&F;teH1$$4+KfB)+iJQRJG>CmjNKrkOZf(%UY=7V;ak zRXa8enJNiSly^x6Ker`e4-~sCvvuD3S*4a zr75giguWM13$cWt(dMRYvcx*RC>%~)Xm7)$a z$tL)$7KumXLycZI%CIO_9CaMbPZ?p>WI%GtV>YIg_Ci;v@OCF1)QKG;)LAVL=_&%e zKHnaSReqoY`LHb3R|n*m4nPZqE6>&T9Te!xyF9-*&kM1{+E~wdcuck`hsXHoc_CKt zN~-5DQrN_w{vON@0bDDs-N1ulYt)LNZTRK6J9y}wixM9|smC2ul1-mJd-Cqd<@5mL z-T@!XE@yas0VN*ThVGlN%0$^F1`gR|I9`SPXa;VHY^}4i-#XqY8wrOjHXID4OCoJc zlUXxjsw-FJhe$u_u3uMkDbSX5nH@Tnx2NZvJ3V=HTQzM%E98?D5labzcJrC2O+OvY zd_{RQTCi)~g)Pz)7J82x2`h;Es0zQ`%(8h!xi6b*pf9*spmdnFf@D37R1)Dp>hq&U_j~Pn`)=#!5gbng{5^lin%A=$UYY6LaC=>Ukjan zBKwm`))aTUI-wM;199!Fe%4vLd=v9EmRX!|d(u66WmS~XK{f2F71!Nlwm_XiCUO3B zhPIw;GiOv4E1191_#tkBvOmJCrf65Xt@`F)v)1BpC^6_uLoIvV?RIS4eYd-koZz*N zrdij6>I|^(;@U;vL_|R?UK7cbaEJ698fWc+zu%Ql>Y=n$iN+=6L)hMGg66DjE z1K()v>Jg>VHO3~k69aIWm_b3x+U7En&U?V&#**WjKt*N68J8EU@d{vW5u{=TtF@tU z^=mdNa2M#FiN2NvA|AGNnTz-ETvvz|7|KC%g=r~PG`50Z{3@7F=Qh@s(FhWk%|FNNKs3dp|oJ)Z(OUd>Ndv#V4?>MlBn z<|d;K_Qu+rxsI{J_ErMZE~9m%wU~3ZGha9SMeKYl30aL-D0~7!Eh|9Lq=rKn+$-|b zrs$vX^tBPZ(Ia)f85dRc1U-}{HKL8uqg1tkWKE;AfMdG>NgW>J=^M*a)wORG0okPQ zlXCTaxGpfyk4Pwvd}~lMO}bm&HlHl$wPZ4sW$KPnVbc#6gD~LdR8k5JILD*cpm#@7 z(^7}x+OxmaA1T?UZ6z2Qhoi9Je1RbgiNfLg|srr~UQVlEK#aMZ^ zh6KQD_sh_PAM8AsDkJCcQ%24+wri*wF#}AaaV4pA6>lL&5%VajoouXE#Or07rs6&c zhL+FrF_Q45P#o`Xay34UizN9_4Z)_QaK`HX6L79sm>O`8jX|{B*pG*efzbw&o=dVT z($-u>KNg|#s3h?m59(d%JACCRoQ03%r6cTpVJXb`fwelQ@`DC@AAz$D08uFJNRa7a(k4H#T;niHJGk zZDnU#kuMW1jJd@;M!`M828fn0qN*EkBe*z zjPV)$jmmA3Zi6p|Uz|~%7rNraFL-$lv~Q*NHO(%n|89xNtHn%(&4po7&`*IZxn*1e z)xFzL56}}d3=DS~ljFw|6f>=0YZU8q@l9BBi<7Q!lg{SOV}H1wa))~w2F-0$i`cF? z^dh~r(mBL~a)YWJn#0gzIC)yGfcH<6x8&)CT8n34BZQE4dIP#y3PUosxXw{A8?v7m z+Rd3uVCJ*g7!~EpVwOFM?XRuUSdkSmA1NSp{sDseCVF^Z`0_ipaJxE#UI!TcMhM7`>XPg6R+Bz>JF(yTw{qDe8M`i z|9*J0FUN8cM%DoFn#T4Ya%R3B{s*p)<$>V<_*90NO9u*;XI4Rej)$T%`VWrug>Ksfx+{>@jV`^Ebnc_m^o*FpRozyC8y~TdnEPU=6#(gR7H^p7LR2i~b zD96I3z(p{LZ)sM4Oqa!p5Unz<7saXtlq0C>?@doW_eqM!JlFoco`TPPl+{0KG^H}M z%>RsckU1x+0QqMC)Y^386OUV=ZaCKaPVXp3#4QW0p7Du-i74mQCjh7|fQaFdDU8gE zWf`JawgHf_XSd@uVFntqA7BhyWN^?;NN?m9;VJ12^-)hPN_d}!ED?z(bRwvDS|s0f zF>4sDmWhhkPT+=Nzt|geof%dHu}g zrbAnvRk8ksZZf;px^{#Dc178V@8DzT77(;=H(`u$jv$=DI{w0^jPuoS2<83( zB)#(s?JuA}-oU@_%Rk`nYUj+vtMJ4DE1}GUz6+IM7#{qu!kSH3z=?#*pJ1ye*6MXFk-PMfk4)C33FU!>rFVfXoIaZM-I(m*dTv4v z`Q&}?N2ba*?cTWoDoNdBB9CszS4Y3&O}_FSPBBQqGDZ~SbvXX&A{%GD;F0I>j+ZJM zH}C0a1##~u@<$j_2>fK?>Pl7FzKLugQI=ErM%CSEmX{r+;ur~+av<_&o^SV}t!DGE z)9CdlYt{l(GowFnws)EQgB8H+I|5t)WkO}@JOmOvHI8lbQUMbVC-Gfc>b2)iSX zOb1mnobeV;=G_Z8zSyo*!Y^6HF$uZuarR&&;M~!0_>c;J zgSXI(`N;K9`{#+_1z}1$E_2!ndGLZqJ@;9$05i4h4ovA(Hpr$hk+)x;EH_lVk4na1)sI`e)rS-p*1mq;p0kAh^iK zIWV$7dtv;MggZrv%=4La7EFXwE)&fkl2@&C}7OU&Y>~A?)&7YVF z49lp7)#$m?^0Z~>(L~M?%G_qfa`{Gf18El4?srUSKE2uPEb%ealWw))Fhhr9C_x?AAj^uqoh zU(V_p+DkVSrmH$Mnk4>F0S(Aty9$>wY#IeP{Vt?J-%-*7#+NXiF<@BxkVvJ?*ARV< zUSJYM3~n*Om?3`Z`KcvfojNR-0IHBr>{&w)YK<+ZV;tL3FP?lWkGf{GCIC6M`n4#5 z$uk`4ODh4YuIdLh2}jS@*V?Lk*U|?S*eU6D6-xw{lGsZ`D{T?hX$xQ+Ow@tAv1w$$ zCO0*dB^h}0QH_u%VqG=zN<_ZK7-XAgT+O5vas?a+(l;{EvI@Vfdeh)$*Gd86vKp}v8)5;D>6>j+AIYQKF#PN88ec7>)BsVjsjam7u)opW zH}8*Pd()Et1rYaV8nY*0klZkJEM3w{n36!v+0>fLnNsrCKYSR9p%}HlQ{HS;t1=RR z`E}K-_RZ{j52K#BtJb&MryHpvwjUWQN%q86^{XVWsA~c=Gl_Lf-BXjQ-*fJiqi8^{ z1*G;nVb>SjYcH)Dbs^VA2i_qn9s6usnsMGEdOYP?XDUXJEX>EVd^f2U_1#F}FrE#5 zj&_IWXyl+G1JC?u68VT}cC`)y7QUld)%7=?U`BwGU9WZ0A~EIHGm7(W4uRHD5c6{D zYxG(f3cc%5Mm=>4zM}G!0rF6M=GHA9HOWxC!Y&#agnhgUaoOu*^N4?P0r-Bh2$H z9^B1$gRlD}x`|6zv4?c|!%Oe{k>%>=(6Q9RftzOwcnz#2sxt}dCad>8+oQLq`ELX z$^`Tzca+pb@Teboae(B6NT*6f*o$WY+-YGS-0GNBn4mEoNOn6=S`IwgO*ejPHK}#q z137}H4#t~^D9(nbyl?GS&O-;YdIv)?o0ilV9pOId<){(TG><$-_BGSDtazOiEfn{OyL;Sn`H>PfGMafv9go(&*v&&)^tzA%xwsjG5&f%&XPyQYjf z4NEY^;1!goMRIwh!ADMhfZl7_5{{Q?sjr2({MEYt4Z{jGc{_0xXd&BTqNm=L3LXw< z8Da!<{z6FV9zVKLGBlerW1$ZAu{1Km3P(T&@TzZAPLD;aPTHo{Drde&D;I0j_M4IY z<~RGzquEi)2xa~l0Q8jd#{fEE#xZ5%Ua3Z+R~)F9@eJ|y6nW0wOt9A}P(%!}^c`Qr z>4BMvt}XxBYcy>}F>kTHNyi&ZT)V>LHP_wlHL(|l)=p%^pM^?kA&GrEq|eIptOaqc z^{g*kbww63cgyueO*za1^ugT(*8_gy`PX*bdbK45`u3wRNtFva8&7O7SG%U6mz?Ldz6=ny!p9!6jhV=^;fswGliWy*%S;2V#!{Y}Sn^b?B%uF{kk9&*G zq}(d>i!v&w68f;ifpy%xZ{m77Jl>P*CL2;(QP%B9>@9m*#kV4=A#qtw|9q_%JkPsghMz&w)c8 z0Po=%3Dew8*%*rH0@DY>f{ZR;UlfzrcjuK@@>pa>0S+)H^IS)C=Ri2240dBXqd}*E z^tYaMhT>kjB|IlO3ixaHX~(CJ$cD*xeaw!(P3rcx{4d!R&=>nO=BQ6xIxS zclS|#NiuAm^@M%SuEcK?8LiTg8Ur!3nDX1)s%Urg3DE5r)M4vta4v*`ebih5Rl&I= z?5-hAv@p3x3pCeCRO~e>Hr?P`hs?} zG8G5t2NJzi$Vtganz@;5BnfrjtJU^nptIs`S7v*&rV!X%gV92TGr6cr#`eOX6?krC zT~;3k1jJ>QO@_YFsmWfMViR-en@c=knR&(G?k3jt)Rda})^j7jV>wB}djg}d(S?i| z=gQlFIiX|#v^yFH$w?9BvYP3qf-K-04=XO0i2!9ln!gb-VP&$(TH+S@95cWitHSIo z1m2}Q9T9?~9I>ax&mQp$TFEVjig-k_3`qsrl5j>UU2}94p^Q5r-%!Hl826jRyLsMAYva;@+ zP5~C7;ZQ0=)uCv&lI@0Op0NLpq5x=tE}zgj#TLZB)OCPEH>cPcI@T!#0LYsKe-2d` zWAhQ8@y4yR-yeG!eu7w7dIW0GW4BAM)P6z|m>wW>@uJ3LI64xUiWHlQ5%7(jh&&%! z6B_Z#w+hEPDmO=b)QBfldI{oOMl%iRA({O|_FQ5udLAR1M;4F`f#~79mk zjI4DWJ&rZp0fdA>Ou_$LX&=qoHr8O(?*m|sV=ZTsB4YqQlHe*k1VfQlFskZ=qEWCN zr4|S=khX71V3o2W3K;bvTn3{rg(+>1^c~`scSyYL()~+W+|`p(t;SRJ5@l}H60%v2 z{{9{G@E!YisxOFk2mqqWTmP>^U~|LW-hTuaTFCy@a41i0*hAsRpvu8nCN$Yyg-$_U zEyA?UXtqLUf^|&924t*LxFS}^fJEcu)RzZ9Psi)1mz52^{oq zr2R7=oyxu0=vP&`WTfIqGknRJ&;FBt9#NX=MxKeFk_SsiI+_rpyHR!wu1pD1iF!dP z(W6>MB%~>6R<*5|Tgk3~$AWU4n1qq9bCcLc6m*Ed1wE_G3oZp_Y*5y6sckcu1gW-` zi#%_V_-*tYq2e>2?g?}h-VKa9(susCG%qPQalITk0DI`))cwlm_$WT17-GnmMN;Q`;^qbg3rmHG@$ zV{Q7UaoP{nYCetAEZ?H3ft3*B!p-Wqtz!@6h$@t5n>8CKWK1XqLT&2e0Tv@!iksRZifcw_=_JqN77DNhdg0=%f3RL{U?SM z+JO~}5;UAjlDm7n9+w6AtdPqd^bil zAM|yFsv4A~%%v?_W4^^4V6PIpMmp90U!HNRmCsCirxAOl!ssHpQe$zP|Cg4DZ`&3N zQ(U50Skpc$RiVPKc64Hl!z!9b6JU4p~BKHi#6XRMrpq@T!)iW$|OP z_*O3~iy!O7M} zKp=E(+&voVvjYg^DlG{d#wi@6LRpQ;6YT_wNP-$*wh4G8`In9xLD$FxB$-q}Q~@zc zd@zKtP-!&NfZPsix+r+w!xzT1BxTbQR^z5^arjh(F!&7C$3ev_(r3`3Wm7Hlan&EU z2g99_4Xz|JBa6(842-72A&!nb$EYr5@KS||O$ac%Giggt(oc3HZ*~I}AOzK>6CRpv z#6Z=upr_SEM1f#VS>$Ej(irD0R-Qr@C~2QhQV0GyGFW!TPM6am8)k{3Wt>C|{G>WF z=lyUz%2bfemMUQ`(UpshKLm^DYyuKpW9UI&nvtmtSi=j<8k3O>!>62D835YIS6T)< zoG;SJ+=s_LdfgV|g3TD>Aek03;Tl=l;ZUIQoJWq-mYi&2$;o^rEU8g#>OHC6T=>8u zan-xSp<_uM>>}t>%bD2GNtk1I;)dkSB{Z)Ujb)~)NQbb^8{TUbNrRcxjCR^psyuRR zvs%V`dB5+WRc#Klk{E`Mwu|nrdS)vhg z*68ob#-25W7FKLP<8U<50j=!;ps^p%DPd>j>vc3@Rbs2EEmClfljx}t6)k5Dv5IDz8yW0MCru`cW|{Icn8L*oDGqch6Qnxm4oG4 zG;>M=D@q{|ckj4sfIA-fUkYmupbI+vEIch38@Vd4IWlAhc&Ajee>mt%sU1v3Eb~vY%rt|=D+elnl(a+n z1*W{bbye=aMNn1}vmOrDLM`~BckPi;{M^o5HJ*=aPd1Fn<`lzxjF=Z43Tmm<090hT z!VY5xm|9lF9RsS+I~vvl8s9MQ0o{*I<;LW_5abu5$-*ynW?3A|N+k%L*RzB2M>CZ~ zcdl}k0(h)2KP%7a9A%=bVA<`?r^}i3rrUi5BPI!nT=mK)`YCJVqeiM7BZT74U*qaV zEy;RN5m{B7;{64|x4w!Sc(!QH; zOjESNZJj@4HXE6a>Ta?Pyj)L+buulA>IRO9{Rq*klplU86KbEb>$CiO<4IeEF>3Vn z;iivT2M?GtI&IG60d%I$o-<5Mb_SDQ{E?oqv(_2sD?6h+XlF^ZSn{g z$SwKG zKnyq4RF6%gfU3s8s5Ba4_8~Lqbe_rxx3S6%CZ{uMF8Uk?_=zPqBSvz=3>p(_vw`7q zAg4coqe~^vLu+^QhFxaS41=@x=^T5UV$V*6*9In4^8tA-$PIzk5Gp@iHG#5s9M=z# zhzYJ6OIM(FAkSSDV>1V3N7aeEF;Wc8wCW*)sj$lmG-w-oy%EK2=lsjZ(2i z0O$uexA0$ow=cJ0o*o9hKJCaIx=v(p?jHbW9BzvQ6K(m>;IzJ31W89H8W z@!941<@veTMdo!D{~9s>tu5xS+OISh zQX4yBTVv%MNs8gBte`5ktIL^VPsvx6me}c$TM(QP6BmW6DsCP?(?dtFS~w(!E_A$9 z=Fl+)xT?J)x+}I_i|(SjMJt7^K#|-&G82&ljYIDX9fkq}+>nJI;k1zA-%Kl}Z}O8x zFqf9Fr|d)*hXW8j>2xuhWRngMA`5lY`53J^+=ocU8B6a4u)6pMyb=JqQ=!-P?4(hraCw8Q@jvxew^^dyM-5m+1;RQhciCV(X!8S20Pj#Gb8Th#H|dx$@F)I*?U961X02m?&3ZmDNT*>Ml#ZpIm)E;>HbUrc?S z(U@_f`4($Ib%-V#<#QalZ-_%UU(MOVORv`I4nrOuHE`UVFgJ=OaD34TRz0*(2I|A} z>QhRYgbz&CFraI8fLie3yKT6JVQ=^Na4#R$ye-@0Y>oV(F&&dN^ok)F#LAqlHyiYH zL6^~BHIPF-9Dpt~x8yr+BA}Fm#r4hqU)iMtsiU+e*XL>vGMsu!l?#_ zTlUeXKf-D}*_*h_Vz}3H-T=o{BzkN*U7j8uESLtzsBlG?RldXnW7a+#@IIeySoJ<} zVQ(7<#EQC=Qz6?+tms}OD!N2qs9N@E!)Gxx2mF(cN1^)(gh*>@Te98HUT#X|(f(d^ zdJ6TVXbh|VvfjRZz}) zXQFfbuo8!)si^KeWGNi>y@&<_++&7=vB^S^+{4$ z64_%mpx0yeKTzsLOc4>j;bv0)g?ZBH9vmJt9@o)l%?U_Vc!9_m`?YwN>F?9`ds)2D zPfn6NI*!sPkCLALTBzx*VUYeJvvptv? zy;J!#-uK;Uo}FQ5UN!b0qk|3Us175NuChXLg#8EUxQpGWsuw3)x?&3>)a;EN*gZO9h6@(PavqfIM$S z7(AyV?AyUJ1Yamj`E~ZCjF&Xa$mwvMeTR!{y1Y!(Wga*7{Vkn`9mv=Z*Qtj6Du!Dp9Z}lL}8(z`5h8dnOyj({vIjaEzOIh@m+S!{6wu5 z^oyzHj(+fxq+vPQLEE;=?i3<+k-(i=&;lk66btMFz%d)HgvQMLWQ-d?Qrv+Bpt1TK zB>q^d;X>W1{U}L4``(1gnn}F9ue9KL6_Bht$@rTsJ2z=Ko~5zrucYk6R^UUzFw`m zp}PP2pm9?j!}gVw3C3XyQ05J}gSDU^`9-|Y^ zwI}VUQIXM@uw;14blvLOsX>M8bjjosjd7D=L1a&1GVY*P(6?^CfI;bi~vVORa#)X~MJ)(s9jXz7=-S9elr^&YY6``Fbw>7lAfW zqQpJ#{VK`DbHD2F+`q>+q~ao}coC$9ozd@UMq%Y=4lC`bT6I?y9AhEA!5ZGrHh$^` zNKIY>{G$Kimp4D|c2`;`)e=+*z-uOqKbG13fRj<2ou7Y8Kb{@b>*mHmCp0DtIukeB z?C9t<9QbePlz6$RiSqAgMQ!21^SVTaSb8v{CQwbktQEq7vszOMGt|=h!vh*WDt(Pr zeh&%ItySOkmkw%qIfk(XsBbLZfyB8$*;9&GiYr?BJkE%~+-`5zn=#lMdRh!1&U)z= z&H$6;6~J0qTD|P?@vPs}=603E?h(dEcHahDe)Qo)PftBQVfbuhGUzPNqHsQSB36Fw zI+?ZA4^st~c4A?=PF8Q-RBWaIwB(xo-uQ=TWATecb^gVoE{k{K#m2smN~;kCaHiCqg>5Ap$|8HEQh9Ogk;Sf)x?U#s4_EaBi4#r zzLRvg6?rwON`7C?SHUYX zMthugj<+{y&lp45DIXYWt5exhAsZL-jurZs*%BSgO!O;dpv@ES5J}2q)Gl*YyHr}^ zGC#EJ1KdpoD&@n-c;+l?B^Aj^n?s!~Q#}dHosX2))v~jEf8y>0R#DyC>Bo||HnjSH ziis4nDKxNOvLRA8(=CaJ9QX<+1@aLc99gz@!`MoXfk7^Ins)ZVeiMQ5K}Q)~7>j(Hm_qW2{w1wFC;o#E`g?8TM$QYq^HQ$Wc2iLq zQCB*asD+6AWVHq-q%)=QCp0en3i;h)k1mL2>Dk~JpFwhoPaU(;G{_WGLLmLhqBGu# zKb2rUe}>0hmVC_PJUf1Pnml~W#Z%E+kI<4_rBS7=p<>*=GRDz1fXYv$_>Hs9Mj|bG z(I29(_qiBY``}#Axh~KL+rO_OpWScasFi)LWb)Jftoa*0){;D;zsPOgh=(h+Zk_?% zN?)1IL7^^qwz?UxvSG|I17|EPy1EDyd@4JaB)zf3O<|O^x#X#H|Aar* zZLxi_TJN4HwEGtDLrZNn-Dee%w(8jLmH)Jt;Me#d!R z1a7>Y(dXJ@0yMFNCVDK+64_q712}Ui^2!b!)K@+%8x~f8GA1J+msUkgTM}snI7j}( zLf7JB9f=~AzTQmh7^17M`bdOTe#3F0t3Jrxh5gm_*U1#ZSbLIG@G2yj;{s^*G-W-bVf1dQ!=-%a~we9`3+7Vtyc5a7Khd%BsU(54$N#1S_7dh zH*IOXOd`lBqJ=!yLFN}rRg4(vL%Ua4mA5lFE2ocF4Q0M>76=Rm%9+dB0FccXjZpOF z!=UI=v*~n><8E#Clqh0sbB+3PmXXhyMoU6}J*5W^mAq`|T6MTnk>o}C&#VdP>V=~n zR$3j$p%QQT=i{lBoVSw)sI7t9BLp~dfIdKJE+TNf^GZXS7+}c0shvfedQrfH0-wrk zq2D5wtirl!wxX!HD_AhFqq@vuhZ2ttkUnv~=Nxs}C&owa&HdvNz*UIUgne#Iotd|Y z85$Ef*{aUQjOPfra34N&0*q<8>lMvW)Y_Y@vMNoE_A1DDJcC6{2cGviBP{$H)>m?M zGQ;2A)K$TYa2@>6*HjDtaN0$PrkQd8eh$$XI0d@jC4fROT1x?#@)S?&=Hw<{%e&y1 zT~^k2>D_rhNUMFjcuWS|(u565guFIM0L=-hmm>Xv;ubgubBmTVQb^+rW)l8&TxCYey`n9# zc&CToukLK-71$wxh)&dt!X%Is{@RgvYElq-E64hJlcf>ZE%Y-l-&A83wG%hXLl#YU z4l`xcD~!S-g*#&!t?6V!@u88$muGP7&!C&7=IDWu_OfGJc9awCSG;!xv7nYX1A~2+ z>b>YV&gS9>tXXZY0j3>Ga+|bw7zr7qj~g*-QCikQq{b$#wrE0S9~MiN&S-(*c>wl# zSEhpOGE*VEa-An;HW^7uc5KN2(-!+t{DhGIpM-~etm_jSBZ{#@3pyBq^pAOH82+x% z!Pj&Pw%pbujRz(Z`vl+}bmoCS0dx>HQX?}U18?V3_8HE-+E_ig*M0QOH<7lSqkx)* zE9^HBf5Nug6veeQqiKezSdHJ;i-`zQv;$s17>&%c9(V_545nk9|M!dK*!+$oG0Xw} zpaW`qrFn*55%qKVAJkND@%yP;rmOYK^=d*g(k|=bllxCWznSBFn!POrg+aGv@94{4 zk)rp2%v`PvkF8LgT>SlS{|8V@0|XQR000O8?r#4~e9=_j#X1210zL!)7ytkOb7OL8 zaCCDoYI84aX<{#Gadl;Kc`j;m% z&Z>*#f718q>sghrn&jL3xJu#C``z(_@h&wwYns(`GWq!**mgWCmlJ$UuU-_h#d@CA z$?N==Ul!T;=i2tD>EX|H*yl;Px~THgvnJWw*||G}e|PtEBG1cpF;APkEQUDtI7y3n zQZ{EQ&#+uAF@T3*4aFPF7O^2CEvYxlPvOCR@7O?%**O@V%}1Vr)iT- zaSFFbd!sw}2qxM;Sr;>$L_ayti+OoIq;H($1$=Fg{Ce$+YhO$z$&<9W(IoQ{KAqRe zaW+fWb(YlG`>aYANxE9qNlyEd7pKXi*WZs{K6{fiRXWS4J5IQ6(%HM@eV!(1b-G?= zMFX3aE*4qEKQh{Y=XsT#lpm6L4m+KnQ16R!4P#v-P02&Ta8$FtFmgQZt&gvxA2ASzJKkD_i1(Qi!EsX24)LekX04# zIBt7cBu`&`msD9gzkoLM^V_^`hPXZ0%`@Q-e9<*czs^_64 zeGhjg1h~3f(&1$ZgF~&u07`*9hEbx=jrqk;+pX61Sw|~;?Ap|bSvnfgbJq$sH2d)C zq@$g@aV?wjHC#eK9MIJ5?O30>W@l;r>bwXW@w4x%a+Ouhg&(oXm-=DZz%f2^d-s&! z9(E5w56}kSX*@cHA86tL%cI8{7BB;hJS6m-eP|dxZYjo)F6HshcyRzrrn6=ZIO!t! zc@2PpAea|I=;k+Ypek$DRgo0gxePWwDaP2Rz z{5Y75>vCPuu||W}t3}>4I66S*`5D}$dPVr2zfl!sLr?KTZ(rYz@eZ|p@r*vp&KY#n-(azDWkI~;>nh88g>U_Cc!1q(4DsV-CG~uFt|K_`Ii6j)KHMjk~%1b~L z`7c>=J)bi=`MOC@zrl{_`x2i0<@IZ#Yl_AYD$jrfJ-EBKJCM6dRECEK#9E%hsp72$ zI<>p^U}u^v5k`PSRt=-quW51rSm(2M&pxawS|J=x|LeoI=Wl;Jy7kTA@NeH7-TZjH z4-ZC1HwS|+CuW1;+yS^@JYX>vB|tjN7zeBogJ*BjQyTE={@e3ggSYj~x08q8!02DU zoxI)s=A#|ze_p?O3GBxyOalAAPZ#+dh-_8Mo*xaTzkYgKAKj!r(%=}WG_`<1|MqeE zaX3IIgYO&;7!agkR?pHEL&#eMz24imZzsnmMb#XATpzxjr=yccqvuDz-uX1J-J0?p za5mVjclbB#Q@t&YZuUOHwaPx8q>DQHSgaR|k0S=|TN{DAZ(8T(8Zu zk{#NbXTX7;@qTOxhUaeb?2~L1F7gR5+{I|U5;{t2@sp?NAcEjA?S{$MKC>h@CqMlq zpq8LfKj{I}`2_JjJcI>j^B&@VIi+Djke9^0O$(Q|J zZ!m-(h>++P$8^(QbPfXtG28l82O)B?QSQ<$(@)UNjY$@dBMiP9jjjYY@)v?yYLhWy z^+!#AXTXiW?j`^I->tX)!6GY8fliH*-9&nP6ZVh>-y9^j-4}`Y)-`|^EGTVs+WH4l zKP2rL{GX}dHy~ih67fa-E?==wm7QiEm~QjHbO^{hC%Dl=b9(r9awI1cLb~ha3GF!h zkj?xu6|7~~J#js2mWzZ~Eahd2(lLgB2kTWf%TIFQm4I{bJI)`4t?JWnhr36J$hM{P zz~kBoknocOlt#Ynr&X0+47iOS6Gw78y`_^m@Y5=gA(&&+^49r4?C)k&^TRPdHKF|rmp2)9b6lve! z-FH(Qm*;@Yo~mdGTc+Kni4`yDKb)%kK5$sBYeR<#pqW)Id&!&Wxuh{LwN0?QFhyBc zUVpzx^Wqip`+Xx6_#@cD&C&x$=`$1@bVee+pvD7^MjIjElVW6!9D;~*2~2QR)^&co z$lMS#X*a9q4ujz_9Lm>^!im8S*_Uqmrn%oVn&fyqb_%NVoRmKePAqL$Rh8AQb$G}0 zV`FUDS8Un&J?*c*=`Ww$R6=anaY^8&$yr9TK=cfE!4bF9ta%2H;Md0&FXnp2dq)wp zJR#8lU>F*{1ej!Q2B&;}mKDikVAbA%Xa#ra&iG!!)2n@V1Y<#ODdPy>#!rC($P3|z z1e~wmdvNcz1wxuHKpXxXo9~-L^fZ7}HpnHOqwEBt5n;<$09C2XDFI1rS(~1~i59?I zT0PQ>r~2N_V4Sl?$?uLiRvFn-#WB#ec^i2KCy3vEr9d=92{126V#YOOd?Lv_NA1%B zxkS;T1=6*<fn@s+m$OhFidI4r8v5vn-ra;KlfEN1eH0kvMAr%&st`|)r zhX(j5ZR^-}pglL3CObiQR(WAJK`J%DWJ;SP*q5*x{HbUMNE*&4|0SEY1Ud`p{6(|O zrlhUd*vqR;$=1>D+^FAWj09i8YIR1NCz`zaA?$X3RxY|*B9%^ND9|RvI6^<5epc2& zePB3a(hwdn^Zd|bl^^(Rn%toAZnyyjl4K)b`O{V>rv^1hoIm|_vIBe`b0qen-lDh2 znesdSD^_SA2d+yC&KqeU>9g}DDV30r8H#)Md95fk;v3Yvc5ENsejMdBcC?#@ZR$WX z@_3yufLk*f+zlW`awB}*3%iDM4iM>JsNeAz>d}18`v@PCs}L?P>C=%r%fLVm7DVdo zJu|F=D);qGh(X7pB;e0b_Gxi30vxz(uS+pn)`W-j45TXH5fKhm)rCkD?S~hefE|V$ z%R&9MT$ACX&N5!QGa)*};*K9)f$#wwDPOW&^tfdK>;xI}fTzf+0yXnv+?Xt#o!Mj6 z2@Ywb=vv5WVILK9;`V0Ygw5^PCxtN@=rQU5_}G#GRDdjV)ZmThWs!03{Qwv15z6-n z!(5KK93=NGQc72=#f2`&@9iL1%}HL>&E=zK|LDV2ww)H~Rr-u}gHG8$?55>b*#ekB zVU&>si+n%B!&^BZ3~bKm1Y1sZHkfVu*<`QanRwMkBI}e{)}5+aAGQG+~u#3!N64Rn<6yHpmj83jgSrQZuSHv0HQW%cXR#`F!NPfvu>KEq{j$z$y=Xs zw0Shj{Rdf{v`;8bc+e!jb<5C{SNPp|2KSZdVo??&yx0>jAApdz&b*?yFQ6D4A$;Iy z0K3HOpJFB=++85y$6Va0&OLK z2%Zjr#^Fmuu3py_EA2K7V;2_;CO1A%w7?d>#4}6KC(q?!ckw?huAB1^E;I@8tq62&$0!5qXRK{JrN=Rd@}K0XYN%RUGgef;FDTfC?C7KS<@+NjV_9neZ9ld|1F zZ31USJ2BcGE4Ds52Br(|LqpnQR8+47$>N*||1o+@7rbz%^I|x}0TFm;iVu^~C|+GM z^$3JEDq?pd%cge_IxcaWKjbxHixibXAWsaPC*O-_3EU*)3D6e_HUZspegX1VuIr@V ze3LJ;a@{zL&TAe-ll%dMR#GvMcE4lex1uHU z{&3KWBnv+w}6^#I^rcbvdCC<DeHuM_NYU6Yy5|jfi~&)XsF&`T%Me`KRRv;UU;%s2$_K=QFt#f!te(PBNS!7kiozaK`r6lG=sA1q&F?^H7+a|24_S>WLQM%qBpJ9_2L2o=we1ZqZ*9l*Y7H0zKtca{b<#7UMr)bE*NUOLpJY}BeDUo5@Imrp zP9A*~oK*HEk)TCHgV-$A&?AZ1>XG>9mYue zxVRuUdUSMOAq`xwhSC{!6;+KSa{~>A13_yPa75^N7>x=q$NW{))V#}>on-+Q{z_Q# z!!?I2F1|YmWCgO_Mn{m)iDBD8a1WoM7lLS8McylAqS5!3{$6YIU%{bNEr_{FPYQqBaF`*WzWs zpw1;J5U*gV#@Ek&)l!6Q3hVG_oc`SIa<6liw8g?7lhsB!n@g9jZOcx;`Ec>|^v0S9 z2--eh#zl7D!#r&OYA%hd6Fa`qat5qauie+T?PP$UI>iCAM5haNFz5Bj@Xuws)x#3s30*xKW~VaK%1kgoP$N1CX?V z`<+p+Av>mnRL_1V{2@o;t9)q|;|Z(X?G~?rsB~5?@$1yi1?kY9yDs0Br}+#76u^q- zNO`Jq>B1{(5Ct%}5`WpF7*MCHGrYauVvwQcGo;>d*w{(*R>I)xfvyAMTF=gnzDCnaJ1GgU|q!v%AvaUzR zux$vt9{}Yd)ES)nmp00^#P0+8V>Zi`zr6nz2 z%V)5Q5U;d=(oin3gVmQLel zfO=jaEo3F)AnzQ#RZbV>F@^aNnc%iRmesqoLM=p1#te$`MQ1hgNI$+v{wH51PpiD1 zl?&l{1PPpH$BXi`9{-%aPsc^pOz_XiT$)bO3dqCzY_hkr^I(GiyFbZbUL$PIlN#}S zMt(m00H?p{et7KWwec1US{D6B(y@}lMnc_Dtw5ICtVy1ISS^5Qt)kXsnJbHnCF;(c zQ5Csul+lc9JKrMh4cz$|E5Qn91}ikuni{!#XXX;!KJZYq5IbSa_aT;-#5fwzIB~k6O^^)wF zd6m4+U`{CQQA8L9{C%~D_}YCZh$mqtI#gTmLxbBjz6=n_vL5w_JJEM8$ZVLHz_3AZ zH|81M#Mn)V?atA+$-h^7I9FqRFmB3kf&57f8S@6M$07PB|CgMVX~u6LJ!Q{ zjJ7&zhz|{XjqIn!9Y}i6m!#Xlfkt3?i`y}9#qW#_%@F3mHpg?zW3ll6cuL-Sz%pOD zz@Rcz&XZ;yC&@;z8j;6x3AjY`NC*T>m&~gEZO7nba9MIbbbtJ3595D-VupS5de-oY zVtxk^GeoCI@zW07Q~UrLY)y~}wh(t6YK#sO?k`?e&qrGK2CT;Pmpll0Q8fk2z0SWB zSJ6{N=2kSij35TGsaF`eSQLV+bwzqO>_;rV&H#9f=Hg$SlJvO+{C0qoDXRcI&0*WF-4_7~L`KtY`pE?BKuw8`eP)p*%-zqCR4PgLp%<>DtNW1ZH$=OE9Mviw6};4FdLnQtt)O=H50n=A6toC&T}}X z28~t4MN(un8b~}!w}gqaH7R3{8fk=vNDh0X`i|fI>BUp$Fonw(dmN&gbw0OlPLF}) zC8=?yE-_X^)#_?>0VDtfr^)Fzngk{2DK6ag5r<^>dsUSmqTq*C>Lk1)9IrvGRrwcF zfWS}^EB;trcTza>g5qIgC1GEeEy^yT`bEF{f5hN_HD#CR2a;7wOb?Zx7{6l#jubfJ zq1u#C>~SbCXY=$qYM#)#OeQrBLpjgbLPhaUa+r>=7`LR3m_dpciTKo()=uW|I$y3A zWLrCiv&4ra?H#m(&)hK$lRd$XwEZ1vOdO>u6y}U!$%Tt(7P0;%-=c*Glk73qYYARM za7-v8UH%WaR+5xPQ|Q&Gpg`9Kbs&}ZWDLfXT4{l{MX@2c^^9p$JpTAMZ~DhS$@k9O zH0m5)sqcX2&b>gPSz%y)2pyD~0)DcWDTgYeDlk*}Cozfiep1tX&6PUN)VFGmAeT2c zYI7B#JF|Qpga@w_V7{Rc8cu)6KuUp@ze6s&O3&?myBZ-nUN7Fk3pRPHR^1<3%`TUb zGr9G@U<-KY{GveRrs;j+Lj25qL)nBkAy|4&t3S+-hGGeh79FtaI&t(6pm`et5n%K# zwy$Hxo*U`9xjdM4vVaNM)qb)g&~95!|1my5r-hUqE2=dRhf~aLDS`4ulUJEW-Khb} zA2cC56FXE7bw>N{brPJbCV60Q4)!KxsI;*%=YK7D+XSH))CMWYsNH2WjT>Q_0uV6C)YLiSlu^x#6DcR|I2~L9PIuRa@ zD6Q+Y#=;Q?T4XZz9Bo3tpt7;y$yt@xuW5*>8k3IKXi4(N=oov!jL;%AzTR7xx<)IC z6;o-0oiI7!GoserYrqb+NGW7@ZW(?&H{NExS};{8Fs3jStcP4-h13S>l1I(lu_)Ybs^Z|w=!M&q8h~yyf3rQo);R3JCux1_M9m33{?+`mZ&9l=o`91?E z%56h+eR1aNadCcJejsf1;#qK&Ca#}dNWZtpPMV&{24r@@_2`Jd2v$2x?(QUJ48JtQ zvz&(!ojp6UG}3=2{iEqf>E<*!0dTY!N?{ou*S#ZOq@(g%pPVa=jR^BZadI zFe{;>*f|@B`8cfqdGAmXOrU!P*^qCMR}yM9I?chtA~=9;TVm-OqNeY(maDM$Z^g(@-*eS`o^0SL}5aqiAZFPO9 z*7k3lZre}g8_r7L2H-r4YGuTY7QlIgngyE{2T1K%xn9hZRSAqsqUadl3TpwF^ijIS zo}t?3bomTX&_^IggLyIK2fBh_N^?q=uWz1El5+`;=6V6*d%0D?a(zmaxvUNDi3)*Ub3fDl)-wy);62A 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
=zy&LsLXo=&wPXz@n9a2zaQ&Z}^g-iinL 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 - - 4.0.0 - - - com.fr.plugin - starter - 1.0 - - pom - learner - \ No newline at end of file diff --git a/pom.xml b/pom.xml index dce1f24..9c23ee5 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,6 @@ plugins - learner @@ -51,6 +50,12 @@ ${common-version} compile + + com.fr.decision + fine-decision-report + ${common-version} + compile + com.fr.schedule @@ -58,6 +63,12 @@ ${common-version} compile + + com.fr.schedule + fine-schedule-report + ${common-version} + compile + @@ -115,6 +126,13 @@ 1.0 + + + mysql + mysql-connector-java + 5.1.44 + + diff --git a/learner/src/main/java/com/fr/learn/Leaner.java b/src/main/java/com/fr/learn/Leaner.java similarity index 100% rename from learner/src/main/java/com/fr/learn/Leaner.java rename to src/main/java/com/fr/learn/Leaner.java diff --git a/learner/src/main/java/com/fr/learn/Learner4Debug.java b/src/main/java/com/fr/learn/Learner4Debug.java similarity index 100% rename from learner/src/main/java/com/fr/learn/Learner4Debug.java rename to src/main/java/com/fr/learn/Learner4Debug.java From e21d1c254bb367abc59b6550df22f757bc20d845 Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 31 Jul 2018 20:01:43 +0800 Subject: [PATCH 10/40] =?UTF-8?q?=E9=87=8D=E6=96=B0=E7=BB=84=E7=BB=87?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- download/temp.zip | Bin 333736 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 download/temp.zip diff --git a/download/temp.zip b/download/temp.zip deleted file mode 100644 index e021cf388deca3cd7287a927e5937aed8d274194..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 333736 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%0ApzusRyfVt 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%0D?a(zmaxvUNDi3)*Ub3fDl)-wy);62A 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
=zy&LsLXo=&wPXz@n9a2zaQ&Z}^g-iinL zx2aDclO7_mpUQG~_X?v=QE1z^523)z8t>x9d&TNObe;L~6r$){i8|$C}*W z#`ogebwG!u_xZ{u6Z&?JDBq0(Joawns;!YS_>OJozaEZh(>$Qx z?r~4^Qp60a?ap*-byj%1Y3w#U;6*#D&FFAqAN#4go`IOzU3}y4fW}nS6|tRWHl5Ra z=7PmoqcZ~=u!Yfiq;9pv499J#hE%miqW2g*n~>OohJtj|P*HSLw@m5EA;an6$gl~3 zVy3ZL8Lg#N#W3iw*c&SX3RO*}I2G-^RqAu0ZZHY9`k4Nw6nA%Mm2R8Eo88<4WXAoT z%?wU^YT#9vW#%N`B0g2qL$bcf*i}JZUhd*pG@t{G zj0!0szmUNSc)@X`fT}`^l2Rb0>ih}sUiJFcmzrFfsF}lN*IBY=VT;#R5boz7BkE+j z^9bLgpqF96Q*Y$e=(1evrKTgro9yzVgDG3qbVYl^-Q4A%o)sfBN+$^_PRfJqPc6&< zP0DGkVYUhY37BWFRWS|XC}plLU8a(~GQDNyG!oHCqja%C}2`m-mSTZfq#?YQJu{)gV-!iX`&@+WVLCu%sQJ(}xA9mgnoAbtMln3ksvmZvHzAM|vyH z;r9lX9(DKA5e$||oKeTr0*B^+>hXU2Ti6S#?sTK{f4;ju3Le9!aB$>CGfUD4PNS96 zeV>9%D+*Lz6?AvLg@ds&eU!Lcn%V?~kj=R#*>5$8zUjE>;c-&55FoI{e|;SofYy7| zXTUr)#tezw?5?%F3bWKJCQ*691Fc(IUlKJAl?sBYcQ?#TP#t=@G2oNpy^+U(r8XRj z$>41wa2M_ylpPf4Kv);-d9Pz|Qd3ir%wNcDc)9zoUdf;2vEAC-u5gk39jY2eG0dCW`^dv+vrLa zlF{*=z&VfNaC9hw{Ia_usDm9#C3aGiFMZb#i>){opK%<04gDn9Dq>H9t1Q@Lu@;iD z6J#)Yjjk`v6$sl-pd8uSiS{)=jL?#BH+r(CgIZ7qoI#79vBoZuQrtAi2#@o>^a)wn zlGEvlX&Cwk@yqfbbU^u{2uW0)tFPR@NUrz(Sx7hyp^m1Hd6P8q;LzM{qjhxhcJ{5B zAYETg{bkzpn2iTyT^`y6l3=TNq2qBQzKM|Ut!l-K5Fgd({*x=Ka=54IKmuP+JEP*6 zp-YQiBaEdb*?}ehyv)^niOh?EDZ1Kxx8@NUYjv$NVio4~o; zAlrs8bleMyPoM{B=@I0(?cXpCZ6%0VO5Y+Mm)~;@-6V@U+lBnBJ*jDpSl`n!<$vNO zj9*~IGs%Iah)ZMHv$Quj1Ap4)C5Ve)Xkkb>XWb#OkyXY6O^Gh~H&7ByS1V$Ks9?;n zXYna}7<@SLfX2lOU7c8A7xi=k;evi&5Pge9L<2YhF-@^6ua1x*XUDJp1 z=|;hs@{Y4E4f`H3Zgnr;JDi;4wu2s4IE=m#m2#nV|J%^OjOxxKnT^E!zRvsSjZ5LI2@`3wTM>b%_jo;nv5+jY&`oi= z>wceYS2j>b{qHdKgsdq#@9x3*awVTz49~6D^xCV-5G=MjRpdJ&z1Ecp#+;|4t`?5N`hsfBgHZxg0^^gN9=6Q z7+PF7RdYBjI*HCU>SS=4$k$}pxgY-=bI0&r24&+0D>1NfUL^QNLQNviZzI=`BeH~0 zU#c*=K@t7^j{*6!P33zg3&-*{qxrhn{bV~Wm2;Ob}d`+B;8 z=@e`cLLS9G{;`Z-W_#d$;7|L%Ue~C*3!4|lOX>$v)n2|j)8Io}mwQ$}vylf#(mTi3 z(?yH((O-yyGzAaj6GB|DMb_DF`^!Fr*~q>}@}%hTup{NY>+PQCc(bPws+Kqm5D^k6p*59qTtCs2-_}}36eTaZlttKD zZTTv)@So-6cbO3-LEVVH`K!Gzaml(tDo;#Wt&&yXyZE?9#UwrRuxwyNK zH=G@OE4pZA-KIPb@4fc5X|Cl^_eG5m`oBJsGkRh!jbSIT{F9M4R_cbxar{3(B`KcV zS((;!p)t(9>1@M);Mo7OFHnBX+B$MYQzdNLbd_f4nvG(53|{=ts>#yi@@=m85P0)j zKMuS}^u#3fVZk`kROpL&t4CW) zX?l*@=NT00mv1Q$Lnw0ecvOethvN;}0I*;}iRtZTqGr_0cU%E=t|D9}GGo@H$+u5u zj=ByZl)zDCVSoQf7kT8^>#cwpvoYj65PckF40$Q`uNiloMWkDJNg&tVh@!>Md6W#z z_W;kIO*5jrV3p#26z%fZE>k|W3jmV~cGX%8_h7fh3YVU)3<*V&G21nVB+cj@komQ_ z3dJ%=`Atj=Wwny`VaszAjeT(-+Hwx&CU<4Rdl5qoa&ke*B$D2Xt4pKyQCTOQ%Rek( zu?PA_{N5GV+Q7)9CN1|i79}bB4&+?}V}ruUZl-|U!!nf=SQy?BbRO8x3mYZ?KVjiunQgEsl zq(}L)l`u}fYk#d4M5|Ey#!s(T&NpLI8D~g2TA&ngj6;bOcFt%Vk$T?+GMdoZt4B?n zhpW>bs(;|fi_E!#zJ~IK2&;c921-Zyv%coT(bg&jy@4y8+2r83*87A!hH=4}M(A39 zRd>Rjmm+8>wQD@D!Fx#V0YiO=BL$YUxHJb zG#cI#u6BHW?rF3NXOA;5OKHabqcFH5pR%soto|9k6sa$=!8PY8z9+;1Y?ySh8KR5X zndsvD4H<(%E(5$BCq16T3~z3owUIA!&?7bzCb&hEgnfS&^yA^f90>x!Nq&%0L0H~; zvEK2D)?F#aRspC$wRLotpoD?z;O2c5p`?~}JXTw$B~e)kzuoxIa;xpTZ>nA>)8@#G zK!3QPPQDYEX~^#f^N94jv7uMe%b8nxMI2=i1ntFuoz#ZZJ}>tV_itYQ)%sTqVBKIx zD1l-SD~emc{dRB<{F#K4$-_OS)TdO@O7zmb!KC1bT5lFoqM9IK8{a_}WgpvL!Bq=x zKg9kyo{`UP%deJKV|%(RQXq50Tq)YWtJcn~lcTiTC;07$dL~fe`g*~cxiUuE;!xN? zpqc;5Rh@=`HG`qo;hzR$7N6Ic_HI*5Vq6uJ-m2Y9X+_X@9}sy7j~$AaA7{cgLCAm4 z7DwjC*cFp%J0pLMhDw@Q=*aAt(5*E+>Y_KuA)Q_huJ(D|KMafGnt$aO8gsUs(JY$W zv*4;~Y=UX-?)4A)XW}~(5m%cn!WoV+OcFR{RN6wZ{I*d85yw*vkv%QHncL9!XMlrWx@@{s3#9Ivu&+?oNx z$VE)?J@>Y$g%f8LGlv9ca=$zkQo{gh@<*YPqme7}%gf6v3Uh8zI-9vpmylr7f-Nl7 zo?EA(G93xiY&CZHAKna6)oRiz!&#IFalToemrlj)-6YdahypMCGFO%=MXcXE?QQiu zrbLF%yggj+1GZ+%%Sg&`^4Z}vq1>G_LsFfK`SyI|#@G=llD#4&##7E-Y5{?KJdj;9+*{yn(G_yk7JW+JP+&p)eZC zIX$N}rkQ!Q(@09Y^l+O$&t5RG{`?eH4U;TffdEe=6CKzX%z03O`ax(1^&dK#N#`L& z(NcPAVsR=d(nS$~0bYGLps}Ua@*nNNY7@S(eDR`t_}jR*k_38I)Z}+Vxt#tbN@i>P zJc2ukTG~h;9F8}%;=lAvrPF#%T2_&m`ofv#N|8oRYxhcsp_A9ECYq$bD+iA(BN^$P zcIer7SX_H82ETN#XBs2H*`SBxb;?bf;{oL~xjBv~x7LAdb)q5sC6lJhisK0KW$A1`}*=`Ed7)U=#7JCS{7Wqv?MP8j{c6B3is5(8XN#Lp$i zjn6L6~9^dmOZkYJp$>DrzOI_d6 zO6m3mE@rKnRpeR@0)$8_oepjNRS1=g;hgtY9Li97^J+7p;9cEH!zRy&#q~$qGJgA#oon}b* z?7_AeRB2O+f-Cq@6n5bbwXdL86|=!i)=@6;3GRs1$xy6m25 zt{EUfTf}Q(duw|7rdwlGed;YEs@jGjO#+V}P+>j(A&~%+^n=!i{H% z6!K~77z2X^;j{`$)ff7wafgm`p)2@XbD0;^YUL=Tj!L_+CMqay8_xyV_ zdwy8W<0E3pRAY*kN1){He#{uGTsK=E0fdwKW zq6}n+@aHM@vSv;41+lyUO<*6@U{c$Mb@^3&DQ0RC|Mf@TCcX?)>j`P}qJDLw_SK&` zdIcv6Rb81eWu{Andz`2{*7X3#XAXc4T;=x8(AZ8NpbS$JjL_LgOF16733g2ehcPD- zwu_t%GRgP0P8ro$p_OhOW_6ef!okgp_`g%ie-Cq@nDvVYbe$gIkYK`_M#~8*Hl)B5 z;+}_+P^-PLMLOSL(Cuv48Y08ZpuJT5m@Ps|9)(&@Cf(^C+8seXk@6wAj2LD}j^(pT z@!HR8=EZk!;dc73PY|E*PaxRxeK9}H6xoEH@uT*DB|GuiH!QDYHa&3vv9g4JAy^Op zkh3`f?0;FgPthh(Q$+H|oWA-%biO()r%MX^Q@vlmJP$M-xj=$m{i<@H!=TF$UyUMs z@Od~Ztwg^i>;V(X(iI3b#~3-hEzc7C*EIM*sRp#O1-pjUu(mhQONC;_Wbp2y5 z9`bj-hUm`g*uS~)8A=3;(=*_oiS}wjcI6Td(Hp=*F8mSuvX-dMfWnA6B)vZTILKA+ zln$jZ)fNR|sA@Y8pjW{nJ0X~E6D)ylLP#zEssTA|&Qv)^x?nC5_)p&cc7s%DmwU+` zHqtyxbccblnulHNCgl)kJR^r1Z+AT9AZZ{sQcQ9o8tIVn%%Q*~k5i`bv{Nyzx|KsE z8D=xN=~3iu*3&Dlry#wXc?=E#2Wv*PnXxoS=^$34GOPgHgTPjn3X7YWC%tU;d^b2C&p#4Z zE2B$Y!@^VKnVkfV%?*@M$pnxn-!P90LWA20?q3=&wf|>Q_W4+djci-m&mQ~7zmyB& zpXM#6p$vjN2PD|LVcfq+7rS(BmD(Z(q}*nYY2;e!M!u{+60ob5oiiG#?R>&E!W@V- zX=h$*{MpM0<$@3};VpLRsXk+%m`EXIrmfDgAHyuDm=}Gm9z|N*qtBG=W&Buw^Rn_k zIOliao@!T@ceQ&xAe#Va%8+-I_T4YK5?poCDYk_xM0k6`j7EU9sSJ}x6rh)>tU1OkiL9EN29_Oa{uin*!;H(x@-m&Y(mE~XN*K{S-2E8q z7-c=Y$@L3RqFZn@Q)Tnu#FTs$zd@VrQF6DSeHR|b84!d&b=cI}0H}jbE}J0*U%|_M zUl~Lh_^3Mr>`QO5?w$6&0mN9Nt3@R_O};SgIWH z2zmAE4e!gMzL?~hiL=`?F3Qis&0-9=$e5hTyD}YcSlbOhTeD^CaN#RUgQ*q0k9$RM zwlly*h=1LtZT?FcJJE1CQDmbg$L$T-vzQKtga}in9!?4b)C#T)^^OJ&@n#} z%-X#euwLiVwiE{!20!l{#0z&;CP-18H z|4^hw-NtTH1lNy%YIi@JdZYrS3=6TcoSI0plt{nOe|Tylf+1r4_$qrAUNH>=D*Yvp zDW1Jm&?DYlF=K6VNis+C?7a9-W*o4woY0IyC-|yi!!}9U5Hv(-CJO}{h zufi>;F%VvmG)+reW!3WE|9YG6*(+cRR)65DJmr5B>@413L?B4X>W47bl1Kww>RHsM zP9fg4`P81T*LLx9cKxn+JMDJg7r*Ziu5pmAv|H_iEV=RDPKZ5^AQoibI;!%{Ws0`i zfirti2s`TA?;DQy=L38mc}`F5#Ky#nn*2=J5*nvB8StZXzpMy$ zoPXXdZINVinh5~{;Yf`@*?G)BUPTlXFLiynF7cp zBlha#r0VDW%#3J@SLY&hL1H>+xn-}}JxR8!L#%o}={7xWEo=c3zm$gV04UzTQk19EuPb#?ROqJn^NcFO@Cm-qZ{4cc#XL!P6NXki0 zF#vP*B0G6*NMb}At5R#B56NPgl7-Clb4PUv!&LLg5nNjaTT7S)EyGY-x5y`#HNP}b zQZd}*AcZ@#!K8{>2Fa0no+z@8e{2{y5?0y_sbv%Q6g5Mr?U2e1v7ng|OI8P>_UwyI z9N;FbWy*rKG{GIgZ+H6>n$n&A?Xglh2Od3pmdCB7gRfBY6XK?gt{^}Ilm>+DqCcAR z_R41HZGdEI^l3ajTK62{kxw2*a*}YZ=IfVx7`s~mJ~1Rubk8vg#k1|PaqO}gg>dNI zx*93)Tc=~?N>umjO1U~6lfz;Klz~IUfF)ve0o-DdbfdRu%C#kT`e55Kc;|gM0<#o> zB!^Nl|FV7@W1In8qYR1YRy2MJ(ruv$dlJS;dnRGsV5Vn-R6!du+3>P$fFV}Rk`f-u zK%`0g-qs(?9qv}Y_V0&xo6mbtuh;x|Q|0(tuw-crU=#OC3cF{{zE68+_jaWGRSY23 zEuW*WUO!;M9d%M_Gk)%}t|E*+_`cn?*WB3LYX-368CY2)n#}oCGlsl8PQScq(5ak9 zmbjmBga5R;9!=XR>POL$R~L`CNEyWkX1DFDI4@V&F&p| z>dchkIRM5&$Xn{Xocdh|_mcKmfRg&pcSg4g$GRG}?v&b8-*Jy>2!~%=PnY!02pRT#p7`J`R1zN~ zm#H!jjuS!255uXz;@OrjL^X|9@=r^(<<1hKUh^`vKsQ-9H@=Kr{UP=CKC~E}&;O}W zsIDBHVSGS9;-Pd5q1L$yan~>Xa@o*H*UHz;cV@cLVFPvY6gOU`F4Y^fOPxrIIo5pHy^~$UkD} ziqZeg_?ywve1x^9!~$7W#Z2=5gP4SbX7-lO5 z22IvaPc)25uIF)uP|;>>2la^$8);-ORfuZ|!+r#ZRO1US>PgD0J0PwyGh2?tXw`+{z#utw!S|A^N~(@h6O;iK&v*C}h9@~H?>B!i&+!W>JE>cTiSc~voAtbIy*6+0Jr4YT~s zx1yJ;ChVW0=slSYsQ7A5-sr#(g?q{!7K=<_qf=K@9GW2l@HPu>(FWb-zha1}F&xAo zR55;prQ^p(0PkT+Z5v}_ktwci?0D9)L4;g&*Zvv4x)DckLy+mda4K`FNVyqvu_>mb z@)MlSb>@qAPMM%ch`asrzZ??V7{6-Pe>51xYg~t#%NFc?T)J-Fe6}p`K*<>_6%DXo zubk*MDQ^p^Lz(pXVPGup5$l6&Hy6Y4Kr|Fwx#P>xGhm-u<`U4Q#ce<`Z?s>Nh`<115>+ilXD4 zt6O)dn_dl9-zLJjfgcrV8IOKNjKk^Yp)UBUUP||G>IbD+ekIitt(2eNTGW?PWTeT- z{QI=XHQ6`S5hsx|RU*`@PvZAPXGFLLtkL|b5yYyumU42?LY4LBLPL+>#+RF7s4mL~ zDk0bwX@hVvtFG0K#{_2^2`?JO!iJg9LK&+mYqi@?b-wCfPamfc>!4w<6hA?pk>-^b znIa{|U9MHj)dL;NS037_&`gPbls(av91O}=Xc~+KiTi#>B7T`H~-wsZ=b{| zJMEZinK!uZL@(!j3l+XZbCXf9PVG645`9s!8Lo^BYMJ`1*%g;F#Yh)~&loRc_}xf3wFH!_*N`xi zSI$a=1-U>M<9}(fU!ugwRv3L2iLSJ|KV!U-E`7nx@oemc3f*9BC_sNG1@;nlteP44sutKd!KyViRPk#CE?qEeuIOmn4U5bc^u` z^=UR~hkUsa5#m$h>a;KlnJ$4Dcz8B4-L{GCej99(9m=-uyu&zqN1nYXKTH*;yOdp| zB+*~~?)r7QY=7}CzTbjc63f9CwZZI9E>2z@`|-Ve`?)xKnK}GzV1vQKFRVj+oRr?O1fmwqP|zaFCwuHI z_fLm-2laBj+2L(SE6xxFJkj%99fzc*`S53m1!P3$%Pa4 zaI&Gt<=dwwgs zH#4~=*8aZ`NCCM_UVi%Cs$7JmZZXgm#6iY#5H0y56Be#lCWi$LPUITG369Az^!S`Q z0$FQdK?+6CaBB9&5S&jHfA{eUWuEG?pH5EZ2Y3B$!*;Hq1!E+vHY8i%LF(Mj zd)@Ah>~28*i?6(o*@^IIf!WV*80zC7Q5Pp^)qHzo2;G(@wu1B0b{+%xlH)P*S@L8{XUBsDWUBs zGeH|vfH3xQ3vP8Q4Mn!gN>M9ef?b83Z2$(xd` z_Wl|EvW6Oj-sQpN2Xe&ADfz(<}mgDW|&DM+d`ZJly)ql%Po}f44 zd_jZf#NQ|!CX`}`>l6g%)mAKy;-5OJ+@>j*{0~PPj+lal4y-NDV}q7r-L=R((EPgW zUO5#D!QzFn%xg2bBC>*ZD*9@DpKN|F7?v~Zx6-4v!X1j6-j?zu_c_>Z|IA0E|L_3ST%+EJtDhh z1h%_eyZYYRIoxV~+h&^<7nq#8R+7azp?ATicUVi~G+Ynvu}dEy^hp~@!~>2)**;eL znFVIz8ZIUNW0M1q0MnTbKKdFd4>~it+cSuA>okzr2>8;hJh6&PONXY`MnTL z)lTf5ceq+S4{z5iOkJX1dP|qN^xN3G>@ZQatS{3=Uey4o=4&ll`@V~3|23ug$HFKN zphe=^4J>Z{Q?mWqQhC*RpZ~dF2$KSy1z^RK4B97Z>`PjRIxLmIJ>GY7xK+K*n@ND` zd_UL@@OU-7?zbJ$t#e%cx>WQ%S==_UROR_?eO?{JXHJ%~Y`AD!S@xZ`M$>r)TM+Ly z(SjwzGx~YmZtMEG+dMD5{|xao1ogIUj%pDnCC(%CQqB8^RRX>sQmonOvo(9XSzujT z&=Y&5zJ&CeP+{P;Z?AfOj>&HKA&F!;rmEL16e+@j{Ri5BPa_ZsJp%pXoQ0!=O@)c{ zUi?nUlz|E2^KbqOv69U+7fkmO6ub*P&KH(%a;tpD%vW}eIjkLoOfB0ns^0iJM%NbU zm6O)dZ|G(+IP-p1;;=pG>;Mi_O)TazJh#9F9Y$bH<|YFBHAu{ljIOvW#kkZB`P#!0 zC9)$i6Lz{IN914+89(h5(~5IKwXcO9AffnqG5l~~cpKIvfrenYt54A6vE&RNvX4ZE z)YW>op-_9?nX@ltVmL^}@zlD#ym_3-_SZsFS*&C6s+-SbSv)&dmnFAGizKH)+nm?D zPWm1ZD}UL|Hi+EixY+H{*zd+!2=9r|P$aFpZ|6lWZz#8;ua@`A6bU>BD&o3zUI7~E zi;e|;rc*!&V)_?!v1#Q3`?I=Mhehn}CG1>|VG561&wo_NtXy@$Dg2aJ zHt{9Lt4U1{dHxx{Z(L9>xpRtIR|Lp@k5})nzAOCXEB+GQW4qFQY2IqFGb-k#f!7F% znG5v&z)T8H)XsAijbGQXPI0EH>%me?=#EW-3%v~1ewMig5ti(h4BocGg4P%B@LKr< z9nYj#m+3NmAJs&ItWQ}fbHphP7xG{^fdS+Re;dv2gdY$rV>!$1Ic38l5QFDM3pTWr8F#j77L9C--iW5TjQMz*RvrSD4YdC^93 z#a`NT8nSr#l?;?z&g*2jb9*iSM<#K_Ze0=9hG%>-lcO9U4~22C1NE!6Se&^WxOhO+ zB$1JJa+A56t$h)P)ATIRt1S^m3#GWN$lfe~= z^MT;8&0x7gCjH<)4lslOZ#K%cQ~Bun$&Ryo7-a4Vutl-=RdVe%qIqrYOxwBku3SkA zwng$KRA$V7%RF|~ap4yg=WZ1Q#G_5Uu{K1K*92G_(3Xmhk3g{0GZA%RTticE=^z@x zw{S_>)(aHek^_O5=kAtKkNZEyc?|}gjA4||FNT(<%H|qd9+okB60n2J5BM|aQBS#FRg z$~S&(p?g()NA!s5ffdiy#c^XkvFA6oRi_w$;?#kZev<51`aEHN!X~1SgCU6q zUNqLTVBUkw+qV8uuY#S$6|hS8p_B*NQ7XtJ4Js6K^0NBtele2#IA2?6{9Q&tJcNHs zBX{Oezb$+Y0cdJ7Tyk!82M>T*o#+eLiztD_3&mES9mm?(Px^PyYP9viG7B)O><2CY z6Tcl#@k*xqi6O_%hIWe_KDeFR_$1qNE{hnwL%NqM)3kjGmjvskUy74M2J@Sl=Vt}#gk2&t5xJkp7L?Aa zs(-DqA;BunZEGq3`g%xM1iQOuI$mza_s7Q}bA9a8YbhW(MQ$be`G*0g<7@ zIzS#h@nT{%;OpMA*PQH4u;=!QF*1HFF84li(#CbG!WMUToAT(Fj=%WNpTZP&$#W#W zgsGeeBD&y-g6yuu(jetkOE8r9ahr|y`(4LMEa@~U6@xx56Lp=oc*d(p^a*D{{&PuV zkCBYRmxs}qNUWSd+#jyiUymgyJ$GQ+$vFcc3*mjwmQqEpq+l5_Gs|h-V*vTw>W_CI z7z7GK_HP6??=G>1EFLbk_R?GWg+Xy#0mq8UnC0P8d3C%|b9|+2rw|M>S=5uhHh*M} zt0??K?1zKzm)Sljy&4(CXm(}DkgRZsupSZHe)+O332Aiaob?@cz4JUzF;V>#+*@Ko zT>F==kCKk=SNMM!-B1PPWHf=7H%K}WTK{SDTmQK-Z|fgAow5~7vt?SaS; zKVT_F)S-U_Ymp4Eg+wCJqhcfT|6>%xVDnK)tri$yCA7|_fJ$z&^Hg0j^(YpVM8{T?lPS11B^H8X03GUZn=u>;4@3F!vF?9Q=nk zNP^GG1%Hv(HzevvjB$_oL`2{!CO5>M|5JQ{hhWi#0WusX4G(0L(Us-lOaS1pQ&XGU z?6`g;ilt11MX0>c$L?TIW#E0_yoPKem|0Du#1<7b)*3Yr24j|S`!%mZYj}s^tLViq zaZc02QoI400~!wYvM683*y)C7AHV4hg)a)z@y3GW!NK|=;?iXy z)r{6dFN6eikm!86wQndeNsPt(rWoFmX6i7BNLXAw4N%9iW5aakFvwGyn5DI5Bkhal z5q3m`7F8h5M(s&DT8z=#;5Ogp77MMNIbRA)wFs1E-gp}$=WCX1wlaZzfYc;Q)8X<1 zM~GO>(?AmFUv*t|ZC&2$9M8S&4tZYbop+Y+kvfD+R|k)CX}g=jhaj5a0ko-c$=aA@ z96!CDACKRK>*EpF;0~gaeF}ak;DT2_LU6DySYc!hUc-;!doI+>Pn(|WbkbwTaK`=Q zfcZM##zJI`X!Ycm6c}r0I8=shCZmIL3tZvHxBA6C##^7Ce-~HcJ@3*x>s?c@r)oPM z60S>Ir8nq3QF=ufN5v|Pdt-4JX}5kGpYHewsxx}8^#AInf3JUMet^IAOaQ_yr5YTD zo$!dR$I>%`D}Ro`(mJ2^6T`EeXey)9PKL|4~%%A?aTUY#FMtjz<&#Qd;Tq9VvbH1*@gsDU{xVW(8}7siS=p zS7L&CAD@BVJuAL2v(b()EOPDM5~U{63@AO+g60mZ6pxFFFfB=5t7s$%xHkNfKLy+O zMyyt{$Va+Xv?jXsTVVmL?a-M&`7~Scd%30=nuf@bjOnp&l89yzYXbF%%DKTran#%X zug5KTc{p?5B{p9Xu()pXk@f}7$BPIq2&sjvO}OkWhI(VHofm>4 zLseR$GKMLCkSj55ed9wd;Nq}F49VJfj445fe8I;_?*uVLP!U!MXx zj8MDd*`*2-T*pjxEYY5L_3W_5Qy;8W51e?|?=N+T8D!WR!cJHe_w8j+_=x)ri^C0VnZ%&w`qgq)I7!D zfC(y=^0k2!dCn|z7x(1&X6f7#X>Mu$jZfApP3$YHp0%41OD@lnt`?-3H-Kp2(VjT|C5TxOdQK4ChL0 zGhl4uN_AY~~}`=NX& zgX75`f+6FgZ(r7Dwe|>sIh3m{!eO8$vMpZG;3dvbBDB{h)AB;!Xv6PBXdyn6^Sugi zM+Z#`UJs>H5=hJ!ans`QAxwQhNAkX%7TfuxNpyFH7nybmlW;3F*#c4AzmNoNAPYc# zT*OkQD2Fl`k$RIUR?Jb_>AlM1+IX`NHBePNw0o7+#@kCnJFDYxyc4Nb zF2-VShRL|sf^<2`pO^E?O8aKV&BA$a#mx#~d)u1O@%CFzfw6_Q!XPvJN)Q)-G8K6+ z$Ktn1-~9KRTLOVdutXc5AY9K?8Vrj+yDf4JD$s{v(8Z7Bivn++KRz%C|(Z{cW>p! zSguXRl{ybSJNf_~+@gd~KAR-pz-DI+r;=gedejp>h+fQ!uLq|)_W?Hyw=D}sq8c3B zSRc{fN>;q6V(%?UNDx0=ac%FH&B9Wr`N_7XH8T!E%Yy)^Bx*_@$s{_;2$8fGd9Xpj zIG@ho!QiH9ru}iIXE@fusPHzqGb#7m8M&Y$MJ1h^MO?^F)m0!z^cMDtv>#@_zJ|0k z#MgySlhYhV()^@{l+YHD6fxXNSbOV8kS6&GV|()QVZRtSIqFBp1Gq$TFVK6gyO~5H z+o|U8U(;?EEqje?aE$j&l(`SB%l0 z><*g>fc-G)x%OPK2&I^=7f(kHXqKOhM|ZtuIcPK0H<-@U#1JuMT_9Hr;g-v_ZgP+o z8Y5oC8_T=gu0B^|>-GM+3Urz{4QlKjDpqj*__Fmg6uJT297;_59) zRsWQ9u~Ge&X_#ZMiHE^?l9n1PQg&EE^O$Mhi-Y2Bz`VU|IL67EtSBs{F~f{@EJ6)b z)Mwd}>8TP!br&!leIt==d9ic`w{flw-{%ez33XP|6zW|}+}YEORfl4RZ}IZ8FAH%m zl-=$Ev^^52wHTEO-vN{|#l8YyH(V67buy*-hLHzVH##XOmQl;7r|qKR9<2b$w0VB- zv8sG?@ohqeW>a30AqV?>J8u<6shZtIKazrVqV9B?^6i6I9EqS&a=c@E`J#m}H2B<+ zTG>u){&qd@lDg%xpmiZoh?F%#`yqfy_>0YMG}QKQ2Lhh89nF@Tt6@L~T7<0}wDLsVhs{ofxa}3At|_yp+&OcTiHCrrcQqAJCd29rf^oR% zo=~bSB8+2(HXlP$KGx;UrGJ)l^za>^o5CoHfV+c`?v1WJWy7lV%SD9Ki(kNwcNY@5 z>=xTCKJC!b#J%qz3`=R@bCneFNzh)BnEO<=F*mV%YN2c|kF%BhmIIBYNe8aX+|Db; zb`}cfGos4a@^Wh4+>jDm2R>!5=xGg8sF%kU|STLwYi*D0l4=1*j+0m(6 zy&ebD<_1MoT1$|36shhs`$5-?twS)pxDjYSNaT(^9m1ft-&MuuRd~!4v#%`Wkte+4 zV;_0O7gPC*AM>9SDLGs`Rrpue94)t+mM;eSeKc6y@>Yb^IhxR-QB&rY!51h za9s0@t}&Vx1_j^S=6X@jQ`KeQ-0JL1x(Crvo{F{)PQiT1z28p6IAyI~q$;Rwmb#=- zR#XHiGr?TP?BVa1DYp<{Tv^h5m9Yti0Hn9dQml)R2*|GVwH~Dtd%f9q$6<68T9w*y zz+o&_7K2g!+R2+B*^=nsBF8C4u7*QIL|ulm$+(b!ijWc!S%VJH><}V*O@xxDS`bav zqebuDDwiP7LWzbFG$a}~E`G>+(e$7aZIqTmL%m@1jw6f)x(~W#3ylF*ZLyG$asq^# zx;Lf|JvlYHxhlAhtQktFg1q+;Q!o_&*lW>%9&W6Zm%Wts zrBHg9$=NcUTdA0Cc)niSp$}1X5pYYT%C@=@uc@+U6a$4WAwaz~P@9HQ)CpEX-zS~$ z>ilcgA7W%{ccld>ZN+Z+>{w@iTwkZfG1`IBQ0iDSz9|6XBUrSLgg!@S z;FG5+_XV|l9@s~L>c|r>EwzhW&oGAM4=oaBq;*Q5q~nZX0+3f@06t-d)g7e=N8U-> zocC;6H+9I#}bDQKcs+zOo=?y9?fsi@`a2HL9rmA@~!4NWKhm2!{%G zKN!zgR(#vGuAD6OHI*|yZHO4V5*U$zM2Xxrb_PD1juC-!vWKGirrV#V zcC&brnz+8zQy72ba=apozMgVX5_p8b>mr*}02z+e3M{5ju<1PeXz+q%j5|FuD_M^P zHc818mC1oi;8MCO(%-cT{!S}mFIKfHgwivUyw$ze2*(gf_63cZ?071P)Bs-i1t~ie zT|>w-#DzWY0xwR_r{^_hf_qdgv>XFF1Wj*w?lp0rL@!dy7W&NriByG)=oVj8f2?xLi9_jAtaN% zfiG+coe$74jW6hD--x3p0r-7k{rZBJs3u?0ArD@P6fj<-VX+PX9au~7;ITrbYM_68}B4ihPYndUKO-jLR*fD7@t5lCNHPu@dcCUPO8j?`CM?i0T96e&C(zu z`;JWzip=lCl@XK}8%YTM4n|22CY>%GMVj0&n=IwcsQH)L_jHZzE_wc28Njs@BOT^U z4=-UwggqxqrCKN{f|51vQ+Ty{NS&A|&^)hL00nOrVg>pWCa}q3+~tP~!EYbM zhL+JLN?)!bPo#&@c%znu5k=bso{`7w7q_jEkRq$I1MFd|5|j^AYY$Lkpck;-1{KGT zkEEpvKO%6To{N`ooNdJIR|2F;ykUKyCVrC)b|Lk~#yNq=-DKf% zV)bHo0{AR*MjE9@&uIkDwumOSJCl)gZER#U|C+K%SH@6)jYqiKn~lEkp-=@7S50SJ zRkyvsWD(80(@SAyL!zZMNM>v;%~(8!NZ~v!HrIn?8Y!2ybDvYS%stuGZ_2Jvc!l#; z>W(sJg4VO_5iZ`Vl*?r7?u)fR>7&5*A(EUD3ZYjq|LdmYV4ZCTUG^@mG9MkM9rd^l zDzS4055JM2B8Drpk)bPRsUh;EYsKcR>BG_P!i#A`OJK(G#-#c}2spA{J+BwQ-J|vA zqBue-tzs(iTRg^cj1y@#)w#Vl=RBGEQp+sM)+hp%HYX(Fx~gnKXxRiM8h{%DZ@uyh z2qo0RK%yF;QX3j6{7Orz;HeYgVr?1=qN2lMszu|meX+^G7}1-N;)ma+oSB);5C_J* zD8M8|^{$rRvu%uuR{y9;0UO!3#8&>A@J76wqqNsVKix8HJzzPzTe2tNU6mGo#}>XqF?aCFO(6} zEi~rM0Tj#LmMC@yS#a0ir6e8z;|>oQ6B6zZGW&3|~2kF@Ck1~dCs1veb8jeyr@ zSbiys_}R?{Tz2J5lh~!eOY7YRm27D!!%`V!j8S;RU7-j5E6=GMB>;CeO41WJJ^V(z zqqS%R{#Vf(+!l;s?75)?p^ohBp(OEEl-~r?e>{AzdrxIcv;)Md9`teOvB34<)x*Ylf{+>Q<J6@v8^Vjm68b%`D;`8z3O7HBx-0))RIE2T&Gsz{YwU>ByEZPf*BG5AzTdtKC+;K{8SVrQOudi7W{6kGb9$g0 zU?n9V01SQ!!<%*DGE|^IxOu&@XpD<+af@T5-g{rP%>hblmqtR%#`UT^b{6#{J>Lo- z#CLcSHWB@pWubN1rA^Xgc9AmxP_>q^vVU}2J3hlc|IphBA)(FZN-!>Z(kAa!uMe=o z8?0Kzu7cVW*c+KmhFXG$2(oTc-|Zq3>$tn8U0c!6^AI4I?*YMaxR{+KM#wRFgqOuL z!SpJT_jErlIRN!fV;~kYn%Gh7g8GPso^2!_e2tABz({OD;II+0MpYb-!_ME2R~sp~ zwE3Fvo(}1o<-6SXf_-EZ6HY!F9#@Np=e?dzKB=PnUYPvkp5>&4U$PMtQyrOxBHkaU zBrRCuCwz`eQxuAs4&66K6ZbWOBM?0cYV_B+M^-!!E{~av&FylKlW%tF=&wrLW#GP^ z6Me}Mc8RtwvT0rNS#+17MTYBEx0gK7Y_k$$bAOz8_GaRVJVk}G8|zA7m8^FQMAEkQ zU|R7TvJY{qmQ<|hDJUtGf%QB6Mm-XLmd%8mIt*VGH1^CFK@S<%8Mn&5r-hqwR|W_H zpS5F*2_7J}Ke z4$m2T*pUxs0i`?c7R)C!(B{(id?nFQf72a)x4?JOBi4#Ok)@+|%iW4Q`d+Ir)3O5z z_#W_DoL|EtgUQaNx*9}>{}rOv(s*lyPaDr0Run9;__KiOP;_|}RW-PB+ehg&`d4}y zdd)58d;E!moL4DN%lF%4%Q2kpRg!AZg#*Gg;m)~c9vt%5U*u>p)P&%+nd5|ybr!3Q zUOS)|6VJJLj?>pwecF2+f&l1Ky;HCf8_!I4xdMEST)<|r1vggytYtQC!9%C)#ZOo! zeWqec7*{1rjX_RfAGi^b#8YSwJt9yWPpOWgnU$Mkm?6@Cpn7}~aUJ+Akwik7sK8c^ zeT9+UvHYxrL&TsPHCZ^kvrKGc!&_+BlBu6ZH1%~M6|%Z=)CjTz&7A=HF=-WJ9H&U& z<0yx2y%xDStaQ0<>k=J@RT$sUM(6ee0Hy^cGL{T(oR|Kcq7c7DKhlgzHpIg$ekG zD?QokB-;=79=^;scm^>NS3U7~YDe#$Pd&3}$y=|Rt<*k#)PlV^d1lexEsTg4Ml(se zij8Z5SseLe)1~G7rf@yII~9(-TzT@H(dIrY8LHk z(EV!Kz-rX=HWF~9mS6TyT|Fh}Q$}64tz^&ZU-ze~ z7iNRyj;}w3D9_9?)w72MggV>hr@FCxWHZ#b{yj=i;3<>5l^r=zL3GU5cqcBGrV3BF1QynecJL~TqApL+ z?&B3d=MlXhD_H`sy(U^{oEB>z8M5c+5HjatD0QyxKJzDuz;O2wsQ?8<3X9F$0-aNZOHi z9#^dIB2QXB)W3sK8CPdGqn#%awLeEH==UL zINhj8i?)0C{E`jxY!({aw1!CHV(*|fX-z(BHcBhiC$bY0ldH*62Q@mzniw|0zluO& z+t8cwi^93YrTJ8iD4Ehbn19X84mG+%#urn9D4{w45Ig}}bCX*ae}3{MY^ZE+eC2#XPtVT*(taIcs?7b`n$z`7neSx~hqtHeb^YoB*D0)S zrvBrD$+PnM_Kb9j`tFyvf6e+-3dF*$-rWdx!P$#WQYO-KEmn3T`Zqi*f2}rD#{0r* zX#Z^g#`_gELMP|6MT4F?QWZ1556C|}Js|7!VM*Dm5WAL|=JUN$ zM?FU!4Sj1b8S`qKk3oo&F$;?sl>jEZK%KI+>g|Dn&{~7GL8UWMDM#AII1SoRoPVg% zd$77`7z1j=TPMjv!YKC=crpQBhVEV$7<41Abn45E2CN)|&{f6w=b^1vp23OgvHjmr zu->bXAX6V&D#OE$LViT?kbj##4dE*&$Q7>{1#jaMzooFca0P2x(-gTq-Za z75(sz5ZP)}@~jP9I~q34mLbsuarVAg&fAaj9z+R(N`zdXR8pRLZe(t7Zx300bFI3G z>Kw*6t=?B4nmJG)P;=(pJba4_M)ZJ#(wFrszi4K>hHI&YP)`mn7<0pwINz4W0A5 zlT1OUmDkBQ9^HO4KA|DXc-zl0sf&$Wwg$|3XORyi&~exhVv9*yqB*je97Q%zea}3; zC42Ts4eR9Y1>C-g385S$6+g{g`75uSG0&UMOSzQ`{W_|l_4mUy56A#T5fefY(Y48^ zO5=t%O1+q3!KCQuTex==K?_hl{EG5neDqDQ4XgV0H*$K*d%maHhb*%srFeAbRJh+Yx}SahzO-Z*_Ie^yd z6uUoN0EgYchQmA;H8(xFsPRIn zsu3@lK0KeT!}8aBUGzXd=hk{pdCtOh%74|xeZu#!>wQvo zvyQad8(5Jgby*aM@E9k^EV?Al)e>7Er=IDL5Ym!s)*8IgBcf8Ot+ga9T+ElIWmIfR zywCN;!xD3On0U;ucXDc$iVsnHV@L9!d^bOaekU51DTno~jM`?ks=OvF*K#KWG}Kz) z)gq00t(<0Mub&SclOZ#vwWd{) zt-fRfPJ;R2VxR0Od=!p&M;`>Y-;$Aic#`z1<(v&*n4>>J+cubXih)kMb#}8)*~~cI z&Wc(NI+pIqhpfqfxIXa%J?ZAsU=GeL4htYDeFmkIF`(o?{bbA29ucrN@Z|pr%D2!f zeBUPPpn1A4K068cc1bsP*~HU$4=Dmc0eFX`vrXcUGk_Tq$7RAoszaSJq( zjNwVnPTIR}cm{Ei$C8&#$KEr> zOVh^D6sO#|2nr^U*U30~kr-*Ah?)s?aSdQkdSloDutiinq{aW(*bK^%bWeg+@#v<(=cR?pUPL)bidV z({$wxpnjgBb9p-PY3_PmV}pcXh0mo_mcd=7UDiN1G`#g*BO$?JrDS25WFy9pCs<6= zy?00D&VhU-R6>SF!?}2=8FgLn@+-P8%^6BElZ4D!5$5!f)(c{Me*_pBfL&kgw|gx3 zIv!!1?M9qJ&vey(i*#3G_=NUchwfU(f^+feIVOqv?O34)}VTh|Hq0(HfCaiEEo|SlIsio;+2G1;v8c zadyh_(~qz$8#!e)hQN2<(w!*M7>XF=jy1(;3XFOU7Kd^K0){cf`{`ppWN*j6%aAL9 zL>W%SxNCgr&K+i01qO!8jLHxsPBc8O*bx^SWiKL=Z7~1DV8A-=cctH zhFMEIvT$Uh(>l8X79xc8kpg zTZmMC=+7OY<@{R95cgH6&K0~Kl4?oYkbHh;7@O3jtd^}*w9-MtTxEvyt!y24>9v`r zanIuj>7qEJnx^lDh>V{3hfBYcDHHdQG|pAqhV2(w8;W|u^eE5#i2qv2)uc2T z>xxADiE#Dg@hT{ZCr0gf`IKQzuk)E2@449pmls4`K(pn3;v8(E`}~xt5JjUEaf9n- zw?l$*gu(%=99GLUe`v;l*42|8@cK8c>Un?95<@rC%2 zkBOM#*CqqEeylRUOUfz_f!1dN(;xMS>-(TJHo#M8F*NubjlwT;tv_iQpdP5Q-}Z)d zd;6oLppZxX1NCgyFa~xM_!Y4@$B-o4ZI|fFtiAL~FV59&=+}qVC&&BWSF>@|~7K7HXp@e>y* ziz#;pH%0Jx!IDlIYv+=LEfjDEo#LtRD&t0kA*M_^!6t_W;Tk}p5;bRk4&?E%cwa@{ zl|E#{MD%A@f(d7=HRU5DRW~-3uY3<=$aI z8Ccz!?zXk=p8S}_tcldFOB8tXP=S+E<@M^{QtU>hw;*=DCF*1FT5wE+jEbLcnGv&( ze#AM>Le@)z+|*NJlJaa5Rob4sN3CaivuVT~hst`#4SlPe8!FRcThkY69p179fT5@%bb(kL)( z1{WDfB4sR6Pd5*cMx;n)KUppf?7+At{j}AL)M#1jm1xqtV!uEE`zE z9futV8;4LMGle@NDE;zcLL8Xylti{Bz2%~-Z>HbwtyNeqKlK%I9)0N`+XZ^H)sz3P z3BNEq_M~FLfMGEt2naB}#=jGO+59W9hJ}l*O_It-YcwJBPPiweX(0=*d3X=hwv4v| zRa#-tG4*W;CQ~DF%q-dnH1mN)MF>ZEQ(CZ#Z_!~ZwV3jgpV-psqysHBscW7JA*VD`qCW5KYRnZkU z2||Xfj@Z4jCXq=jvR+(18Z4JidEHl&h#@145b7P_LHfW1ofS)2ny;g7M`D}0xfPFd zoyLq>gSYKp5*h9Yh>)DdM{6)3ziq+E%F*jwi9zHjnBM6LUF*5K54SjI@J$-JkB15J zVnYl#XbfivXjeggkL@NI#F7F7hv*jF+u&ETB9cN&8I({>rLzWuGkW6()Wh(T03p6u)<%&bD>r^i&pZhSH77>2BaMXwptAVsG>n{i-D z`)Vt*!MCWH11_2I!WFjEOpL)FkHNZB%B2?5j|U!Uw%{bE0oDK6#|J?s^E0(%mXuh3 z&BTU~sY5%;naEh_A8EvajO<(r>nW?sRGj~x=ZAPWUJ0E{e2LLyWQn+ky>0+b)${)Y1-)- z@(A{uDUMQ!GTXoT@9WN*lu>995Nyg{bHg~;xc-$H<}U|6(prhZV?*`-sK3EFX?n4~ z-?4=pJ2tit5pGu`iD?idNEN}ma*S=ha-_G^kwGpR=pBX#8VDT=LhRU{NkUBS1ITR? zd0@NmnSO*zJUULxUd_%vUfCc;y|0;W997*ZJO8*7^R!_8{4};ZI>%5D9({Kzv-UtF z7k}1W5N=LG^&-?9`QggA>;)`^C`}pk>eV>yEp_!W>m>Jp3y(1m_zAhsWA!aIN{MJa zN(lk1Xuc)bBRd0<1!u7{9~$a(0Hr0W62LUvBPF^qmBE5-Iuns&{JHZ4wkn|B1WuML z3Tm~5C!Qv5wpS?Q02=Wf4$HsQ@7`YEDWDqC9dF9FgYT8D7w$e8?cYFy*^wM zxu+7gBJ_@cd`Y5UDz$WrvePihM6*oekwG+D8^ppZ)VGqU#yawTKEZ?Xb{<9NfpJMZ z(kNyDgLL5#dW-do-mB%K@6hUkhLlY9rsNj|F-x<2K|1hof#KXeqx@J`62@ci^Z6< z920p8|AUy-!(zBUrbrX1t+ZOWB3c?sQ3>Lx(*n~2A5KXR*mXBWIL@?cXx;`MU@_^$ zp5{RX1kIuWG`0SL55nBTlrFG7_(-7?MxP5$>$-+9hCG~b#vr(Q!3kfGf)%5#5*!!I z*{-9JtjkG) zWJig5M8L7O6}9&&wULG*&dSQzyr`+X$XujZbSvh`_pVEk;$MpmHedb#&VSQ+wj232O&HPb4x{tUP zAI+o5tv~0IS7BLXIOYT{`OKV-!REqwWTCb%_DjF8amv(s>Gmd3+1JPpKX4;4Hmis@ z7qlw(`UO-bix)&qI$VL_@DKv>k%beZ2G|6>(i>*a=-c@S3((XS8l88$2|-)FhXctR z%g@KFlQ&5IK95@kA6NOkZU;9co>!iqf+)o404%ySAJCJoW!il%w(=4aUdursmEw7X zo~#MnerdWt>DYR{je!nD>byi+_4&G<@O;>HUl}S{EJhXxuOTb&HX{czer2*lsSQl2 zae+ixg_F%}hfDREaFyp_4i^s6fjO{$>J@Mb$7xoGv+q-;gw z`*%Lq8|}xUDENVA@1=?3C3RKC9 zi2OaOxwtl}Hx;h2Fz#a3+uQ(W(hvR{*L;Uh4jBBONv4DppG3}> zP7S{vOH9Qio+Q)g7hW69>!N^HPtmg>cv~_jDVK}MM#oo2^f|lF6Xr(NdGZ-0G#4?}yMz`M8hGnMG^oSpK9UO~tHsDZ2}NCrGND3z zAh~+Q*y;k+I&U3UL^C~1Vt0E;jxaLiNOW^^wBd-ABLk-2WEYYxYrkbq?LvNSaRk=N zl7)vz`6TWsWs0PfVof%`_!_vmYs+1I>QqLwpwq>zp`YYxQ940E^!E4a5vL9kdjd)TK=pdi136Js)iSb;$?12E~_U%7FAfE^uW{v#~bwV!50 z_m$Wbz=EqReLt`=2odPP8%Z2XQ7a`9R`Q|2-pD;VYkoqC^{UI5l6r|CwL8w}-tTVJ zIYzhr+vU;b?w2d__`KOKuk_I^#naOwj2Jy)LC_q<9nsk!LYhq`L~?KM$G;S~dsM^G zSa5a$o&zH@09!4}vVwW`uQx%uz!qwF*rkB`DcU5VxMi>qGn{k>)9!#{IV@B_ooGVV zi>SDTK%2@!IlDZsrwuxJn$ntfzP9V$c^PbYKa4JLLRImd!KvEIi zqW)Q98^1&&4gsd&KZqPXzH?x=Z{Capf+1c$}d~eN!xz-J5xWuLd&e~C`KZTJy~uFC?31Aj}mg2vwxh63s|7T z7_ldeLok&e#?X1Dy9zNF-H8bp*UX1nMmVYIC{@wchF<(NeEC@)= zDkuo?-`1f2`VRhswUNEOi?fT9p~JtDMFZ9Rjyt-cs*(c-0l@{9{N*n=ZMk2I@x3ql z2Lyo1S0e`s1mpn&*a7$jv8?zH2nJh2hu@XlL_nRt0G6Z*c;ftmsnhrsV+SmgtAm5R zlMBNi<1fP>H_WfDul@EX#nRUNznphLgsu=L2Lwc|;ODjZE+h0e zOIAi!dRA6O4`xF60sQU-%548P@DHWNzTOx)0!o4aQpkQ$ zD9HK0fPa_y4-)$`+UM$k5-ouee-OV*wCDQ&ApSw46LSrm18{)B8h8@@qS2W54@477 zXG0?!Q+hj7_dmIgQPpVs9gs8*9BcbQ`>qc~^#7p!K^yz##>zSZ2#Agd2*_W7(9c6s z=AUVQ(iJ$g1K$VK0ApJqp8)-U>b71Wo@cnFazU$IA`UA<<(8=1= z1C^Pq2UXedcVY*1x2c z0;T<+eV6ta{D08?piS>N+MfpaY$XStKN{@s5;LOyK>G)OAKUJ^V*wH-fL{88@?Fz? z!aq>{pan@k0*nOcog=&;|BgJqYcWax1I5|Y(8<{1pRXY!xI9+}(6c@Q8%N^r9FXs# z2J-$d+#l2#U&R7dhR?)z6y;XmX4`8vwif*k&k_k;Ic-rMs3llKRG{7N>w zq3R$YpR#_265sWO0VAFt@#0^PD;s-56H7aD26IcZ-=BH#$GxE0z(U>wPv9z=|2RaU zziY^4EX^)j_eg@z|3LhE{N3Hu zh{4sx(#H7@)c>qJq`#@(zY6Dmq5i2eQu~;!4n+Y1G8^-IJ3Rg0#=rJO{=3G|MDCat zT|huG~<`vB2T7!%}A*nbWeDM&*CTTT!VPT=Pr= Date: Fri, 10 Aug 2018 10:20:56 +0800 Subject: [PATCH 11/40] =?UTF-8?q?=E9=87=8D=E6=96=B0=E7=BB=84=E7=BB=87?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/pom.xml | 4 ++++ pom.xml | 1 + readme.md | 7 +++---- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/plugins/pom.xml b/plugins/pom.xml index 7f90545..1f8dc82 100644 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -14,4 +14,8 @@ plugin-function + + + ${web-inf-path}/plugins/plugin-com.fr.plugin.function.test-1.0/classes + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9c23ee5..3785e23 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,7 @@ pom 10.0-RELEASE-SNAPSHOT + ${project.basedir}/webroot/WEB-INF plugins diff --git a/readme.md b/readme.md index e61392f..fd6605a 100644 --- a/readme.md +++ b/readme.md @@ -1,23 +1,22 @@ # 工程配置指南 ## 安装maven +用于构建开发工程,文档参考:http://wiki.jikexueyuan.com/project/maven/environment-setup.html -windows上安装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|含义| From a3cf8f0275dca5179d3c5bf6d904b7e41d47b5aa Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 14 Aug 2018 09:28:28 +0800 Subject: [PATCH 12/40] =?UTF-8?q?tomcat=E4=BE=9D=E8=B5=968.5.32=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3785e23..2843f3b 100644 --- a/pom.xml +++ b/pom.xml @@ -119,7 +119,7 @@ org.swingexplorer swexpl - 1.0 + 1.1 org.swingexplorer From 357e421ba38c7f2ee31d0c4f2db911dda3ddd54e Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 14 Aug 2018 09:34:45 +0800 Subject: [PATCH 13/40] =?UTF-8?q?tomcat=E4=BE=9D=E8=B5=968.5.32=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pom.xml b/pom.xml index 2843f3b..9226a0b 100644 --- a/pom.xml +++ b/pom.xml @@ -127,6 +127,13 @@ 1.0 + + + org.apache.tomcat + tomcat-catalina + 8.5.32 + + mysql From 6fff5a3474d8357539a0c1a2d4127df7e6513f01 Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 14 Aug 2018 09:39:34 +0800 Subject: [PATCH 14/40] =?UTF-8?q?2.0=EF=BC=8C=E4=B8=8D=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9226a0b..0f32fd8 100644 --- a/pom.xml +++ b/pom.xml @@ -119,7 +119,7 @@ org.swingexplorer swexpl - 1.1 + 2.0 org.swingexplorer From 1f17678f58ee6acf459758c01dec7404ebdabeff Mon Sep 17 00:00:00 2001 From: richie Date: Thu, 13 Sep 2018 16:53:01 +0800 Subject: [PATCH 15/40] =?UTF-8?q?=E6=8F=92=E4=BB=B6=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- .../build.xml | 0 .../plugin.xml | 0 plugin-function/pom.xml | 28 +++++++++++++++++++ .../src/main/java/com/fr/plugin/MyAbs.java | 0 plugins/plugin-function/pom.xml | 14 ---------- plugins/pom.xml | 21 -------------- pom.xml | 5 ++-- 8 files changed, 33 insertions(+), 38 deletions(-) rename {plugins/plugin-function => plugin-function}/build.xml (100%) rename {plugins/plugin-function => plugin-function}/plugin.xml (100%) create mode 100644 plugin-function/pom.xml rename {plugins/plugin-function => plugin-function}/src/main/java/com/fr/plugin/MyAbs.java (100%) delete mode 100644 plugins/plugin-function/pom.xml delete mode 100644 plugins/pom.xml diff --git a/.gitignore b/.gitignore index 17b07ff..3a2d861 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.iml .idea/ /target/ -/download/ \ No newline at end of file +/download/ +/webroot/ \ No newline at end of file diff --git a/plugins/plugin-function/build.xml b/plugin-function/build.xml similarity index 100% rename from plugins/plugin-function/build.xml rename to plugin-function/build.xml diff --git a/plugins/plugin-function/plugin.xml b/plugin-function/plugin.xml similarity index 100% rename from plugins/plugin-function/plugin.xml rename to plugin-function/plugin.xml diff --git a/plugin-function/pom.xml b/plugin-function/pom.xml new file mode 100644 index 0000000..e8d28af --- /dev/null +++ b/plugin-function/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + + + com.fr.plugin + starter + 10.0 + + + jar + plugin-function + + + com.fr.plugin + gson + 1.0 + system + ${project.basedir}/lib/gson-2.3.1.jar + + + + + ${project.basedir}/../webroot/WEB-INF/plugins/plugin-com.fr.plugin.function.test-1.0/classes + + \ No newline at end of file diff --git a/plugins/plugin-function/src/main/java/com/fr/plugin/MyAbs.java b/plugin-function/src/main/java/com/fr/plugin/MyAbs.java similarity index 100% rename from plugins/plugin-function/src/main/java/com/fr/plugin/MyAbs.java rename to plugin-function/src/main/java/com/fr/plugin/MyAbs.java diff --git a/plugins/plugin-function/pom.xml b/plugins/plugin-function/pom.xml deleted file mode 100644 index ada9db6..0000000 --- a/plugins/plugin-function/pom.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - 4.0.0 - - - com.fr.plugin - plugins - 1.0 - - jar - plugin-function - \ No newline at end of file diff --git a/plugins/pom.xml b/plugins/pom.xml deleted file mode 100644 index 1f8dc82..0000000 --- a/plugins/pom.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - 4.0.0 - - - com.fr.plugin - starter - 1.0 - - pom - plugins - - plugin-function - - - - ${web-inf-path}/plugins/plugin-com.fr.plugin.function.test-1.0/classes - - \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0f32fd8..4c4df1a 100644 --- a/pom.xml +++ b/pom.xml @@ -3,14 +3,14 @@ 4.0.0 com.fr.plugin starter - 1.0 + 10.0 pom 10.0-RELEASE-SNAPSHOT ${project.basedir}/webroot/WEB-INF - plugins + plugin-function @@ -143,6 +143,7 @@ + ${web-inf-path}/classes org.apache.maven.plugins From 873aaa35539f52a16088f84e90d7ebcef2610c40 Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 25 Sep 2018 16:55:05 +0800 Subject: [PATCH 16/40] =?UTF-8?q?=E6=8F=92=E4=BB=B6=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin-function/plugin.xml | 1 + plugin-iframe | 1 + 2 files changed, 2 insertions(+) create mode 160000 plugin-iframe diff --git a/plugin-function/plugin.xml b/plugin-function/plugin.xml index 4816b1a..d7c1db9 100644 --- a/plugin-function/plugin.xml +++ b/plugin-function/plugin.xml @@ -14,4 +14,5 @@ + \ No newline at end of file diff --git a/plugin-iframe b/plugin-iframe new file mode 160000 index 0000000..f77aab6 --- /dev/null +++ b/plugin-iframe @@ -0,0 +1 @@ +Subproject commit f77aab6afd9bfbcf73b29100e6934feffc263832 From 13ff6599513565a4a8b963bfa11e56d81bf972b1 Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 19 Oct 2018 16:09:38 +0800 Subject: [PATCH 17/40] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- plugin-formula-script | 1 + plugin-function/build.xml | 126 ------------------ plugin-function/plugin.xml | 18 --- plugin-function/pom.xml | 28 ---- .../src/main/java/com/fr/plugin/MyAbs.java | 30 ----- plugin-iframe | 1 - pom.xml | 9 ++ 8 files changed, 12 insertions(+), 204 deletions(-) create mode 160000 plugin-formula-script delete mode 100644 plugin-function/build.xml delete mode 100644 plugin-function/plugin.xml delete mode 100644 plugin-function/pom.xml delete mode 100644 plugin-function/src/main/java/com/fr/plugin/MyAbs.java delete mode 160000 plugin-iframe diff --git a/.gitignore b/.gitignore index 3a2d861..1bf50a6 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ .idea/ /target/ /download/ -/webroot/ \ No newline at end of file +/webroot/ +.DS_Store \ No newline at end of file diff --git a/plugin-formula-script b/plugin-formula-script new file mode 160000 index 0000000..6788064 --- /dev/null +++ b/plugin-formula-script @@ -0,0 +1 @@ +Subproject commit 6788064856d8fd8af5a91cea5773d601d5b8cb94 diff --git a/plugin-function/build.xml b/plugin-function/build.xml deleted file mode 100644 index 59ae0c1..0000000 --- a/plugin-function/build.xml +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plugin-function/plugin.xml b/plugin-function/plugin.xml deleted file mode 100644 index d7c1db9..0000000 --- a/plugin-function/plugin.xml +++ /dev/null @@ -1,18 +0,0 @@ - - com.fr.plugin.function.test - - yes - 1.0 - 10.0 - 2018-07-31 - author - - - [2018-07-31]初始化插件。
- ]]>
- - - - -
\ No newline at end of file diff --git a/plugin-function/pom.xml b/plugin-function/pom.xml deleted file mode 100644 index e8d28af..0000000 --- a/plugin-function/pom.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - 4.0.0 - - - com.fr.plugin - starter - 10.0 - - - jar - plugin-function - - - com.fr.plugin - gson - 1.0 - system - ${project.basedir}/lib/gson-2.3.1.jar - - - - - ${project.basedir}/../webroot/WEB-INF/plugins/plugin-com.fr.plugin.function.test-1.0/classes - - \ No newline at end of file diff --git a/plugin-function/src/main/java/com/fr/plugin/MyAbs.java b/plugin-function/src/main/java/com/fr/plugin/MyAbs.java deleted file mode 100644 index 78dab4c..0000000 --- a/plugin-function/src/main/java/com/fr/plugin/MyAbs.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.fr.plugin; - -import com.fr.general.FArray; -import com.fr.general.GeneralUtils; -import com.fr.intelli.record.Focus; -import com.fr.intelli.record.Original; -import com.fr.record.analyzer.EnableMetrics; -import com.fr.script.AbstractFunction; -import com.fr.stable.ArrayUtils; -import com.fr.stable.Primitive; - -@EnableMetrics -public class MyAbs extends AbstractFunction { - - @Focus(id = "com.fr.plugin.function.test", text = "Function description", source = Original.PLUGIN) - public Object run(Object[] args) { - int len = ArrayUtils.getLength(args); - if (len == 0) { - return Primitive.ERROR_VALUE; - } else if (len == 1) { - return Math.abs(GeneralUtils.objectToNumber(args[0]).doubleValue()); - } else { - FArray result = new FArray(); - for (Object arg : args) { - result.add(GeneralUtils.objectToNumber(arg).doubleValue()); - } - } - return Primitive.ERROR_VALUE; - } -} diff --git a/plugin-iframe b/plugin-iframe deleted file mode 160000 index f77aab6..0000000 --- a/plugin-iframe +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f77aab6afd9bfbcf73b29100e6934feffc263832 diff --git a/pom.xml b/pom.xml index 4c4df1a..257a177 100644 --- a/pom.xml +++ b/pom.xml @@ -11,8 +11,17 @@ plugin-function + plugin-formula-script + plugin-iframe + + + jdk.tools + tools + 1.8 + ${JAVA_HOME}/lib/tools.jar + com.fr.third From d2b98dc28612f205a29b1cc5926905b452b65b2f Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 19 Oct 2018 16:46:05 +0800 Subject: [PATCH 18/40] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin-formula-script | 1 - pom.xml | 9 --------- 2 files changed, 10 deletions(-) delete mode 160000 plugin-formula-script diff --git a/plugin-formula-script b/plugin-formula-script deleted file mode 160000 index 6788064..0000000 --- a/plugin-formula-script +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6788064856d8fd8af5a91cea5773d601d5b8cb94 diff --git a/pom.xml b/pom.xml index 257a177..4c4df1a 100644 --- a/pom.xml +++ b/pom.xml @@ -11,17 +11,8 @@ plugin-function - plugin-formula-script - plugin-iframe - - - jdk.tools - tools - 1.8 - ${JAVA_HOME}/lib/tools.jar - com.fr.third From 5f9d9e440b969efefc0023f6b990bcdcfebade73 Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 19 Oct 2018 16:48:40 +0800 Subject: [PATCH 19/40] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin-function/build.xml | 126 ++++++++++++++++++ plugin-function/plugin.xml | 17 +++ plugin-function/pom.xml | 14 ++ .../src/main/java/com/fr/plugin/MyAbs.java | 30 +++++ 4 files changed, 187 insertions(+) create mode 100644 plugin-function/build.xml create mode 100644 plugin-function/plugin.xml create mode 100644 plugin-function/pom.xml create mode 100644 plugin-function/src/main/java/com/fr/plugin/MyAbs.java diff --git a/plugin-function/build.xml b/plugin-function/build.xml new file mode 100644 index 0000000..59ae0c1 --- /dev/null +++ b/plugin-function/build.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugin-function/plugin.xml b/plugin-function/plugin.xml new file mode 100644 index 0000000..4816b1a --- /dev/null +++ b/plugin-function/plugin.xml @@ -0,0 +1,17 @@ + + com.fr.plugin.function.test + + yes + 1.0 + 10.0 + 2018-07-31 + author + + + [2018-07-31]初始化插件。
+ ]]>
+ + + +
\ No newline at end of file diff --git a/plugin-function/pom.xml b/plugin-function/pom.xml new file mode 100644 index 0000000..ada9db6 --- /dev/null +++ b/plugin-function/pom.xml @@ -0,0 +1,14 @@ + + + 4.0.0 + + + com.fr.plugin + plugins + 1.0 + + jar + plugin-function + \ No newline at end of file diff --git a/plugin-function/src/main/java/com/fr/plugin/MyAbs.java b/plugin-function/src/main/java/com/fr/plugin/MyAbs.java new file mode 100644 index 0000000..78dab4c --- /dev/null +++ b/plugin-function/src/main/java/com/fr/plugin/MyAbs.java @@ -0,0 +1,30 @@ +package com.fr.plugin; + +import com.fr.general.FArray; +import com.fr.general.GeneralUtils; +import com.fr.intelli.record.Focus; +import com.fr.intelli.record.Original; +import com.fr.record.analyzer.EnableMetrics; +import com.fr.script.AbstractFunction; +import com.fr.stable.ArrayUtils; +import com.fr.stable.Primitive; + +@EnableMetrics +public class MyAbs extends AbstractFunction { + + @Focus(id = "com.fr.plugin.function.test", text = "Function description", source = Original.PLUGIN) + public Object run(Object[] args) { + int len = ArrayUtils.getLength(args); + if (len == 0) { + return Primitive.ERROR_VALUE; + } else if (len == 1) { + return Math.abs(GeneralUtils.objectToNumber(args[0]).doubleValue()); + } else { + FArray result = new FArray(); + for (Object arg : args) { + result.add(GeneralUtils.objectToNumber(arg).doubleValue()); + } + } + return Primitive.ERROR_VALUE; + } +} From 8b53267f50c9b93e6652e1552b5086bb32d22085 Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 19 Oct 2018 16:51:56 +0800 Subject: [PATCH 20/40] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin-function/pom.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/plugin-function/pom.xml b/plugin-function/pom.xml index ada9db6..8ec3cee 100644 --- a/plugin-function/pom.xml +++ b/plugin-function/pom.xml @@ -11,4 +11,17 @@ jar plugin-function + + + com.fr.plugin + gson + 1.0 + system + ${project.basedir}/lib/gson-2.3.1.jar + + + + + ${project.basedir}/../webroot/WEB-INF/plugins/plugin-com.fr.plugin.function.test-1.0/classes + \ No newline at end of file From 65715f0a47823fdaad252a39caab34b35a9f6704 Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 19 Oct 2018 16:56:56 +0800 Subject: [PATCH 21/40] =?UTF-8?q?=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin-function/pom.xml | 4 ++-- pom.xml | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/plugin-function/pom.xml b/plugin-function/pom.xml index 8ec3cee..f45aea2 100644 --- a/plugin-function/pom.xml +++ b/plugin-function/pom.xml @@ -6,8 +6,8 @@ com.fr.plugin - plugins - 1.0 + starter + 10.0 jar plugin-function diff --git a/pom.xml b/pom.xml index 4c4df1a..3507a9d 100644 --- a/pom.xml +++ b/pom.xml @@ -145,6 +145,16 @@ ${web-inf-path}/classes + + maven-compiler-plugin + 3.1 + + 1.6 + 1.6 + + none + + org.apache.maven.plugins maven-dependency-plugin From 1f11299d047e8668147e19203d94f9ee3b70be4a Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 19 Oct 2018 17:20:46 +0800 Subject: [PATCH 22/40] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E7=9A=84=E5=AD=98=E6=94=BE=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin-function/plugin.xml | 1 + plugin-function/src/main/java/com/fr/plugin/MyAbs.java | 2 +- .../src/main/java/com/fr/plugin/MyLocaleFinder.java | 10 ++++++++++ .../src/main/resources/com/fr/plugin/demo.properties | 1 + .../main/resources/com/fr/plugin/demo_zh_CN.properties | 1 + 5 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 plugin-function/src/main/java/com/fr/plugin/MyLocaleFinder.java create mode 100644 plugin-function/src/main/resources/com/fr/plugin/demo.properties create mode 100644 plugin-function/src/main/resources/com/fr/plugin/demo_zh_CN.properties diff --git a/plugin-function/plugin.xml b/plugin-function/plugin.xml index 4816b1a..9c96a7f 100644 --- a/plugin-function/plugin.xml +++ b/plugin-function/plugin.xml @@ -13,5 +13,6 @@ ]]> + \ No newline at end of file diff --git a/plugin-function/src/main/java/com/fr/plugin/MyAbs.java b/plugin-function/src/main/java/com/fr/plugin/MyAbs.java index 78dab4c..0e09770 100644 --- a/plugin-function/src/main/java/com/fr/plugin/MyAbs.java +++ b/plugin-function/src/main/java/com/fr/plugin/MyAbs.java @@ -12,7 +12,7 @@ import com.fr.stable.Primitive; @EnableMetrics public class MyAbs extends AbstractFunction { - @Focus(id = "com.fr.plugin.function.test", text = "Function description", source = Original.PLUGIN) + @Focus(id = "com.fr.plugin.function.test", text = "Plugin-Test_Function_Abs", source = Original.PLUGIN) public Object run(Object[] args) { int len = ArrayUtils.getLength(args); if (len == 0) { diff --git a/plugin-function/src/main/java/com/fr/plugin/MyLocaleFinder.java b/plugin-function/src/main/java/com/fr/plugin/MyLocaleFinder.java new file mode 100644 index 0000000..a062cd1 --- /dev/null +++ b/plugin-function/src/main/java/com/fr/plugin/MyLocaleFinder.java @@ -0,0 +1,10 @@ +package com.fr.plugin; + +import com.fr.stable.fun.impl.AbstractLocaleFinder; + +public class MyLocaleFinder extends AbstractLocaleFinder { + @Override + public String find() { + return "com/fr/plugin/demo"; + } +} diff --git a/plugin-function/src/main/resources/com/fr/plugin/demo.properties b/plugin-function/src/main/resources/com/fr/plugin/demo.properties new file mode 100644 index 0000000..9bc5f29 --- /dev/null +++ b/plugin-function/src/main/resources/com/fr/plugin/demo.properties @@ -0,0 +1 @@ +Plugin-Test_Function_Abs=Test ABS \ No newline at end of file diff --git a/plugin-function/src/main/resources/com/fr/plugin/demo_zh_CN.properties b/plugin-function/src/main/resources/com/fr/plugin/demo_zh_CN.properties new file mode 100644 index 0000000..aa910e8 --- /dev/null +++ b/plugin-function/src/main/resources/com/fr/plugin/demo_zh_CN.properties @@ -0,0 +1 @@ +Plugin-Test_Function_Abs=测试ABS函数 \ No newline at end of file From d373cde1d2cf3459f24a8cfa9bb9e186566965e7 Mon Sep 17 00:00:00 2001 From: richie Date: Mon, 22 Oct 2018 14:13:19 +0800 Subject: [PATCH 23/40] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8E=88=E6=9D=83?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E7=9A=84=E7=BC=96=E5=86=99=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin-function/build.xml | 6 +++++- plugin-function/src/main/java/com/fr/plugin/MyAbs.java | 6 ++++++ .../src/main/java/com/fr/plugin/MyFunctionConstants.java | 6 ++++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 plugin-function/src/main/java/com/fr/plugin/MyFunctionConstants.java diff --git a/plugin-function/build.xml b/plugin-function/build.xml index 59ae0c1..e807443 100644 --- a/plugin-function/build.xml +++ b/plugin-function/build.xml @@ -5,7 +5,7 @@ - + @@ -68,6 +68,10 @@ + + + + diff --git a/plugin-function/src/main/java/com/fr/plugin/MyAbs.java b/plugin-function/src/main/java/com/fr/plugin/MyAbs.java index 0e09770..c5ed012 100644 --- a/plugin-function/src/main/java/com/fr/plugin/MyAbs.java +++ b/plugin-function/src/main/java/com/fr/plugin/MyAbs.java @@ -4,16 +4,22 @@ import com.fr.general.FArray; import com.fr.general.GeneralUtils; import com.fr.intelli.record.Focus; import com.fr.intelli.record.Original; +import com.fr.plugin.context.PluginContexts; import com.fr.record.analyzer.EnableMetrics; import com.fr.script.AbstractFunction; import com.fr.stable.ArrayUtils; import com.fr.stable.Primitive; +import com.fr.stable.fun.Authorize; @EnableMetrics +@Authorize(callSignKey = MyFunctionConstants.PLUGIN_ID) public class MyAbs extends AbstractFunction { @Focus(id = "com.fr.plugin.function.test", text = "Plugin-Test_Function_Abs", source = Original.PLUGIN) public Object run(Object[] args) { + if (!PluginContexts.currentContext().isAvailable()) { + return "Error:authorization is expired."; + } int len = ArrayUtils.getLength(args); if (len == 0) { return Primitive.ERROR_VALUE; diff --git a/plugin-function/src/main/java/com/fr/plugin/MyFunctionConstants.java b/plugin-function/src/main/java/com/fr/plugin/MyFunctionConstants.java new file mode 100644 index 0000000..2d7d4a6 --- /dev/null +++ b/plugin-function/src/main/java/com/fr/plugin/MyFunctionConstants.java @@ -0,0 +1,6 @@ +package com.fr.plugin; + +public class MyFunctionConstants { + + public static final String PLUGIN_ID = "com.fr.plugin.function.test"; +} From 55ce7b22afea6a58fbd7cd7fd45791f4edf8c771 Mon Sep 17 00:00:00 2001 From: richie Date: Mon, 22 Oct 2018 14:57:56 +0800 Subject: [PATCH 24/40] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8E=88=E6=9D=83?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E7=9A=84=E7=BC=96=E5=86=99=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin-function/build.xml | 2 +- plugin-function/lib/report/.gitkeep | 0 plugin-function/plugin.xml | 1 + .../src/main/java/com/fr/plugin/MyAbs.java | 17 ++++++++++++++--- 4 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 plugin-function/lib/report/.gitkeep diff --git a/plugin-function/build.xml b/plugin-function/build.xml index e807443..7fe1db7 100644 --- a/plugin-function/build.xml +++ b/plugin-function/build.xml @@ -5,7 +5,7 @@ - + diff --git a/plugin-function/lib/report/.gitkeep b/plugin-function/lib/report/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/plugin-function/plugin.xml b/plugin-function/plugin.xml index 9c96a7f..a45d02f 100644 --- a/plugin-function/plugin.xml +++ b/plugin-function/plugin.xml @@ -15,4 +15,5 @@ + \ No newline at end of file diff --git a/plugin-function/src/main/java/com/fr/plugin/MyAbs.java b/plugin-function/src/main/java/com/fr/plugin/MyAbs.java index c5ed012..ffddecc 100644 --- a/plugin-function/src/main/java/com/fr/plugin/MyAbs.java +++ b/plugin-function/src/main/java/com/fr/plugin/MyAbs.java @@ -24,13 +24,24 @@ public class MyAbs extends AbstractFunction { if (len == 0) { return Primitive.ERROR_VALUE; } else if (len == 1) { - return Math.abs(GeneralUtils.objectToNumber(args[0]).doubleValue()); + Object one = args[0]; + if (one instanceof FArray) { + FArray data = (FArray)one; + FArray result = new FArray(); + for (Object el : data) { + result.add(Math.abs(GeneralUtils.objectToNumber(el).doubleValue())); + } + return result; + } else { + return Math.abs(GeneralUtils.objectToNumber(one).doubleValue()); + } } else { FArray result = new FArray(); for (Object arg : args) { - result.add(GeneralUtils.objectToNumber(arg).doubleValue()); + result.add(Math.abs(GeneralUtils.objectToNumber(arg).doubleValue())); } + return result; } - return Primitive.ERROR_VALUE; + } } From a08f37a35d8e0944a84864c77883db5e096767e6 Mon Sep 17 00:00:00 2001 From: richie Date: Mon, 26 Nov 2018 17:43:24 +0800 Subject: [PATCH 25/40] =?UTF-8?q?=E5=8D=95=E5=85=83=E6=A0=BC=E5=85=AC?= =?UTF-8?q?=E5=BC=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo-file-submit-oss | 1 + 1 file changed, 1 insertion(+) create mode 160000 demo-file-submit-oss diff --git a/demo-file-submit-oss b/demo-file-submit-oss new file mode 160000 index 0000000..ea10edf --- /dev/null +++ b/demo-file-submit-oss @@ -0,0 +1 @@ +Subproject commit ea10edf781249f3161a161483f2acac1d5b551e1 From 08b86af99332e0c1d4c511a98a0abc7138c2111e Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 27 Nov 2018 11:52:26 +0800 Subject: [PATCH 26/40] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E8=A6=81=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo-web-request | 1 + 1 file changed, 1 insertion(+) create mode 160000 demo-web-request diff --git a/demo-web-request b/demo-web-request new file mode 160000 index 0000000..9a47f32 --- /dev/null +++ b/demo-web-request @@ -0,0 +1 @@ +Subproject commit 9a47f327fc09cf396bc56abc9885be87932f29bd From 5a01f0c5c2e79e4b00b9f24d2031747517b0a36f Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 27 Nov 2018 11:53:40 +0800 Subject: [PATCH 27/40] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin-function/build.xml | 4 ++-- pom.xml | 17 +++++++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/plugin-function/build.xml b/plugin-function/build.xml index 7fe1db7..7a6dc84 100644 --- a/plugin-function/build.xml +++ b/plugin-function/build.xml @@ -1,7 +1,7 @@ - + @@ -127,4 +127,4 @@ - + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 3507a9d..8773250 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ pom 10.0-RELEASE-SNAPSHOT - ${project.basedir}/webroot/WEB-INF + ${project.basedir}/webroot/WEB-INF plugin-function @@ -141,9 +141,22 @@ 5.1.44
+ + junit + junit + 4.12 + test + + + org.easymock + easymock + 3.5.1 + test + +
- ${web-inf-path}/classes + ${web-inf-bucket}/classes maven-compiler-plugin From ecafaacb3d21c4c4f17d0a06a33b57a0d4c86595 Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 27 Nov 2018 16:00:38 +0800 Subject: [PATCH 28/40] =?UTF-8?q?plugin.xml=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo-theme-original | 1 + 1 file changed, 1 insertion(+) create mode 160000 demo-theme-original diff --git a/demo-theme-original b/demo-theme-original new file mode 160000 index 0000000..b656530 --- /dev/null +++ b/demo-theme-original @@ -0,0 +1 @@ +Subproject commit b6565303b3cb43d363058f5e543a0b4bdf78bf19 From 583434ab017f04dcafdc5d121e14aad35d96fce3 Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 30 Nov 2018 14:06:42 +0800 Subject: [PATCH 29/40] =?UTF-8?q?redis=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo-tabledata-redis | 1 + 1 file changed, 1 insertion(+) create mode 160000 demo-tabledata-redis diff --git a/demo-tabledata-redis b/demo-tabledata-redis new file mode 160000 index 0000000..922b467 --- /dev/null +++ b/demo-tabledata-redis @@ -0,0 +1 @@ +Subproject commit 922b467cd367ee9ae920dce5795b7e9428cc41a7 From b18c413633329899c49f5a005e0d483a1f180c02 Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 30 Nov 2018 17:27:56 +0800 Subject: [PATCH 30/40] =?UTF-8?q?10.0=E5=BC=80=E5=8F=91=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo-simple-config | 1 + demo-system-management | 1 + src/main/java/com/fr/learn/Leaner.java | 6 ++++++ 3 files changed, 8 insertions(+) create mode 160000 demo-simple-config create mode 160000 demo-system-management diff --git a/demo-simple-config b/demo-simple-config new file mode 160000 index 0000000..df5524b --- /dev/null +++ b/demo-simple-config @@ -0,0 +1 @@ +Subproject commit df5524b5dba1caf65b0fba5c50c48fd10a162194 diff --git a/demo-system-management b/demo-system-management new file mode 160000 index 0000000..29a6ca2 --- /dev/null +++ b/demo-system-management @@ -0,0 +1 @@ +Subproject commit 29a6ca235dba058058f8a2780ee145601d6edb90 diff --git a/src/main/java/com/fr/learn/Leaner.java b/src/main/java/com/fr/learn/Leaner.java index 2f81552..c35f2ab 100644 --- a/src/main/java/com/fr/learn/Leaner.java +++ b/src/main/java/com/fr/learn/Leaner.java @@ -4,6 +4,12 @@ import com.fr.start.Designer; public class Leaner extends Designer { + static { + // 这段代码让插件能支持远程设计的时候的调试 + String workDir = System.getProperty("user.dir"); + System.setProperty("fine.plugin.home", workDir + "/webroot/WEB-INF/plugins"); + } + public Leaner(String[] strings) { super(strings); } From 0db341546966fbdeff8ddf800b71c7db7cfb1883 Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 4 Dec 2018 15:27:38 +0800 Subject: [PATCH 31/40] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo-file-submit-oss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo-file-submit-oss b/demo-file-submit-oss index ea10edf..0decc13 160000 --- a/demo-file-submit-oss +++ b/demo-file-submit-oss @@ -1 +1 @@ -Subproject commit ea10edf781249f3161a161483f2acac1d5b551e1 +Subproject commit 0decc137e1cb47b7001506eda25ff2a00c755a6a From 1fd1ece237727e2d84500d2ef3643baf36cfd278 Mon Sep 17 00:00:00 2001 From: richie Date: Wed, 19 Dec 2018 09:17:02 +0800 Subject: [PATCH 32/40] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=B9=81=E4=BD=93?= =?UTF-8?q?=E4=B8=AD=E6=96=87=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo-formula-script | 1 + 1 file changed, 1 insertion(+) create mode 160000 demo-formula-script diff --git a/demo-formula-script b/demo-formula-script new file mode 160000 index 0000000..3dc8078 --- /dev/null +++ b/demo-formula-script @@ -0,0 +1 @@ +Subproject commit 3dc8078a598ba328b049f93ba52b54daa26367b3 From 7ea154f0f7e6674c5f20eedda207bc225ceda8f7 Mon Sep 17 00:00:00 2001 From: richie Date: Thu, 20 Dec 2018 16:07:32 +0800 Subject: [PATCH 33/40] =?UTF-8?q?filter=E6=8E=A5=E5=8F=A3=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo-request-filter | 1 + 1 file changed, 1 insertion(+) create mode 160000 demo-request-filter diff --git a/demo-request-filter b/demo-request-filter new file mode 160000 index 0000000..52a4304 --- /dev/null +++ b/demo-request-filter @@ -0,0 +1 @@ +Subproject commit 52a4304c7d2e5187c21ddaa5416b2495470a242b From 69edb7daf5b2292be294f14b69342c9df4f68400 Mon Sep 17 00:00:00 2001 From: richie Date: Mon, 11 Feb 2019 16:29:13 +0800 Subject: [PATCH 34/40] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E7=82=B9=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crm-file-manager | 1 + 1 file changed, 1 insertion(+) create mode 160000 crm-file-manager diff --git a/crm-file-manager b/crm-file-manager new file mode 160000 index 0000000..064f0ec --- /dev/null +++ b/crm-file-manager @@ -0,0 +1 @@ +Subproject commit 064f0ec82a03bd74bae80b0f993ea83af4e4268b From 5c8494b98fb03ff161ac89da051b2e32f330c76c Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 15 Feb 2019 10:37:48 +0800 Subject: [PATCH 35/40] =?UTF-8?q?=E6=8F=90=E4=BE=9B=E4=B8=A4=E4=B8=AA?= =?UTF-8?q?=E6=96=B0=E7=9A=84=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crm-file-manager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crm-file-manager b/crm-file-manager index 064f0ec..fb52c95 160000 --- a/crm-file-manager +++ b/crm-file-manager @@ -1 +1 @@ -Subproject commit 064f0ec82a03bd74bae80b0f993ea83af4e4268b +Subproject commit fb52c956ecd022e94db585b03dda3eaf86147bed From 824336db276dcec90ecedca1f11eed89c0b3b59f Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 15 Feb 2019 11:20:07 +0800 Subject: [PATCH 36/40] =?UTF-8?q?=E5=85=88=E5=88=A4=E6=96=AD=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=98=AF=E5=90=A6=E5=AD=98=E5=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crm-file-manager | 2 +- demo-formula-script | 2 +- demo-simple-config | 2 +- demo-tabledata-redis | 2 +- pom.xml | 3 ++- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/crm-file-manager b/crm-file-manager index fb52c95..f2a0bf3 160000 --- a/crm-file-manager +++ b/crm-file-manager @@ -1 +1 @@ -Subproject commit fb52c956ecd022e94db585b03dda3eaf86147bed +Subproject commit f2a0bf3af638af8a95ea50f29508ed245e59afea diff --git a/demo-formula-script b/demo-formula-script index 3dc8078..da69206 160000 --- a/demo-formula-script +++ b/demo-formula-script @@ -1 +1 @@ -Subproject commit 3dc8078a598ba328b049f93ba52b54daa26367b3 +Subproject commit da6920613bcfa69aabd43e45307378989a2da951 diff --git a/demo-simple-config b/demo-simple-config index df5524b..4e1fe13 160000 --- a/demo-simple-config +++ b/demo-simple-config @@ -1 +1 @@ -Subproject commit df5524b5dba1caf65b0fba5c50c48fd10a162194 +Subproject commit 4e1fe1302726dd0192660fd10b2ae8bf24a4773c diff --git a/demo-tabledata-redis b/demo-tabledata-redis index 922b467..481ed75 160000 --- a/demo-tabledata-redis +++ b/demo-tabledata-redis @@ -1 +1 @@ -Subproject commit 922b467cd367ee9ae920dce5795b7e9428cc41a7 +Subproject commit 481ed75827e5d15f21226022ff95679900e03938 diff --git a/pom.xml b/pom.xml index 8773250..7f069cd 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,8 @@ ${project.basedir}/webroot/WEB-INF - plugin-function + demo-file-submit-oss + crm-file-manager From b1e79777c9e086c706739f8a5ed006df4884ac95 Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 15 Feb 2019 16:34:36 +0800 Subject: [PATCH 37/40] =?UTF-8?q?redis=E6=94=AF=E6=8C=81=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo-tabledata-redis | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo-tabledata-redis b/demo-tabledata-redis index 481ed75..412a475 160000 --- a/demo-tabledata-redis +++ b/demo-tabledata-redis @@ -1 +1 @@ -Subproject commit 481ed75827e5d15f21226022ff95679900e03938 +Subproject commit 412a4756db93fd787c47afb244c9adff0b77ec2a From 83494a8876ac272afa0aeb1708bab2e4d26a1b73 Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 15 Feb 2019 17:22:31 +0800 Subject: [PATCH 38/40] =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crm-file-manager | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crm-file-manager b/crm-file-manager index f2a0bf3..75a10bc 160000 --- a/crm-file-manager +++ b/crm-file-manager @@ -1 +1 @@ -Subproject commit f2a0bf3af638af8a95ea50f29508ed245e59afea +Subproject commit 75a10bc87a91d199eb7d47776e332f957cf2776f From ebabb7f7833e00537c0558e72a6457c99b4099ce Mon Sep 17 00:00:00 2001 From: zack Date: Mon, 4 Mar 2019 15:54:41 +0800 Subject: [PATCH 39/40] =?UTF-8?q?REPORT-15174=20=E4=B8=BA=E4=BA=86?= =?UTF-8?q?=E8=A7=A3=E5=86=B3UNDEF-1709=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=8C=E9=9C=80=E8=A6=81=E5=B8=AE=E5=8A=A9=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E6=89=80=E4=BD=BF=E7=94=A8=E7=9A=84=E4=BB=A3=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E6=AF=8F=E5=A4=A9=E9=83=BD=E8=A6=81=E8=83=BD=E4=BF=9D=E8=AF=81?= =?UTF-8?q?=E7=BC=96=E8=AF=91=E9=80=9A=E8=BF=87,=20=E5=85=AC=E5=BC=80api?= =?UTF-8?q?=E5=92=8C=E6=8F=92=E4=BB=B6=E6=8E=A5=E5=8F=A3=E6=8C=AA=E5=88=B0?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin-report-doc-demo/lib/report/.gitkeep | 0 plugin-report-doc-demo/plugin.xml | 23 + plugin-report-doc-demo/readme.md | 26 + .../src/com/fr/StartFRDesigner.java | 12 + .../src/com/fr/data/ArrayTableDataDemo.java | 45 + .../src/com/fr/data/Commit3.java | 133 + .../src/com/fr/data/CustomTableData.java | 51 + .../src/com/fr/data/DataModelDemo.java | 84 + .../src/com/fr/data/DemoSubmitJob1.java | 51 + .../src/com/fr/data/DemoSubmitJob2.java | 64 + .../src/com/fr/data/DemoTotalSubmitJob.java | 59 + .../src/com/fr/data/GetXmlData.java | 81 + .../src/com/fr/data/GetXmlDate.java | 70 + .../com/fr/data/MobileTableWsdlDataDemo.java | 114 + .../com/fr/data/MobileWsdlTableDataDemo.java | 147 + .../com/fr/data/MobileWsdlTableDataDemo1.java | 105 + .../com/fr/data/MobileWsdlTableDataDemo2.java | 65 + .../fr/data/MobileWsdlTableDataDemoPara.java | 114 + .../src/com/fr/data/ParamSAPDataTest.java | 112 + .../src/com/fr/data/ParamTableDataDemo.java | 158 + .../src/com/fr/data/WebServiceTableData.java | 58 + .../fr/data/WebServiceWsdlTableDataDemo2.java | 69 + .../com/fr/data/XMLColumnNameType4Demo.java | 27 + .../src/com/fr/data/XMLDemoTableData.java | 202 + .../com/fr/data/XMLParseDemoDataModel.java | 226 + .../src/com/fr/data/XMLRead.java | 115 + .../src/com/fr/data/impl/Commit1.java | 126 + .../src/com/fr/data/impl/Commit3.java | 131 + .../src/com/fr/demo/ChangeRowAndCol.java | 79 + .../src/com/fr/demo/CreateReportletDemo.java | 50 + .../src/com/fr/demo/NewDateDemo.java | 40 + .../src/com/fr/demo/ReadFromDatabase.java | 65 + .../src/com/fr/demo/SaveReportToDatabase.java | 50 + .../src/com/fr/demo/SetCellElementStyle.java | 71 + .../src/com/fr/demo/SimpleReportletDemo.java | 42 + .../src/com/fr/demo/TotalVerifyJobDemo.java | 55 + .../src/com/fr/demo/URLParameterDemo.java | 53 + .../src/com/fr/demo/VerifyJobDemo.java | 68 + .../src/com/fr/function/BinaryImage.java | 91 + .../src/com/fr/function/CellSum.java | 15 + .../src/com/fr/function/ConnectSAPServer.java | 58 + .../src/com/fr/function/FlagHtmlColor.java | 67 + .../src/com/fr/function/GETIP.java | 23 + .../src/com/fr/function/JFreeToChart.java | 86 + .../src/com/fr/function/Lunar.java | 15 + .../src/com/fr/function/ParamSAPDataTest.java | 40 + .../src/com/fr/function/ReportCheck.java | 105 + .../src/com/fr/function/SolarToLunar.java | 381 ++ .../src/com/fr/function/StringCat.java | 19 + .../src/com/fr/function/StringImage.java | 73 + .../src/com/fr/function/SubSection.java | 45 + .../src/com/fr/function/Ubm.java | 25 + .../src/com/fr/function/Upc.java | 35 + .../src/com/fr/function/Widget2Image.java | 105 + .../src/com/fr/io/ExcelToCpt.java | 25 + .../src/com/fr/io/ExcelToCptpage.java | 46 + .../src/com/fr/io/ExcuteDemo.java | 66 + .../src/com/fr/io/ExportApi.java | 116 + .../src/com/fr/io/ExportBatch.java | 91 + .../src/com/fr/io/ExportExcel.java | 88 + .../src/com/fr/io/ExportReports.java | 58 + .../src/com/fr/io/JavaPrint.java | 36 + .../src/com/fr/io/SetParameterWindow.java | 78 + .../src/com/fr/io/SimpleDemo.java | 71 + .../src/com/fr/log/LogApi.java | 12 + .../src/com/fr/output/FTPUpload.java | 76 + .../src/com/fr/output/OutputExcel.java | 100 + .../src/com/fr/output/session.java | 48 + .../chart/IndependentChartProviderImpl.java | 26 + .../chart/IndependentChartUIProviderImpl.java | 22 + .../src/com/fr/plugin/core/ActionCMDImpl.java | 23 + .../plugin/core/AttachmentDownloaderImpl.java | 18 + .../plugin/core/CellValueProcessorImpl.java | 18 + .../fr/plugin/core/CssFileHandlerImpl.java | 10 + .../fr/plugin/core/DebugLogProviderImpl.java | 7 + .../fr/plugin/core/DialectCreatorImpl.java | 18 + .../fr/plugin/core/EmailProcessorImpl.java | 13 + .../ExcelExportCellValueProviderImpl.java | 11 + .../plugin/core/ExcelExportProcessorImpl.java | 6 + .../core/FunctionDefineProviderImpl.java | 10 + .../plugin/core/GraphDrawProcessorImpl.java | 13 + .../fr/plugin/core/HttpAuthProcessorImpl.java | 10 + .../core/JavaScriptFileHandlerImpl.java | 10 + .../plugin/core/LogDBRecordProcessorImpl.java | 25 + .../com/fr/plugin/core/LogProviderImpl.java | 6 + .../core/PrintCellValueProviderImpl.java | 12 + .../core/RequestParameterCollectorImpl.java | 33 + .../core/RequestParameterHandlerImpl.java | 32 + .../src/com/fr/plugin/core/ServiceImpl.java | 18 + .../plugin/core/SpecialCharProcessorImpl.java | 10 + .../fr/plugin/core/TableDataProviderImpl.java | 6 + .../fr/plugin/core/WidgetSwitcherImpl.java | 10 + .../core/XMLFileManagerProviderImpl.java | 7 + .../design/CellAttributeProviderImpl.java | 11 + .../design/CellWidgetOptionProviderImpl.java | 27 + .../plugin/design/ConnectionProviderImpl.java | 28 + .../design/FormWidgetOptionProviderImpl.java | 26 + .../design/GlobalListenerProviderImpl.java | 12 + .../plugin/design/HighlightProviderImpl.java | 17 + .../design/IndentationUnitProcessorImpl.java | 6 + .../design/JavaScriptActionProviderImpl.java | 12 + .../ParameterWidgetOptionProviderImpl.java | 27 + .../fr/plugin/design/PreviewProviderImpl.java | 25 + .../com/fr/plugin/design/ShortCutImpl.java | 28 + .../fr/plugin/design/SubmitProviderImpl.java | 21 + .../design/TableDataDefineProviderImpl.java | 37 + .../design/TitlePlaceProcessorImpl.java | 13 + .../plugin/design/UIFormulaProcessorImpl.java | 16 + .../design/WidgetDesignHandlerImpl.java | 11 + .../fr/plugin/report/ActorProviderImpl.java | 11 + .../report/CellTooltipProcessorImpl.java | 12 + .../report/ExcelExportAppProviderImpl.java | 10 + .../plugin/report/ExcelImportProcessor.java | 14 + .../report/ExportEncodeProviderImpl.java | 6 + .../report/ExportExtensionProcessorImpl.java | 21 + .../report/ExportOperateProviderImpl.java | 16 + .../report/FromExportProcessorImpl.java | 13 + .../report/PageCalObjectProcessorImpl.java | 18 + .../ReportPretreatmentProcessorImpl.java | 13 + .../src/com/fr/privilege/RSAUtil.java | 205 + .../fr/privilege/TestPasswordValidator.java | 21 + .../privilege/TestPasswordValidatorRSA.java | 33 + .../privilege/TestPasswordValidatorUser.java | 46 + .../src/com/fr/test/gauthority.java | 77 + .../src/main/java/com/fr/learn/Leaner.java | 16 + .../main/java/com/fr/learn/Learner4Debug.java | 8 + .../mobile/MobileCodeWSCallbackHandler.java | 71 + .../src/mobile/MobileCodeWSStub.java | 3780 +++++++++++++++++ 128 files changed, 10217 insertions(+) create mode 100644 plugin-report-doc-demo/lib/report/.gitkeep create mode 100644 plugin-report-doc-demo/plugin.xml create mode 100644 plugin-report-doc-demo/readme.md create mode 100644 plugin-report-doc-demo/src/com/fr/StartFRDesigner.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/ArrayTableDataDemo.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/Commit3.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/CustomTableData.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/DataModelDemo.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/DemoSubmitJob1.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/DemoSubmitJob2.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/DemoTotalSubmitJob.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/GetXmlData.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/GetXmlDate.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/MobileTableWsdlDataDemo.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/MobileWsdlTableDataDemo.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/MobileWsdlTableDataDemo1.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/MobileWsdlTableDataDemo2.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/MobileWsdlTableDataDemoPara.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/ParamSAPDataTest.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/ParamTableDataDemo.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/WebServiceTableData.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/WebServiceWsdlTableDataDemo2.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/XMLColumnNameType4Demo.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/XMLDemoTableData.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/XMLParseDemoDataModel.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/XMLRead.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/impl/Commit1.java create mode 100644 plugin-report-doc-demo/src/com/fr/data/impl/Commit3.java create mode 100644 plugin-report-doc-demo/src/com/fr/demo/ChangeRowAndCol.java create mode 100644 plugin-report-doc-demo/src/com/fr/demo/CreateReportletDemo.java create mode 100644 plugin-report-doc-demo/src/com/fr/demo/NewDateDemo.java create mode 100644 plugin-report-doc-demo/src/com/fr/demo/ReadFromDatabase.java create mode 100644 plugin-report-doc-demo/src/com/fr/demo/SaveReportToDatabase.java create mode 100644 plugin-report-doc-demo/src/com/fr/demo/SetCellElementStyle.java create mode 100644 plugin-report-doc-demo/src/com/fr/demo/SimpleReportletDemo.java create mode 100644 plugin-report-doc-demo/src/com/fr/demo/TotalVerifyJobDemo.java create mode 100644 plugin-report-doc-demo/src/com/fr/demo/URLParameterDemo.java create mode 100644 plugin-report-doc-demo/src/com/fr/demo/VerifyJobDemo.java create mode 100644 plugin-report-doc-demo/src/com/fr/function/BinaryImage.java create mode 100644 plugin-report-doc-demo/src/com/fr/function/CellSum.java create mode 100644 plugin-report-doc-demo/src/com/fr/function/ConnectSAPServer.java create mode 100644 plugin-report-doc-demo/src/com/fr/function/FlagHtmlColor.java create mode 100644 plugin-report-doc-demo/src/com/fr/function/GETIP.java create mode 100644 plugin-report-doc-demo/src/com/fr/function/JFreeToChart.java create mode 100644 plugin-report-doc-demo/src/com/fr/function/Lunar.java create mode 100644 plugin-report-doc-demo/src/com/fr/function/ParamSAPDataTest.java create mode 100644 plugin-report-doc-demo/src/com/fr/function/ReportCheck.java create mode 100644 plugin-report-doc-demo/src/com/fr/function/SolarToLunar.java create mode 100644 plugin-report-doc-demo/src/com/fr/function/StringCat.java create mode 100644 plugin-report-doc-demo/src/com/fr/function/StringImage.java create mode 100644 plugin-report-doc-demo/src/com/fr/function/SubSection.java create mode 100644 plugin-report-doc-demo/src/com/fr/function/Ubm.java create mode 100644 plugin-report-doc-demo/src/com/fr/function/Upc.java create mode 100644 plugin-report-doc-demo/src/com/fr/function/Widget2Image.java create mode 100644 plugin-report-doc-demo/src/com/fr/io/ExcelToCpt.java create mode 100644 plugin-report-doc-demo/src/com/fr/io/ExcelToCptpage.java create mode 100644 plugin-report-doc-demo/src/com/fr/io/ExcuteDemo.java create mode 100644 plugin-report-doc-demo/src/com/fr/io/ExportApi.java create mode 100644 plugin-report-doc-demo/src/com/fr/io/ExportBatch.java create mode 100644 plugin-report-doc-demo/src/com/fr/io/ExportExcel.java create mode 100644 plugin-report-doc-demo/src/com/fr/io/ExportReports.java create mode 100644 plugin-report-doc-demo/src/com/fr/io/JavaPrint.java create mode 100644 plugin-report-doc-demo/src/com/fr/io/SetParameterWindow.java create mode 100644 plugin-report-doc-demo/src/com/fr/io/SimpleDemo.java create mode 100644 plugin-report-doc-demo/src/com/fr/log/LogApi.java create mode 100644 plugin-report-doc-demo/src/com/fr/output/FTPUpload.java create mode 100644 plugin-report-doc-demo/src/com/fr/output/OutputExcel.java create mode 100644 plugin-report-doc-demo/src/com/fr/output/session.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/chart/IndependentChartProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/chart/IndependentChartUIProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/ActionCMDImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/AttachmentDownloaderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/CellValueProcessorImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/CssFileHandlerImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/DebugLogProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/DialectCreatorImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/EmailProcessorImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/ExcelExportCellValueProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/ExcelExportProcessorImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/FunctionDefineProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/GraphDrawProcessorImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/HttpAuthProcessorImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/JavaScriptFileHandlerImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/LogDBRecordProcessorImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/LogProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/PrintCellValueProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/RequestParameterCollectorImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/RequestParameterHandlerImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/ServiceImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/SpecialCharProcessorImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/TableDataProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/WidgetSwitcherImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/XMLFileManagerProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/design/CellAttributeProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/design/CellWidgetOptionProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/design/ConnectionProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/design/FormWidgetOptionProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/design/GlobalListenerProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/design/HighlightProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/design/IndentationUnitProcessorImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/design/JavaScriptActionProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/design/ParameterWidgetOptionProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/design/PreviewProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/design/ShortCutImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/design/SubmitProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/design/TableDataDefineProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/design/TitlePlaceProcessorImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/design/UIFormulaProcessorImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/design/WidgetDesignHandlerImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/report/ActorProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/report/CellTooltipProcessorImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/report/ExcelExportAppProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/report/ExcelImportProcessor.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/report/ExportEncodeProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/report/ExportExtensionProcessorImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/report/ExportOperateProviderImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/report/FromExportProcessorImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/report/PageCalObjectProcessorImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/report/ReportPretreatmentProcessorImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/privilege/RSAUtil.java create mode 100644 plugin-report-doc-demo/src/com/fr/privilege/TestPasswordValidator.java create mode 100644 plugin-report-doc-demo/src/com/fr/privilege/TestPasswordValidatorRSA.java create mode 100644 plugin-report-doc-demo/src/com/fr/privilege/TestPasswordValidatorUser.java create mode 100644 plugin-report-doc-demo/src/com/fr/test/gauthority.java create mode 100644 plugin-report-doc-demo/src/main/java/com/fr/learn/Leaner.java create mode 100644 plugin-report-doc-demo/src/main/java/com/fr/learn/Learner4Debug.java create mode 100644 plugin-report-doc-demo/src/mobile/MobileCodeWSCallbackHandler.java create mode 100644 plugin-report-doc-demo/src/mobile/MobileCodeWSStub.java diff --git a/plugin-report-doc-demo/lib/report/.gitkeep b/plugin-report-doc-demo/lib/report/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/plugin-report-doc-demo/plugin.xml b/plugin-report-doc-demo/plugin.xml new file mode 100644 index 0000000..879bd29 --- /dev/null +++ b/plugin-report-doc-demo/plugin.xml @@ -0,0 +1,23 @@ + + + com.fr.plugin.doc.demo.v10 + + yes + no + 1.1.1 + 10.0~ + 2018-08-02 + finereport + + + [2018-08-02] 插件适配10 + ]]> + + + + + + + + \ No newline at end of file diff --git a/plugin-report-doc-demo/readme.md b/plugin-report-doc-demo/readme.md new file mode 100644 index 0000000..fd6605a --- /dev/null +++ b/plugin-report-doc-demo/readme.md @@ -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的正式版本| \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/StartFRDesigner.java b/plugin-report-doc-demo/src/com/fr/StartFRDesigner.java new file mode 100644 index 0000000..e1abc07 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/StartFRDesigner.java @@ -0,0 +1,12 @@ +package com.fr; + +import com.fr.start.Designer; + +public class StartFRDesigner { + public StartFRDesigner() { + } + + public static void main(String[] args) { + Designer.main(args); + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/data/ArrayTableDataDemo.java b/plugin-report-doc-demo/src/com/fr/data/ArrayTableDataDemo.java new file mode 100644 index 0000000..cc6a50e --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/ArrayTableDataDemo.java @@ -0,0 +1,45 @@ +package com.fr.data; + +/** + * @author fanruan + */ +public class ArrayTableDataDemo extends AbstractTableData { + /** + * 定义程序数据集的列名与数据保存位置 + */ + private String[] columnNames; + private Object[][] rowData; + + /** + * 实现构建函数,在构建函数中准备数据 + */ + public ArrayTableDataDemo() { + String[] columnNames = {"Name", "Score"}; + Object[][] datas = {{"Alex", 15}, + {"Helly", 22}, {"Bobby", 99}}; + this.columnNames = columnNames; + this.rowData = datas; + } + + //实现ArrayTableData的其他四个方法,因为AbstractTableData已经实现了hasRow方法 + + @Override + public int getColumnCount() { + return columnNames.length; + } + + @Override + public String getColumnName(int columnIndex) { + return columnNames[columnIndex]; + } + + @Override + public int getRowCount() { + return rowData.length; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + return rowData[rowIndex][columnIndex]; + } +} diff --git a/plugin-report-doc-demo/src/com/fr/data/Commit3.java b/plugin-report-doc-demo/src/com/fr/data/Commit3.java new file mode 100644 index 0000000..551d137 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/Commit3.java @@ -0,0 +1,133 @@ +package com.fr.data; + +import com.fr.cache.Attachment; +import com.fr.data.impl.SubmitJobValue; +import com.fr.general.FArray; +import com.fr.general.FRLogger; +import com.fr.script.Calculator; +import com.fr.stable.xml.FRFile; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLableReader; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.logging.Level; +import java.util.logging.Logger; + + +/** + * @author fanruan + */ +public class Commit3 implements SubmitJob { + private Object attach; + /** + * 定义文件路径 + */ + private SubmitJobValue filePath; + + @Override + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } + + @Override + public void doJob(Calculator ca) { + FRLogger.getLogger().info("begin to upload file..."); + final Object attachO = attach; + if (attachO instanceof FArray && ((FArray) attachO).length() != 0) { + new Thread() { + @Override + public void run() { + int i; + FArray attachmentList = (FArray) attachO; + for (i = 0; i < attachmentList.length(); i++) { + if (!(attachmentList.elementAt(i) instanceof Attachment)) { + continue; + } else { + FRLogger.getLogger().info("filePath.value:" + filePath.getValue().toString()); + FRLogger.getLogger().info("filePath.valueState:" + filePath.getValueState() + + "注:valueState 0,1,2,3 分别表示 默认值,插入行,值改变,删除行"); + + String FilePath = filePath.getValue().toString(); + String FileName = ((Attachment) (attachmentList.elementAt(i))).getFilename(); + String Path = FilePath + "\\" + FileName; + File fileDir = new File(FilePath); + if (!fileDir.exists()) { + fileDir.mkdirs(); + } + try { + //新建文件夹,并且写入内 + mkfile(FilePath, FileName, new ByteArrayInputStream( + ((Attachment) (attachmentList.elementAt(i))).getBytes())); + } catch (Exception e) { + Logger.getLogger("FR").log(Level.WARNING, + e.getMessage() + "/nmkfileerror", e); + } + } + } + } + }.start(); + } else if (attach instanceof FRFile) { + String filepath = filePath.getValue().toString(); + String filename = ((FRFile) attach).getFileName(); + File fileDir = new File(filepath); + if (!fileDir.exists()) { + fileDir.mkdirs(); + } + try { + //新建文件夹,并且写入内 + mkfile(filepath, filename, new ByteArrayInputStream( + ((FRFile) attach).getBytes())); + } catch (Exception e) { + Logger.getLogger("FR").log(Level.WARNING, + e.getMessage() + "/nmkfileerror", e); + } + } + } + + private static void mkfile(String path, String filename, InputStream source) throws IOException { + File fileout = new File(path, filename); + + // 检查是否存在 + if (fileout.exists()) { + // 删除文件 + fileout.delete(); + FRLogger.getLogger().info("old file deleted"); + } + // 在当前目录下建立一个名为FileName的文件 + if (fileout.createNewFile()) { + FRLogger.getLogger().info(path + filename + "created!!"); + } + FileOutputStream outputStream = new FileOutputStream(fileout); + byte[] bytes = new byte[1024]; + int read = source.read(bytes); + //把source写入新建的文件 + while (read != -1) { + outputStream.write(bytes, 0, read); + outputStream.flush(); + read = source.read(bytes); + } + + outputStream.close(); + } + + @Override + public void readXML(XMLableReader reader) { + } + + @Override + public void writeXML(XMLPrintWriter writer) { + } + + @Override + public void doFinish(Calculator arg0) { + } + + @Override + public String getJobType() { + return null; + } +} diff --git a/plugin-report-doc-demo/src/com/fr/data/CustomTableData.java b/plugin-report-doc-demo/src/com/fr/data/CustomTableData.java new file mode 100644 index 0000000..2e65af1 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/CustomTableData.java @@ -0,0 +1,51 @@ +package com.fr.data; + + +/** + * @author fanruan + */ +public class CustomTableData extends AbstractTableData { + + /** + * 获取数据集的列数 + * + * @return 数据集的列 + */ + @Override + public int getColumnCount() { + return 0; + } + + /** + * 获取数据集指定列的列名 + * + * @param columnIndex 指定列的索引 + * @return 指定列的列名 + */ + @Override + public String getColumnName(int columnIndex) { + return null; + } + + /** + * 获取数据集的行数 + * + * @return 数据集数据行数 + */ + @Override + public int getRowCount() { + return 0; + } + + /** + * 获取数据集指定位置上的值 + * + * @param rowIndex 指定的行索引 + * @param columnIndex 指定的列索引 + * @return 指定位置的值 + */ + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + return null; + } +} diff --git a/plugin-report-doc-demo/src/com/fr/data/DataModelDemo.java b/plugin-report-doc-demo/src/com/fr/data/DataModelDemo.java new file mode 100644 index 0000000..2de39d6 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/DataModelDemo.java @@ -0,0 +1,84 @@ +package com.fr.data; + +import examples.ejb.ejb20.basic.beanManaged.Account; +import examples.ejb.ejb20.basic.beanManaged.AccountHome; + +import javax.naming.Context; +import javax.naming.InitialContext; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; + +/** + * @author fanruan + */ +public class DataModelDemo extends AbstractTableData { + private String[] columnNames; + private ArrayList valueList = null; + + public DataModelDemo() { + String[] columnNames = {"Name", "Score"}; + this.columnNames = columnNames; + } + + // 实现其他四个方法 + + @Override + public int getColumnCount() { + return columnNames.length; + } + + @Override + public String getColumnName(int columnIndex) { + return columnNames[columnIndex]; + } + + @Override + public int getRowCount() { + init(); + return valueList.size(); + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + init(); + return ((Object[]) valueList.get(rowIndex))[columnIndex]; + } + + // 准备数据 + public void init() { + // 确保只被执行一次 + if (valueList != null) { + return; + } + // 保存得到的结果集 + valueList = new ArrayList(); + Context ctx = null; + Account ac = null; + AccountHome home = null; + try { + // Contact the AccountBean container (the "AccountHome") through + // JNDI. + ctx = new InitialContext(); + home = (AccountHome) ctx + .lookup("java:/comp/env/BeanManagedAccountEJB"); + double balanceGreaterThan = 100; + Collection col = home.findBigAccounts(balanceGreaterThan); + if (col != null) { + // 用对象保存数据 + Object[] objArray = null; + Iterator iter = col.iterator(); + while (iter.hasNext()) { + Account bigAccount = (Account) iter.next(); + objArray = new Object[2]; + objArray[0] = bigAccount.getPrimaryKey(); + objArray[1] = bigAccount.balance(); + // 在valueList中加入这一行数据 + valueList.add(objArray); + } + } + } catch (Exception ex) { + ex.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/data/DemoSubmitJob1.java b/plugin-report-doc-demo/src/com/fr/data/DemoSubmitJob1.java new file mode 100644 index 0000000..c543350 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/DemoSubmitJob1.java @@ -0,0 +1,51 @@ +package com.fr.data; + +import com.fr.script.Calculator; + +/** + * @author fanruan + */ +public class DemoSubmitJob1 extends DefinedSubmitJob { + /** + * 当模板自定义事件增加的属性 名称与下面变量有对应时,则会自动赋值于此对应变量 + */ + // JobValue对应单元格 + + private JobValue studentNo; + private JobValue name; + private JobValue grade; + + // 非单元格,则对应具体类型值 + + private boolean isPass; + + /** + * 每一条记录执行一次此方法 + * 同一提交事件在一个处理事务内,此对象是唯一的 + */ + @Override + public void doJob(Calculator calculator) { + // JobValue的getValueState()方法获取此对应单元格的状态 + if (studentNo.getValueState() == JobValue.VALUE_STATE_CHANGED) { + // 此单元格的值在报表初始化后被修改过 + } else if (studentNo.getValueState() == JobValue.VALUE_STATE_INSERT) { + // 此单元格是在报表初始化后新增的(例如执行了插入行操作) + } else if (studentNo.getValueState() == JobValue.VALUE_STATE_DELETED) { + // 此单元格所在的记录被执行了删除操作 + } else if (studentNo.getValueState() == JobValue.VALUE_STATE_DEFAULT) { + // 此单元格在报表初始化后没有变化 + } + + // 值获取,通过JobValue的getValue方法获得单元格的值 + System.out.print(" 学号: " + studentNo.getValue()); + System.out.print(" 姓名: " + name.getValue()); + System.out.print(" 总分: " + grade.getValue()); + System.out.print(" 是否达标: " + isPass); + System.out.println(); + } + + @Override + public String getJobType() { + return null; + } +} diff --git a/plugin-report-doc-demo/src/com/fr/data/DemoSubmitJob2.java b/plugin-report-doc-demo/src/com/fr/data/DemoSubmitJob2.java new file mode 100644 index 0000000..64b341f --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/DemoSubmitJob2.java @@ -0,0 +1,64 @@ +package com.fr.data; + +import com.fr.script.Calculator; + +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +/** + * @author fanruan + */ +public class DemoSubmitJob2 extends DefinedSubmitJob { + + /** + * 每一条记录执行一次此方法 + * 同一提交事件在一个处理事务内,此对象是唯一的 + */ + @Override + public void doJob(Calculator calculator) { + // 同样可以直接在传入的calculator中获取定义的属性及其对应的值 + Map map = (Map) calculator.getAttribute(PROPERTY_VALUE); + if (map == null) { + return; + } + Set set = map.entrySet(); + Iterator it = set.iterator(); + Entry entry; + // 遍历Map获取所有属性及其值 + while (it.hasNext()) { + entry = (Entry) it.next(); + System.out.print(" " + entry.getKey() + ": "); + + // JobValue对应单元格 + if (entry.getValue() instanceof JobValue) { + JobValue ce = (JobValue) entry.getValue(); + // JobValue的getValueState()方法获取此对应单元格的状态 + if (ce.getValueState() == JobValue.VALUE_STATE_CHANGED) { + // 此单元格的值在报表初始化后被修改过 + System.out.println(); + } else if (ce.getValueState() == JobValue.VALUE_STATE_INSERT) { + // 此单元格是在报表初始化后新增的(例如执行了插入行操作) + System.out.println(); + } else if (ce.getValueState() == JobValue.VALUE_STATE_DELETED) { + // 此单元格所在的记录被执行了删除操作 + System.out.println(); + } else if (ce.getValueState() == JobValue.VALUE_STATE_DEFAULT) { + // 此单元格在报表初始化后没有变化 + System.out.println(); + } + // 通过JobValue的getValue方法获得单元格的值 + System.out.print(ce.getValue()); + } else { + // 非单元格,则对应具体类型值 + System.out.print(entry.getValue().toString()); + } + } + } + + @Override + public String getJobType() { + return null; + } +} diff --git a/plugin-report-doc-demo/src/com/fr/data/DemoTotalSubmitJob.java b/plugin-report-doc-demo/src/com/fr/data/DemoTotalSubmitJob.java new file mode 100644 index 0000000..aaa9b92 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/DemoTotalSubmitJob.java @@ -0,0 +1,59 @@ +package com.fr.data; + +import com.fr.script.Calculator; + +/** + * @author fanruan + */ +public class DemoTotalSubmitJob extends TotalSubmitJob { + + /** + * 同一提交事件,在一个提交事务内只执行一次 + * + * @param data 以二维表排列的所有提交数据 + */ + @Override + protected void doTotalJob(Data data, Calculator calculator) { + // 获取列的数量,每一列对应一个添加的属性 + data.getColumnCount(); + for (int i = 0; i < data.getColumnCount(); i++) { + // 获取对应的属性名称 + System.out.println(data.getColumnName(i)); + } + + // getRowCount 获取一共多少行数据 + for (int i = 0; i < data.getRowCount(); i++) { + System.out.print("ROW " + i + " {"); + for (int j = 0; j < data.getColumnCount(); j++) { + if (j > 0) { + System.out.print(", "); + } + // 获取对应位置的值 + Object value = data.getValueAt(i, j); + if (value instanceof JobValue) { + JobValue ce = (JobValue) value; + // JobValue的getValueState()方法获取此对应单元格的状态 + if (ce.getValueState() == JobValue.VALUE_STATE_CHANGED) { + // 此单元格的值在报表初始化后被修改过 + System.out.println(); + } else if (ce.getValueState() == JobValue.VALUE_STATE_INSERT) { + // 此单元格是在报表初始化后新增的(例如执行了插入行操作) + System.out.println(); + } else if (ce.getValueState() == JobValue.VALUE_STATE_DELETED) { + // 此单元格所在的记录被执行了删除操作 + System.out.println(); + } else if (ce.getValueState() == JobValue.VALUE_STATE_DEFAULT) { + // 此单元格在报表初始化后没有变化 + System.out.println(); + } + // 通过JobValue的getValue方法获得单元格的值 + value = ce.getValue(); + } + + System.out.print(data.getColumnName(j) + " : " + value); + } + System.out.print("}"); + System.out.println(); + } + } +} diff --git a/plugin-report-doc-demo/src/com/fr/data/GetXmlData.java b/plugin-report-doc-demo/src/com/fr/data/GetXmlData.java new file mode 100644 index 0000000..9a6f887 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/GetXmlData.java @@ -0,0 +1,81 @@ +package com.fr.data; + +import com.fr.stable.xml.XMLReadable; +import com.fr.stable.xml.XMLableReader; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; + +/** + * @author fanruan + */ +public class GetXmlData { + /** + * 定义返回值数组 + */ + private String[] value = new String[3]; + /** + * 定义查询的name值 + */ + private String[] name = null; + + protected String[] readerXMLSource(InputStream in, String[] name) + throws Exception { + this.name = name; + InputStreamReader reader = new InputStreamReader(in, "utf-8"); + readXMLSource(reader); + return value; + } + + protected void readXMLSource(Reader reader) throws Exception { + XMLableReader xmlReader = XMLableReader.createXMLableReader(reader); + if (xmlReader != null) { + xmlReader.readXMLObject(new Content()); + + } + } + + private class Content implements XMLReadable { + @Override + public void readXML(XMLableReader reader) { + if (reader.isChildNode()) { + if ("Field".equals(reader.getTagName())) { + Field field = new Field(); + reader.readXMLObject(field); + // 获得name对应的value值 + if (name[0].equals(field.name)) { + value[0] = field.value; + } else if (name[1].equals(field.name)) { + value[1] = field.value; + } else if (name[2].equals(field.name)) { + value[2] = field.value; + } + } + } + } + } + + /** + * 定义每个field的结构 + */ + private class Field implements XMLReadable { + private String name; + private String type; + private String value; + + @Override + public void readXML(XMLableReader reader) { + if (reader.isChildNode()) { + String tagName = reader.getTagName(); + if ("name".equals(tagName)) { + this.name = reader.getElementValue(); + } else if ("Type".equals(tagName)) { + this.type = reader.getElementValue(); + } else if ("value".equals(tagName)) { + this.value = reader.getElementValue(); + } + } + } + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/data/GetXmlDate.java b/plugin-report-doc-demo/src/com/fr/data/GetXmlDate.java new file mode 100644 index 0000000..ed6b2ff --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/GetXmlDate.java @@ -0,0 +1,70 @@ +package com.fr.data; + +import com.fr.stable.xml.XMLReadable; +import com.fr.stable.xml.XMLableReader; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; + +public class GetXmlDate { + // 定义返回值数组 + private String[] Value = new String[3]; + // 定义查询的name值 + private String[] Name = null; + + protected String[] readerXMLSource(InputStream in, String[] name) + throws Exception { + Name = name; + InputStreamReader reader = new InputStreamReader(in, "utf-8"); + readXMLSource(reader); + return Value; + } + + protected void readXMLSource(Reader reader) throws Exception { + XMLableReader xmlReader = XMLableReader.createXMLableReader(reader); + if (xmlReader != null) { + xmlReader.readXMLObject(new Content()); + + } + } + + private class Content implements XMLReadable { + public void readXML(XMLableReader reader) { + if (reader.isChildNode()) { + if (reader.getTagName().equals("Field")) { + Field field = new Field(); + reader.readXMLObject(field); + // 获得name对应的value值 + if (Name[0].equals(field.name)) { + Value[0] = field.value; + } else if (Name[1].equals(field.name)) { + Value[1] = field.value; + } else if (Name[2].equals(field.name)) { + Value[2] = field.value; + } + } + } + } + } + + // 定义每个field的结构 + private class Field implements XMLReadable { + private String name; + private String type; + private String value; + + public void readXML(XMLableReader reader) { + if (reader.isChildNode()) { + String tagName = reader.getTagName(); + if (tagName.equals("Name")) { + this.name = reader.getElementValue(); + } else if (tagName.equals("Type")) { + this.type = reader.getElementValue(); + } else if (tagName.equals("Value")) { + this.value = reader.getElementValue(); + } + } + } + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/data/MobileTableWsdlDataDemo.java b/plugin-report-doc-demo/src/com/fr/data/MobileTableWsdlDataDemo.java new file mode 100644 index 0000000..bd0535a --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/MobileTableWsdlDataDemo.java @@ -0,0 +1,114 @@ +package com.fr.data; + +import com.fr.general.data.TableDataException; +import org.apache.axiom.om.OMAbstractFactory; +import org.apache.axiom.om.OMElement; +import org.apache.axiom.om.OMFactory; +import org.apache.axiom.om.OMNamespace; +import org.apache.axis2.addressing.EndpointReference; +import org.apache.axis2.client.Options; +import org.apache.axis2.client.ServiceClient; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * @author fanruan + */ +public class MobileTableWsdlDataDemo extends AbstractTableData { + private String[][] data; + + public MobileTableWsdlDataDemo() { + this.data = this.getMobileTableWsdlData(); + } + + @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 static String[][] getResults(OMElement element) { + if (element == null) { + return null; + } + Iterator iterator = element.getChildElements(); + Iterator innerItr; + List list = new ArrayList(); + OMElement result; + while (iterator.hasNext()) { + result = (OMElement) iterator.next(); + innerItr = result.getChildElements(); + while (innerItr.hasNext()) { + OMElement elem = (OMElement) innerItr.next(); + list.add(elem.getText()); + } + } + String[] result1 = list.toArray(new String[list.size()]); + String[][] results = new String[result1.length][3]; + String b1, b2, b3; + for (int i = 0; i < result1.length; i++) { + if (result1[i].length() != 0) { + b1 = result1[i].substring(0, result1[i].indexOf(" ")); + b2 = result1[i].substring(result1[i].indexOf(" ") + 1).substring(0, result1[i].substring(result1[i].indexOf(" ") + 1).indexOf(" ")); + b3 = result1[i].substring(result1[i].indexOf(" ") + 1).substring(result1[i].substring(result1[i].indexOf(" ") + 1).indexOf(" ") + 1); + results[i][0] = b1; + results[i][1] = b2; + results[i][2] = b3; + } + } + return results; + } + + + public String[][] getMobileTableWsdlData() { + try { + String url = "http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl"; + EndpointReference targetEPR = new EndpointReference(url); + //创建一个OMFactory,下面的namespace、方法与参数均需由它创建 + OMFactory fac = OMAbstractFactory.getOMFactory(); + // 命名空间 + OMNamespace omNs = fac.createOMNamespace("http://WebXml.com.cn", "a"); + //下面创建的是参数对数 + /* + *OMElement symbol = fac.createOMElement("mobileCode", omNs); + symbol.addChild(fac.createOMText(symbol, "18795842")); + */ + //下面创建一个method对象 ,方法 + OMElement method = fac.createOMElement("getDatabaseInfo", omNs); + // method.addChild(symbol); + Options options = new Options(); + options.setTo(targetEPR); + options.setAction("http://WebXml.com.cn/getDatabaseInfo"); + ServiceClient sender = new ServiceClient(); + sender.setOptions(options); + OMElement result1 = sender.sendReceive(method); + return getResults(result1); + } catch (org.apache.axis2.AxisFault e) { + e.printStackTrace(); + } + return new String[][]{{}}; + } + +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/data/MobileWsdlTableDataDemo.java b/plugin-report-doc-demo/src/com/fr/data/MobileWsdlTableDataDemo.java new file mode 100644 index 0000000..44eca53 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/MobileWsdlTableDataDemo.java @@ -0,0 +1,147 @@ +package com.fr.data; + +import com.fr.base.AbstractTableData; +import com.fr.general.data.DataModel; +import com.fr.general.data.TableDataException; +import com.fr.script.Calculator; +import com.fr.stable.ParameterProvider; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLableReader; +import org.apache.axiom.om.OMAbstractFactory; +import org.apache.axiom.om.OMElement; +import org.apache.axiom.om.OMFactory; +import org.apache.axiom.om.OMNamespace; +import org.apache.axis2.addressing.EndpointReference; +import org.apache.axis2.client.Options; +import org.apache.axis2.client.ServiceClient; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class MobileWsdlTableDataDemo extends AbstractTableData { + private String[][] data; + + public MobileWsdlTableDataDemo() { + this.data = this.getMobileWsdlTableData(); + } + + public int getColumnCount() throws TableDataException { + return data[0].length; + } + + //��ȡ�е�����Ϊ�����е�һ�е�ֵ + public String getColumnName(int columnIndex) throws TableDataException { + return data[0][columnIndex]; + } + + //��ȡ����Ϊ���ݵij���-1 + public int getRowCount() throws TableDataException { + return data.length - 1; + } + + //��ȡֵ + public Object getValueAt(int rowIndex, int columnIndex) { + return data[rowIndex + 1][columnIndex]; + } + + public static String[][] getResults(OMElement element) { + if (element == null) { + return null; + } + Iterator iterator = element.getChildElements(); + Iterator innerItr; + List list = new ArrayList(); + OMElement result = null; + while (iterator.hasNext()) { + result = (OMElement) iterator.next(); + innerItr = result.getChildElements(); + while (innerItr.hasNext()) { + OMElement elem = (OMElement) innerItr.next(); + list.add(elem.getText()); + } + } + String[] result1 = list.toArray(new String[list.size()]); + String results[][] = new String[result1.length][3]; + String b1, b2, b3; + for (int i = 0; i < result1.length; i++) { + if (result1[i].length() != 0) { + b1 = result1[i].substring(0, result1[i].indexOf(" ")); + b2 = result1[i].substring(result1[i].indexOf(" ") + 1).substring(0, result1[i].substring(result1[i].indexOf(" ") + 1).indexOf(" ")); + b3 = result1[i].substring(result1[i].indexOf(" ") + 1).substring(result1[i].substring(result1[i].indexOf(" ") + 1).indexOf(" ") + 1); + results[i][0] = b1; + results[i][1] = b2; + results[i][2] = b3; + } + } + return results; + } + + + public String[][] getMobileWsdlTableData() { + try { + String url = "http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl"; + EndpointReference targetEPR = new EndpointReference(url); + //����һ��OMFactory�������namespace����������������������� + OMFactory fac = OMAbstractFactory.getOMFactory(); + // �����ռ� + OMNamespace omNs = fac.createOMNamespace("http://WebXml.com.cn", "a"); + //���洴�����Dz������� + /* + *OMElement symbol = fac.createOMElement("mobileCode", omNs); + symbol.addChild(fac.createOMText(symbol, "18795842")); + */ + //���洴��һ��method���� ,���� + OMElement method = fac.createOMElement("getDatabaseInfo", omNs); + // method.addChild(symbol); + Options options = new Options(); + options.setTo(targetEPR); + options.setAction("http://WebXml.com.cn/getDatabaseInfo"); + ServiceClient sender = new ServiceClient(); + sender.setOptions(options); + OMElement result1 = sender.sendReceive(method); + String[][] result = getResults(result1); + return result; + } catch (java.rmi.RemoteException e) { + e.printStackTrace(); + } + return new String[][]{{}}; + } + + @Override + public DataModel createDataModel(Calculator arg0) { + // TODO Auto-generated method stub + return null; + } + + @Override + public DataModel createDataModel(Calculator arg0, String arg1) { + // TODO Auto-generated method stub + return null; + } + + @Override + public DataModel createDataModel(Calculator arg0, int arg1) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ParameterProvider[] getParameters(Calculator arg0) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void readXML(XMLableReader arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void writeXML(XMLPrintWriter arg0) { + // TODO Auto-generated method stub + + } + +} diff --git a/plugin-report-doc-demo/src/com/fr/data/MobileWsdlTableDataDemo1.java b/plugin-report-doc-demo/src/com/fr/data/MobileWsdlTableDataDemo1.java new file mode 100644 index 0000000..c46fc03 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/MobileWsdlTableDataDemo1.java @@ -0,0 +1,105 @@ +package com.fr.data; + +import com.fr.general.data.TableDataException; +import org.apache.axiom.om.OMAbstractFactory; +import org.apache.axiom.om.OMElement; +import org.apache.axiom.om.OMFactory; +import org.apache.axiom.om.OMNamespace; +import org.apache.axis2.addressing.EndpointReference; +import org.apache.axis2.client.Options; +import org.apache.axis2.client.ServiceClient; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class MobileWsdlTableDataDemo1 extends AbstractTableData { + private String[][] data; + + public MobileWsdlTableDataDemo1() { + this.data = this.getMobileWsdlTableData(); + } + + public int getColumnCount() throws TableDataException { + return data[0].length; + } + + //获取列的名称为数组中第一行的值 + public String getColumnName(int columnIndex) throws TableDataException { + return data[0][columnIndex]; + } + + //获取行数为数据的长度-1 + public int getRowCount() throws TableDataException { + return data.length - 1; + } + + //获取值 + public Object getValueAt(int rowIndex, int columnIndex) { + return data[rowIndex + 1][columnIndex]; + } + + public static String[][] getResults(OMElement element) { + if (element == null) { + return null; + } + Iterator iterator = element.getChildElements(); + Iterator innerItr; + List list = new ArrayList(); + OMElement result = null; + while (iterator.hasNext()) { + result = (OMElement) iterator.next(); + innerItr = result.getChildElements(); + while (innerItr.hasNext()) { + OMElement elem = (OMElement) innerItr.next(); + list.add(elem.getText()); + } + } + String[] result1 = list.toArray(new String[list.size()]); + String results[][] = new String[result1.length][3]; + String b1, b2, b3; + for (int i = 0; i < result1.length; i++) { + if (result1[i].length() != 0) { + b1 = result1[i].substring(0, result1[i].indexOf(" ")); + b2 = result1[i].substring(result1[i].indexOf(" ") + 1).substring(0, result1[i].substring(result1[i].indexOf(" ") + 1).indexOf(" ")); + b3 = result1[i].substring(result1[i].indexOf(" ") + 1).substring(result1[i].substring(result1[i].indexOf(" ") + 1).indexOf(" ") + 1); + results[i][0] = b1; + results[i][1] = b2; + results[i][2] = b3; + } + } + return results; + } + + + public String[][] getMobileWsdlTableData() { + try { + String url = "http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl"; + EndpointReference targetEPR = new EndpointReference(url); + //创建一个OMFactory,下面的namespace、方法与参数均需由它创建 + OMFactory fac = OMAbstractFactory.getOMFactory(); + // 命名空间 + OMNamespace omNs = fac.createOMNamespace("http://WebXml.com.cn", "a"); + //下面创建的是参数对数 + /* + *OMElement symbol = fac.createOMElement("mobileCode", omNs); + symbol.addChild(fac.createOMText(symbol, "18795842")); + */ + //下面创建一个method对象 ,方法 + OMElement method = fac.createOMElement("getDatabaseInfo", omNs); + // method.addChild(symbol); + Options options = new Options(); + options.setTo(targetEPR); + options.setAction("http://WebXml.com.cn/getDatabaseInfo"); + ServiceClient sender = new ServiceClient(); + sender.setOptions(options); + OMElement result1 = sender.sendReceive(method); + String[][] result = getResults(result1); + return result; + } catch (org.apache.axis2.AxisFault e) { + e.printStackTrace(); + } + return new String[][]{{}}; + } + +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/data/MobileWsdlTableDataDemo2.java b/plugin-report-doc-demo/src/com/fr/data/MobileWsdlTableDataDemo2.java new file mode 100644 index 0000000..76509d9 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/MobileWsdlTableDataDemo2.java @@ -0,0 +1,65 @@ +package com.fr.data; + +import com.fr.general.data.TableDataException; +import mobile.MobileCodeWSStub; + +public class MobileWsdlTableDataDemo2 extends AbstractTableData { + private String[][] data; + + public MobileWsdlTableDataDemo2() { + // this.data = this.getData(); + } + + public int getColumnCount() throws TableDataException { + return data[0].length; + } + + //获取列的名称为数组中第一行的值 + public String getColumnName(int columnIndex) throws TableDataException { + return data[0][columnIndex]; + } + + //获取行数为数据的长度-1 + public int getRowCount() throws TableDataException { + return data.length - 1; + } + + //获取值 + public Object getValueAt(int rowIndex, int columnIndex) { + return data[rowIndex + 1][columnIndex]; + } + + public static void main(String agrs[]) { +// public String[][] getData() { + try { + String url = "http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl"; + MobileCodeWSStub stub = new MobileCodeWSStub(url); +// MobileCodeWSStub.GetMobileCodeInfo aa = new MobileCodeWSStub.GetMobileCodeInfo(); + MobileCodeWSStub.GetDatabaseInfo bb = new MobileCodeWSStub.GetDatabaseInfo(); +// aa.setMobileCode("18795842832"); +// String rs=stub.getMobileCodeInfo(aa).getGetMobileCodeInfoResult(); + String[] p = stub.getDatabaseInfo(bb).getGetDatabaseInfoResult().getString(); + String result[][] = new String[p.length][3]; + String b1, b2, b3; + for (int i = 0; i < p.length; i++) { + if (p[i].length() != 0) { + b1 = p[i].substring(0, p[i].indexOf(" ")); + b2 = p[i].substring(p[i].indexOf(" ") + 1).substring(0, p[i].substring(p[i].indexOf(" ") + 1).indexOf(" ")); + b3 = p[i].substring(p[i].indexOf(" ") + 1).substring(p[i].substring(p[i].indexOf(" ") + 1).indexOf(" ") + 1); + result[i][0] = b1; + result[i][1] = b2; + result[i][2] = b3; + // System.out.println(b1); + } + } + // return result; + } catch (org.apache.axis2.AxisFault e) { + e.printStackTrace(); + } catch (java.rmi.RemoteException e) { + e.printStackTrace(); + } + // return new String[][] { {} }; + } + +} + diff --git a/plugin-report-doc-demo/src/com/fr/data/MobileWsdlTableDataDemoPara.java b/plugin-report-doc-demo/src/com/fr/data/MobileWsdlTableDataDemoPara.java new file mode 100644 index 0000000..fb12108 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/MobileWsdlTableDataDemoPara.java @@ -0,0 +1,114 @@ +package com.fr.data; + +import com.fr.general.FRLogger; +import com.fr.general.data.TableDataException; +import org.apache.axiom.om.OMAbstractFactory; +import org.apache.axiom.om.OMElement; +import org.apache.axiom.om.OMFactory; +import org.apache.axiom.om.OMNamespace; +import org.apache.axis2.addressing.EndpointReference; +import org.apache.axis2.client.Options; +import org.apache.axis2.client.ServiceClient; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class MobileWsdlTableDataDemoPara extends AbstractTableData { + private String[][] data; + + public MobileWsdlTableDataDemoPara() { + this.data = this.getMobileWsdlTableData(); + } + + public int getColumnCount() throws TableDataException { + return data[0].length; + } + + //获取列的名称为数组中第一行的值 + public String getColumnName(int columnIndex) throws TableDataException { + return data[0][columnIndex]; + } + + //获取行数为数据的长度-1 + public int getRowCount() throws TableDataException { + return data.length - 1; + } + + //获取值 + public Object getValueAt(int rowIndex, int columnIndex) { + return data[rowIndex + 1][columnIndex]; + } + + public static String[][] getResults(OMElement element) { + if (element == null) { + return null; + } + Iterator iterator = element.getChildElements(); + //Iterator innerItr; + List list = new ArrayList(); + OMElement result = null; + while (iterator.hasNext()) { + result = (OMElement) iterator.next(); + list.add(result.getText()); + } + String[] result1 = (String[]) list.toArray(new String[list.size()]); + String results[][] = new String[result1.length][3]; + String b1, b2, b3; + for (int i = 0; i < result1.length; i++) { + if (result1[i].length() != 0) { + b1 = result1[i].substring(0, result1[i].indexOf(" ")); + b2 = result1[i].substring(result1[i].indexOf(" ") + 1).substring(0, result1[i].substring(result1[i].indexOf(" ") + 1).indexOf(" ")); + b3 = result1[i].substring(result1[i].indexOf(" ") + 1).substring(result1[i].substring(result1[i].indexOf(" ") + 1).indexOf(" ") + 1); + results[i][0] = b1; + results[i][1] = b2; + results[i][2] = b3; + } + } + return results; + } + + + public String[][] getMobileWsdlTableData() { + try { + FRLogger.getLogger().error("进入了"); + String url = "http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl"; + EndpointReference targetEPR = new EndpointReference(url); + //创建一个OMFactory,下面的namespace、方法与参数均需由它创建 + OMFactory fac = OMAbstractFactory.getOMFactory(); + // 命名空间 + OMNamespace omNs = fac.createOMNamespace("http://WebXml.com.cn/", "a"); + //下面创建的是参数对数 + + OMElement symbol = fac.createOMElement("mobileCode", omNs); + symbol.addChild(fac.createOMText(symbol, "18651038607")); + + OMElement symbol2 = fac.createOMElement("userID", omNs); + symbol2.addChild(fac.createOMText(symbol2, "")); + + + //下面创建一个method对象 ,方法 + OMElement method = fac.createOMElement("getMobileCodeInfo", omNs); + method.addChild(symbol); + method.addChild(symbol2); + Options options = new Options(); + options.setTo(targetEPR); + options.setAction("http://WebXml.com.cn/getMobileCodeInfo"); + ServiceClient sender = new ServiceClient(); + sender.setOptions(options); + OMElement result1 = sender.sendReceive(method); + String[][] result = getResults(result1); + return result; + } catch (java.rmi.RemoteException e) { + e.printStackTrace(); + } + return new String[][]{{}}; + } + + public static void main(String[] args) { + MobileWsdlTableDataDemoPara ss = new MobileWsdlTableDataDemoPara(); + + //ss.getData(); + } + +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/data/ParamSAPDataTest.java b/plugin-report-doc-demo/src/com/fr/data/ParamSAPDataTest.java new file mode 100644 index 0000000..9b06dba --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/ParamSAPDataTest.java @@ -0,0 +1,112 @@ +package com.fr.data; + +import com.fr.base.FRContext; +import com.fr.config.holder.impl.xml.XmlColConf; +import com.fr.function.ConnectSAPServer; +import com.fr.stable.ParameterProvider; +import com.sap.conn.jco.JCoDestination; +import com.sap.conn.jco.JCoException; +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; + + private int columnNum = 3; + + + private String[][] rowData; + private static JCoDestination jCoDestination; + + public ParamSAPDataTest() { + ArrayList arrayList = new ArrayList(); + arrayList.add("LIFNR"); + arrayList.add("NAME1"); + + + this.parameters = new XmlColConf>(arrayList, ParameterProvider.class); + + this.columnNames = new String[this.columnNum]; + this.columnNames[0] = "供应商编码"; + this.columnNames[1] = "供应商名称"; + this.columnNames[2] = "供应商地址"; + } + + public int getColumnCount() { + return this.columnNum; + } + + public String getColumnName(int columnIndex) { + return this.columnNames[columnIndex]; + } + + public int getRowCount() { + try { + init(); + } catch (JCoException e) { + FRContext.getLogger().info("失败"); + } + return this.rowData.length; + } + + public Object getValueAt(int rowIndex, int columnIndex) { + try { + init(); + } catch (JCoException e) { + FRContext.getLogger().info("失败"); + } + if (columnIndex >= this.columnNum) { + return null; + } + return this.rowData[rowIndex][columnIndex]; + } + + public void init() throws JCoException { + if (this.rowData != null) { + return; + } + try { + jCoDestination = ConnectSAPServer.Connect(); + } catch (Exception e) { + FRContext.getLogger().info("失败"); + } + JCoFunction function = jCoDestination.getRepository().getFunction("Z_LFA3_QUERY"); + if (function == null) + throw new RuntimeException( + "Function not found in SAP."); + function.getImportParameterList().setValue("LIFNR", "%" + + ((ParameterProvider) (parameters.get().toArray()[0])).getValue().toString().toUpperCase().trim() + "%"); + function.getImportParameterList().setValue("NAME1", "%" + ((ParameterProvider) (parameters.get().toArray()[1])) + .getValue().toString().toUpperCase().trim() + "%"); + function.execute(jCoDestination); + JCoTable returnTable = function.getTableParameterList().getTable( + "ZLFA1S3"); + rowData = new String[20][3]; + if (returnTable.getNumRows() > 0) { + returnTable.firstRow(); + for (int i = 0; i < 20; ) { + String[] objArray = new String[this.columnNum]; + objArray[0] = returnTable.getString("LIFNR"); + objArray[1] = returnTable.getString("NAME1"); + objArray[2] = returnTable.getString("STRAS"); + this.rowData[i] = objArray; + + i++; + returnTable + .nextRow(); + } + + FRContext.getLogger().info( + "Query SQL of ParamSAPDataTest: \n" + this.rowData.length + + " rows selected"); + } + } + + public void release() throws Exception { + super.release(); + this.rowData = null; + } +} diff --git a/plugin-report-doc-demo/src/com/fr/data/ParamTableDataDemo.java b/plugin-report-doc-demo/src/com/fr/data/ParamTableDataDemo.java new file mode 100644 index 0000000..8024cfa --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/ParamTableDataDemo.java @@ -0,0 +1,158 @@ +package com.fr.data; + +import com.fr.base.FRContext; +import com.fr.file.DatasourceManager; +import com.fr.stable.ParameterProvider; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.Statement; +import java.util.ArrayList; + +/** + * 带参数的程序数据集Demo + * + * @author fanruan + */ +public class ParamTableDataDemo extends AbstractTableData { + /** + * 列名数组,保存程序数据集所有列名 + */ + private String[] columnNames; + /** + * 定义程序数据集的列数量 + */ + private int columnNum = 10; + /** + * 保存查询表的实际列数量 + */ + private int colNum = 0; + /** + * 保存查询得到列值 + */ + private ArrayList valueList = null; + + /** + * 构造函数,定义表结构,该表有10个数据列,列名为column#0,column#1,。。。。。。column#9 + */ + public ParamTableDataDemo() { + columnNames = new String[columnNum]; + for (int i = 0; i < columnNum; i++) { + columnNames[i] = "column#" + String.valueOf(i); + } + } + + /** + * 实现其他四个方法 + * + * @return columnNum + */ + @Override + public int getColumnCount() { + return columnNum; + } + + @Override + public String getColumnName(int columnIndex) { + return columnNames[columnIndex]; + } + + @Override + public int getRowCount() { + init(); + return valueList.size(); + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + init(); + if (columnIndex >= colNum) { + return null; + } + return ((Object[]) valueList.get(rowIndex))[columnIndex]; + } + + /** + * 准备数据 + */ + private void init() { + // 确保只被执行一次 + if (valueList != null) { + return; + } + // 保存得到的数据库表名 + String tableName = ((ParameterProvider) (parameters.get().toArray())[0]).getValue().toString(); + + // 构造SQL语句,并打印出来 + String sql = "select * from " + tableName; + FRContext.getLogger().info("Query SQL of ParamTableDataDemo: \n" + sql); + // 保存得到的结果集 + valueList = new ArrayList(); + // 下面开始建立数据库连接,按照刚才的SQL语句进行查询 + com.fr.data.impl.Connection conn = DatasourceManager.getInstance().getConnection("FRDemo"); + + try { + Connection con = conn.createConnection(); + Statement stmt = con.createStatement(); + ResultSet rs = stmt.executeQuery(sql); + // 获得记录的详细信息,然后获得总列数 + ResultSetMetaData rsmd = rs.getMetaData(); + 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(); + con.close(); + // 打印一共取到的数据行数量 + + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 获取数据库连接 driverName和 url 可以换成您需要的 + * + * @return Connection + */ + public Connection getConnection() { + + String driverName = "org.sqlite.JDBC"; + String url = "jdbc:sqlite://E:\\8.0-master\\env\\WebReport\\FRDemo.db"; + String username = ""; + String password = ""; + Connection con; + try { + Class.forName(driverName); + con = DriverManager.getConnection(url, username, password); + + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return con; + } + + + /** + * 释放一些资源,因为可能会有重复调用,所以需释放valueList,将上次查询的结果释放掉 + * + * @throws Exception e + */ + @Override + public void release() throws Exception { + super.release(); + this.valueList = null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/data/WebServiceTableData.java b/plugin-report-doc-demo/src/com/fr/data/WebServiceTableData.java new file mode 100644 index 0000000..127f658 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/WebServiceTableData.java @@ -0,0 +1,58 @@ +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.getWebServiceTableData(); + } + + //获取列数 + + @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[][] getWebServiceTableData() { + 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[][]{}; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/data/WebServiceWsdlTableDataDemo2.java b/plugin-report-doc-demo/src/com/fr/data/WebServiceWsdlTableDataDemo2.java new file mode 100644 index 0000000..a4f16e8 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/WebServiceWsdlTableDataDemo2.java @@ -0,0 +1,69 @@ +package com.fr.data; + +import com.fr.general.data.TableDataException; +import mobile.MobileCodeWSStub; + +public class WebServiceWsdlTableDataDemo2 extends AbstractTableData { + /** + * + */ + private static final long serialVersionUID = 1L; + private String[][] data; + + public WebServiceWsdlTableDataDemo2() { + this.data = this.getWebServiceWsdlTableData(); + } + + public int getColumnCount() throws TableDataException { + return data[0].length; + } + + //获取列的名称为数组中第一行的值 + public String getColumnName(int columnIndex) throws TableDataException { + return data[0][columnIndex]; + } + + //获取行数为数据的长度-1 + public int getRowCount() throws TableDataException { + return data.length - 1; + } + + //获取值 + public Object getValueAt(int rowIndex, int columnIndex) { + return data[rowIndex + 1][columnIndex]; + } + + public String[][] getWebServiceWsdlTableData() { + try { + String url = "http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl"; + MobileCodeWSStub stub = new MobileCodeWSStub(url); +// MobileCodeWSStub.GetMobileCodeInfo aa = new MobileCodeWSStub.GetMobileCodeInfo(); + MobileCodeWSStub.GetDatabaseInfo bb = new MobileCodeWSStub.GetDatabaseInfo(); +// aa.setMobileCode("18795842832"); +// String rs=stub.getMobileCodeInfo(aa).getGetMobileCodeInfoResult(); + String[] p = stub.getDatabaseInfo(bb).getGetDatabaseInfoResult().getString(); + String result[][] = new String[p.length][3]; + String b1, b2, b3; + for (int i = 0; i < p.length; i++) { + if (p[i].length() != 0) { + b1 = p[i].substring(0, p[i].indexOf(" ")); + b2 = p[i].substring(p[i].indexOf(" ") + 1).substring(0, p[i].substring(p[i].indexOf(" ") + 1).indexOf(" ")); + b3 = p[i].substring(p[i].indexOf(" ") + 1).substring(p[i].substring(p[i].indexOf(" ") + 1).indexOf(" ") + 1); + result[i][0] = b1; + result[i][1] = b2; + result[i][2] = b3; + } + } + return result; + } catch (java.rmi.RemoteException e) { + e.printStackTrace(); + } + return new String[][]{{}}; + } + + public static void main(String[] args) { + for (int i = 0; i < new WebServiceWsdlTableDataDemo2().getWebServiceWsdlTableData().length; i++) { + System.out.println(new WebServiceWsdlTableDataDemo2().getWebServiceWsdlTableData()[i]); + } + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/data/XMLColumnNameType4Demo.java b/plugin-report-doc-demo/src/com/fr/data/XMLColumnNameType4Demo.java new file mode 100644 index 0000000..7e42fbf --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/XMLColumnNameType4Demo.java @@ -0,0 +1,27 @@ +package com.fr.data; + +public class XMLColumnNameType4Demo { + private int type = -1; + private String name = null; + + public XMLColumnNameType4Demo(String name, int type) { + this.name = name; + this.type = type; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/data/XMLDemoTableData.java b/plugin-report-doc-demo/src/com/fr/data/XMLDemoTableData.java new file mode 100644 index 0000000..5477b97 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/XMLDemoTableData.java @@ -0,0 +1,202 @@ +package com.fr.data; + +import com.fr.base.Parameter; +import com.fr.config.holder.impl.xml.XmlColConf; +import com.fr.general.data.DataModel; +import com.fr.script.Calculator; +import com.fr.stable.ParameterProvider; +import com.fr.stable.StringUtils; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.XMLEvent; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * XMLDemoTableData + *

+ * 这是一个按参数来解析不同地址XML文件的demo + *

+ * AbstractParameterTableData 包装了有参数数据集的基本实现 + */ +public class XMLDemoTableData extends AbstractParameterTableData { + + // 构造函数 + public XMLDemoTableData() { + // 定义需要的参数,这里定义一个参数,参数名为filename,给其一个默认值"Northwind.xml" + this.parameters = new XmlColConf>(new ArrayList(), ParameterProvider.class); + parameters.add(new Parameter("filename", "Northwind")); + } + + /** + * 返回获取数据的执行对象 + * 系统取数时,调用此方法来返回一个获取数据的执行对象 + * 注意! 当数据集需要根据不同参数来多次取数时,此方法在一个计算过程中会被多次调用。 + */ + @SuppressWarnings("unchecked") + public DataModel createDataModel(Calculator calculator) { + // 获取传进来的参数 + ParameterProvider[] params = super.processParameters(calculator); + + // 根据传进来的参数,等到文件的路径 + String filename = null; + for (int i = 0; i < params.length; i++) { + if (params[i] == null) continue; + + if ("filename".equals(params[i].getName())) { + filename = (String) params[i].getValue(); + } + } + + String filePath; + if (StringUtils.isBlank(filename)) { + filePath = "D://DefaultFile.xml"; + } else { + filePath = "D://" + filename + ".xml"; + } + + // 定义需要解析的数据列,机器 +// XMLColumnNameType4Demo[] columns = new XMLColumnNameType4Demo[7]; +// columns[0] = new XMLColumnNameType4Demo("CustomerID", XMLParseDemoDataModel.COLUMN_TYPE_STRING); +// columns[1] = new XMLColumnNameType4Demo("CompanyName", XMLParseDemoDataModel.COLUMN_TYPE_STRING); +// columns[2] = new XMLColumnNameType4Demo("ContactName", XMLParseDemoDataModel.COLUMN_TYPE_STRING); +// columns[3] = new XMLColumnNameType4Demo("ContactTitle", XMLParseDemoDataModel.COLUMN_TYPE_STRING); +// columns[4] = new XMLColumnNameType4Demo("Address", XMLParseDemoDataModel.COLUMN_TYPE_STRING); +// columns[5] = new XMLColumnNameType4Demo("City", XMLParseDemoDataModel.COLUMN_TYPE_STRING); +// columns[6] = new XMLColumnNameType4Demo("Phone", XMLParseDemoDataModel.COLUMN_TYPE_STRING); + + List list = new ArrayList(); + XMLInputFactory inputFactory = XMLInputFactory.newInstance(); + InputStream in; + try { + in = new BufferedInputStream(new FileInputStream(new File(filePath))); + XMLEventReader reader = inputFactory.createXMLEventReader(in); + readCol(reader, list); + in.close(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + XMLColumnNameType4Demo[] columns = (XMLColumnNameType4Demo[]) list.toArray(new XMLColumnNameType4Demo[0]); + + + // 定义解析的数据在xml文件结构中的位置 + String[] xpath = new String[2]; + xpath[0] = "Northwind"; + xpath[1] = "Customers"; + /* + * 说明 + * 提供的样例xml文件的格式是: + * + * + * ALFKI + * Alfreds Futterkiste + * Maria Anders + * Sales Representative + *

Obere Str. 57
+ * Berlin + * 12209 + * Germany + * 030-0074321 + * 030-0076545 + * + * + * + * 上面定义的意义就是 + * /Northwind/Customers路径所表示的一个Customers节点为一条数据,它包含的节点中的CustomerID...等等是需要获取的列值 + */ + + // 构造一个实际去取值的执行对象 + return new XMLParseDemoDataModel(filePath, xpath, columns); + } + + private int deep = 0; + private static final int COL_DEEP = 3; + private boolean flag = false; + + private void readCol(XMLEventReader reader, List list) + throws XMLStreamException { + while (reader.hasNext()) { + XMLEvent event = reader.nextEvent(); + if (event.isStartElement()) { + //deep是控制层数的,只把xml中对应的层的加入到列名中 + deep++; + //表示已经进入到了列名那一层 + if (deep == COL_DEEP) { + flag = true; + } + //如果在高层,并且已经进入到了col层,则退出 + if (deep < COL_DEEP && flag) { + return; + } + if (deep != COL_DEEP) { + continue; + } +// println("name: " + event.asStartElement().getName()); + XMLColumnNameType4Demo column = new XMLColumnNameType4Demo(event.asStartElement().getName().toString(), XMLParseDemoDataModel.COLUMN_TYPE_STRING); + list.add(column); + readCol(reader, list); + } else if (event.isCharacters()) { + //对数据值不做处理 + } else if (event.isEndElement()) { + deep--; + return; + } + } + } + + private void readCol0(XMLEventReader reader) + throws XMLStreamException { + while (reader.hasNext()) { + XMLEvent event = reader.nextEvent(); + if (event.isStartElement()) { + //deep是控制层数的,只把xml中对应的层的加入到列名中 + deep++; + //表示已经进入到了列名那一层 + if (deep == COL_DEEP) { + flag = true; + } + //如果在高层,并且已经进入到了col层,则退出 + if (deep < COL_DEEP && flag) { + return; + } + if (deep != COL_DEEP) { + continue; + } + System.out.println("name: " + event.asStartElement().getName()); + readCol0(reader); + } else if (event.isCharacters()) { + //对数据值不做处理 + } else if (event.isEndElement()) { + deep--; + return; + } + } + } + + public static void main(String[] args) { + XMLInputFactory inputFactory = XMLInputFactory.newInstance(); +// in = new FileReader(new File(filePath)); +// XMLEventReader reader = inputFactory.createXMLEventReader(in); +// readCol(reader,list); + BufferedInputStream in; + try { + in = new BufferedInputStream(new FileInputStream(new File("D:/tmp/f.xml"))); + byte[] ba = new byte[3]; + in.read(ba, 0, 3); +// System.out.println(in) + XMLEventReader reader = inputFactory.createXMLEventReader(in); + new XMLDemoTableData().readCol0(reader); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/data/XMLParseDemoDataModel.java b/plugin-report-doc-demo/src/com/fr/data/XMLParseDemoDataModel.java new file mode 100644 index 0000000..70619f6 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/XMLParseDemoDataModel.java @@ -0,0 +1,226 @@ +package com.fr.data; + +import com.fr.base.FRContext; +import com.fr.general.ComparatorUtils; +import com.fr.general.data.TableDataException; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; + +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +/** + * XMLParseDemoDataModel + *

+ * DataModel是获取数据的接口 + *

+ * 这里通过init方法一次性取数后,构造一个二维表对象来实现DataModel的各个取数方法 + */ +public class XMLParseDemoDataModel extends AbstractDataModel { + // 数据类型标识 + public static final int COLUMN_TYPE_STRING = 0; + public static final int COLUMN_TYPE_INTEGER = 1; + public static final int COLUMN_TYPE_BOOLEAN = 2; + + // 缓存取出来的数据 + protected List row_list = null; + + // 数据对应的节点路径 + private String[] xPath; + // 节点路径下包含的需要取数的节点 + private XMLColumnNameType4Demo[] columns; + + private String filePath; + + public XMLParseDemoDataModel(String filename, String[] xPath, + XMLColumnNameType4Demo[] columns) { + this.filePath = filename; + this.xPath = xPath; + this.columns = columns; + } + + /** + * 取出列的数量 + */ + public int getColumnCount() throws TableDataException { + return columns.length; + } + + /** + * 取出相应的列的名称 + */ + public String getColumnName(int columnIndex) throws TableDataException { + if (columnIndex < 0 || columnIndex >= columns.length) + return null; + String columnName = columns[columnIndex] == null ? null + : columns[columnIndex].getName(); + + return columnName; + } + + /** + * 取出得到的结果集的总的行数 + */ + public int getRowCount() throws TableDataException { + this.init(); + return row_list.size(); + } + + /** + * 取出相应位置的值 + */ + public Object getValueAt(int rowIndex, int columnIndex) + throws TableDataException { + this.init(); + if (rowIndex < 0 || rowIndex >= row_list.size() || columnIndex < 0 + || columnIndex >= columns.length) + return null; + return ((Object[]) row_list.get(rowIndex))[columnIndex]; + } + + /** + * 释放一些资源,取数结束后,调用此方法来释放资源 + */ + public void release() throws Exception { + if (this.row_list != null) { + this.row_list.clear(); + this.row_list = null; + } + } + + /** ************************************************** */ + /** ***********以上是实现DataModel的方法*************** */ + /** ************************************************** */ + + /** ************************************************** */ + /** ************以下为解析XML文件的方法**************** */ + /** + * ************************************************* + */ + + // 一次性将数据取出来 + protected void init() throws TableDataException { + if (this.row_list != null) + return; + + this.row_list = new ArrayList(); + try { + // 使用SAX解析XML文件, 使用方法请参见JAVA SAX解析 + SAXParserFactory f = SAXParserFactory.newInstance(); + SAXParser parser = f.newSAXParser(); + + parser.parse(new File(XMLParseDemoDataModel.this.filePath), + new DemoHandler()); + } catch (Exception e) { + e.printStackTrace(); + FRContext.getLogger().error(e.getMessage(), e); + } + } + + /** + * 基本原理就是解析器在遍历文件时 发现节点开始标记时,调用startElement方法 读取节点内部内容时,调用characters方法 + * 发现节点结束标记时,调用endElement + */ + private class DemoHandler extends DefaultHandler { + private List levelList = new ArrayList(); // 记录当前节点的路径 + private Object[] values; // 缓存一条记录 + private int recordIndex = -1; // 当前记录所对应的列的序号,-1表示不需要记录 + + public void startElement(String uri, String localName, String qName, + Attributes attributes) throws SAXException { + // 记录下 + levelList.add(qName); + + if (isRecordWrapTag()) { + // 开始一条新数据的记录 + values = new Object[XMLParseDemoDataModel.this.columns.length]; + } else if (needReadRecord()) { + // 看看其对应的列序号,下面的characters之后执行时,根据这个列序号来设置值存放的位置。 + recordIndex = getColumnIndex(qName); + } + } + + public void characters(char[] ch, int start, int length) + throws SAXException { + if (recordIndex > -1) { + // 读取值 + String text = new String(ch, start, length); + XMLColumnNameType4Demo type = XMLParseDemoDataModel.this.columns[recordIndex]; + Object value = null; + if (type.getType() == COLUMN_TYPE_STRING) { + value = text; + } + if (type.getType() == COLUMN_TYPE_INTEGER) { + value = new Integer(text); + } else if (type.getType() == COLUMN_TYPE_BOOLEAN) { + value = new Boolean(text); + } + + values[recordIndex] = value; + } + } + + public void endElement(String uri, String localName, String qName) + throws SAXException { + try { + if (isRecordWrapTag()) { + // 一条记录结束,就add进list中 + XMLParseDemoDataModel.this.row_list.add(values); + values = null; + } else if (needReadRecord()) { + recordIndex = -1; + } + } finally { + levelList.remove(levelList.size() - 1); + } + } + + // 正好匹配路径,确定是记录外部的Tag + private boolean isRecordWrapTag() { + if (levelList.size() == XMLParseDemoDataModel.this.xPath.length + && compareXPath()) { + return true; + } + + return false; + } + + // 需要记录一条记录 + private boolean needReadRecord() { + if (levelList.size() == (XMLParseDemoDataModel.this.xPath.length + 1) + && compareXPath()) { + return true; + } + + return false; + } + + // 是否匹配设定的XPath路径 + private boolean compareXPath() { + String[] xPath = XMLParseDemoDataModel.this.xPath; + for (int i = 0; i < xPath.length; i++) { + if (!ComparatorUtils.equals(xPath[i], levelList.get(i))) { + return false; + } + } + + return true; + } + + // 获取该字段的序号 + private int getColumnIndex(String columnName) { + XMLColumnNameType4Demo[] nts = XMLParseDemoDataModel.this.columns; + for (int i = 0; i < nts.length; i++) { + if (ComparatorUtils.equals(nts[i].getName(), columnName)) { + return i; + } + } + + return -1; + } + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/data/XMLRead.java b/plugin-report-doc-demo/src/com/fr/data/XMLRead.java new file mode 100644 index 0000000..ef3bc4d --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/XMLRead.java @@ -0,0 +1,115 @@ +package com.fr.data; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; + +/** + * @author fanruan + */ +public class XMLRead extends AbstractTableData { + /** + * 列名数组,保存程序数据集所有列名 + */ + private String[] columnNames = {"id", "name", "MemoryFreeSize", + "MemoryTotalSize", "MemoryUsage"}; + /** + * 保存表数据 + */ + private ArrayList valueList = null; + + @Override + public int getColumnCount() { + return 5; + } + + @Override + public String getColumnName(int columnIndex) { + return columnNames[columnIndex]; + } + + @Override + public int getRowCount() { + init(); + return valueList.size(); + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + init(); + return ((Object[]) valueList.get(rowIndex))[columnIndex]; + } + + private void init() { + // 确保只被执行一次 + if (valueList != null) { + return; + } + valueList = new ArrayList(); + String sql = "SELECT * FROM xmltest"; + String[] name = {"MemoryFreeSize", "MemoryTotalSize", "MemoryUsage"}; + Connection conn = this.getConnection(); + try { + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery(sql); + // 用对象保存数据 + Object[] objArray; + while (rs.next()) { + objArray = new Object[5]; + String[] xmlData; + objArray[0] = rs.getObject(1); + objArray[1] = rs.getObject(2); + InputStream in; + String str = "中文stream"; + in = new ByteArrayInputStream(str.getBytes("UTF-8")); + GetXmlData getXMLData = new GetXmlData(); + // 对xml流进行解析,返回的为name对应的value值数组 + xmlData = getXMLData.readerXMLSource(in, name); + // 将解析后的值存于最终结果ArrayList中 + objArray[2] = xmlData[0]; + objArray[3] = xmlData[1]; + objArray[4] = xmlData[2]; + valueList.add(objArray); + } + // 释放数据源 + rs.close(); + stmt.close(); + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private Connection getConnection() { + String driverName = "oracle.jdbc.driver.OracleDriver"; + String url = "jdbc:oracle:thin:@env.finedevelop.com:55702:fr"; + String username = "system"; + String password = "123"; + Connection con; + + try { + Class.forName(driverName); + con = DriverManager.getConnection(url, username, password); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return con; + + } + + /** + * 释放一些资源,因为可能会有重复调用,所以需释放valueList,将上次查询的结果释放掉 + * + * @throws Exception e + */ + @Override + public void release() throws Exception { + super.release(); + this.valueList = null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/data/impl/Commit1.java b/plugin-report-doc-demo/src/com/fr/data/impl/Commit1.java new file mode 100644 index 0000000..49bdac1 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/impl/Commit1.java @@ -0,0 +1,126 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package com.fr.data.impl; + +import com.fr.base.Formula; +import com.fr.cache.Attachment; +import com.fr.data.SubmitJob; +import com.fr.general.FArray; +import com.fr.script.Calculator; +import com.fr.stable.UtilEvalError; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLableReader; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.sql.Statement; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * @author fanruan + */ +public class Commit1 implements SubmitJob { + private Object attach; + private String filePath; + + public Commit1() { + } + + @Override + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } + + private Object getAttach(Calculator ca) { + if (this.attach != null && this.attach instanceof Formula) { + try { + return ca.eval(((Formula) this.attach).getContent()); + } catch (UtilEvalError var3) { + var3.printStackTrace(); + return ""; + } + } else { + return ca.resolveVariable("attach"); + } + } + + @Override + public void doJob(Calculator ca) { + final Object attachO = this.getAttach(ca); + if (attachO instanceof FArray && ((FArray) attachO).length() != 0) { + (new Thread() { + @Override + public void run() { + FArray attachmentlist = (FArray) attachO; + + for (int i = 0; i < attachmentlist.length(); ++i) { + Statement sm = null; + String command = null; + String result = null; + if (attachmentlist.elementAt(i) instanceof Attachment) { + String FilePath = Commit1.this.filePath; + String FileName = ((Attachment) attachmentlist.elementAt(i)).getFilename(); + (new StringBuilder(String.valueOf(FilePath))).append("\\").append(FileName).toString(); + File fileDir = new File(FilePath); + if (!fileDir.exists()) { + fileDir.mkdirs(); + } + + try { + Commit1.mkfile(FilePath, FileName, new ByteArrayInputStream(((Attachment) attachmentlist.elementAt(i)).getBytes())); + } catch (Exception var11) { + Logger.getLogger("FR").log(Level.WARNING, var11.getMessage() + "/nmkfileerror", var11); + } + } + } + + } + }).start(); + } + + } + + @Override + public void doFinish(Calculator calculator) { + + } + + private static void mkfile(String path, String FileName, InputStream source) throws FileNotFoundException, IOException { + File fileout = new File(path, FileName); + if (fileout.exists()) { + fileout.delete(); + } + + fileout.createNewFile(); + FileOutputStream outputStream = new FileOutputStream(fileout); + byte[] bytes = new byte[1024]; + + for (int read = source.read(bytes); read != -1; read = source.read(bytes)) { + outputStream.write(bytes, 0, read); + outputStream.flush(); + } + + outputStream.close(); + } + + @Override + public void readXML(XMLableReader reader) { + } + + @Override + public void writeXML(XMLPrintWriter writer) { + } + + @Override + public String getJobType() { + return null; + } +} diff --git a/plugin-report-doc-demo/src/com/fr/data/impl/Commit3.java b/plugin-report-doc-demo/src/com/fr/data/impl/Commit3.java new file mode 100644 index 0000000..4697f6f --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/data/impl/Commit3.java @@ -0,0 +1,131 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package com.fr.data.impl; + +import com.fr.base.FRContext; +import com.fr.base.Formula; +import com.fr.cache.Attachment; +import com.fr.data.JobValue; +import com.fr.data.SubmitJob; +import com.fr.general.FArray; +import com.fr.script.Calculator; +import com.fr.stable.UtilEvalError; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLableReader; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * @author fanruan + */ +public class Commit3 implements SubmitJob { + private Object attach; + private JobValue filePath; + + public Commit3() { + } + + @Override + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } + + @Override + public void doJob(Calculator ca) throws Exception { + FRContext.getLogger().info("begin to upload file..."); + final Object attachO = this.getAttach(ca); + if (attachO instanceof FArray && ((FArray) attachO).length() != 0) { + (new Thread() { + @Override + public void run() { + FArray attachmentlist = (FArray) attachO; + + for (int i = 0; i < attachmentlist.length(); ++i) { + if (attachmentlist.elementAt(i) instanceof Attachment) { + FRContext.getLogger().info("filePath.value:" + Commit3.this.filePath.getValue().toString()); + FRContext.getLogger().info("filePath.valueState:" + Commit3.this.filePath.getValueState() + "注:valueState 0,1,2,3 分别表示 默认值,插入行,值改变,删除行"); + String FilePath = Commit3.this.filePath.getValue().toString(); + String FileName = ((Attachment) attachmentlist.elementAt(i)).getFilename(); + (new StringBuilder(String.valueOf(FilePath))).append("\\").append(FileName).toString(); + File fileDir = new File(FilePath); + if (!fileDir.exists()) { + fileDir.mkdirs(); + } + + try { + Commit3.mkfile(FilePath, FileName, new ByteArrayInputStream(((Attachment) attachmentlist.elementAt(i)).getBytes())); + } catch (Exception var8) { + Logger.getLogger("FR").log(Level.WARNING, var8.getMessage() + "/nmkfileerror", var8); + } + } + } + + } + }).start(); + } + + } + + @Override + public void doFinish(Calculator calculator) throws Exception { + + } + + private Object getAttach(Calculator ca) { + if (this.attach != null && this.attach instanceof Formula) { + try { + return ca.eval(((Formula) this.attach).getContent()); + } catch (UtilEvalError var3) { + var3.printStackTrace(); + return ""; + } + } else { + return ca.resolveVariable("attach"); + } + } + + private static void mkfile(String path, String FileName, InputStream source) throws FileNotFoundException, IOException { + File fileout = new File(path, FileName); + if (fileout.exists()) { + fileout.delete(); + FRContext.getLogger().info("old file deleted"); + } + + if (fileout.createNewFile()) { + FRContext.getLogger().info(path + FileName + "created!!"); + } + + FileOutputStream outputStream = new FileOutputStream(fileout); + byte[] bytes = new byte[1024]; + + for (int read = source.read(bytes); read != -1; read = source.read(bytes)) { + outputStream.write(bytes, 0, read); + outputStream.flush(); + } + + outputStream.close(); + } + + @Override + public void readXML(XMLableReader reader) { + } + + @Override + public void writeXML(XMLPrintWriter writer) { + } + + @Override + public String getJobType() { + return null; + } +} diff --git a/plugin-report-doc-demo/src/com/fr/demo/ChangeRowAndCol.java b/plugin-report-doc-demo/src/com/fr/demo/ChangeRowAndCol.java new file mode 100644 index 0000000..61afa9b --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/demo/ChangeRowAndCol.java @@ -0,0 +1,79 @@ +//遍历单元格 +package com.fr.demo; + +import com.fr.io.TemplateWorkBookIO; +import com.fr.main.TemplateWorkBook; +import com.fr.report.cell.TemplateCellElement; +import com.fr.report.elementcase.TemplateElementCase; +import com.fr.report.worksheet.WorkSheet; +import com.fr.web.core.Reportlet; +import com.fr.web.request.ReportletRequest; +import com.fr.workspace.simple.SimpleWork; + +import java.util.Map; + + +public class ChangeRowAndCol extends Reportlet { + public TemplateWorkBook createReport(ReportletRequest reportletrequest) { + // 定义最终需要返回的WorkBook对象 + TemplateWorkBook workbook = null; + String envPath = "D:\\FineReport_8.0\\WebReport\\WEB-INF"; + SimpleWork.checkIn(envPath); + WorkSheet newworksheet = new WorkSheet(); + String change = "0"; + try { + // 读取模板保存为WorkBook对象 + workbook = TemplateWorkBookIO.readTemplateWorkBook( + "\\doc\\Primary\\GroupReport\\Group.cpt"); + // 读取请求中的参数判断是否需要切换行列显示,0表示不切换,1表示切换 + if (reportletrequest.getParameter("change") != null) { + change = reportletrequest.getParameter("change").toString(); + } + if (change.equals("1")) { + // 获得单元格需要首先获得单元格所在的报表 + TemplateElementCase report = (TemplateElementCase) workbook + .getTemplateReport(0); + // 遍历单元格 + int col = 0, row = 0; + byte direction = 0; + java.util.Iterator it = report.cellIterator(); + while (it.hasNext()) { + TemplateCellElement cell = (TemplateCellElement) it.next(); + // 获取单元格的行号与列号并互换 + col = cell.getColumn(); + row = cell.getRow(); + cell.setColumn(row); + cell.setRow(col); + // 获取原单元格的扩展方向,0表示纵向扩展,1表示横向扩展 + direction = cell.getCellExpandAttr().getDirection(); + if (direction == 0) { + cell.getCellExpandAttr().setDirection((byte) 1); + } else if (direction == 1) { + cell.getCellExpandAttr().setDirection((byte) 0); + } + // 将改变后的单元格添加进新的WorkSheet中 + newworksheet.addCellElement(cell); + } + // 替换原sheet + workbook.setReport(0, newworksheet); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + SimpleWork.checkOut(); + } + return workbook; + } + + @Override + public void setParameterMap(Map arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void setTplPath(String arg0) { + // TODO Auto-generated method stub + + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/demo/CreateReportletDemo.java b/plugin-report-doc-demo/src/com/fr/demo/CreateReportletDemo.java new file mode 100644 index 0000000..54f08e4 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/demo/CreateReportletDemo.java @@ -0,0 +1,50 @@ +//创建程序报表 +package com.fr.demo; + +import com.fr.base.Style; +import com.fr.general.FRFont; +import com.fr.main.TemplateWorkBook; +import com.fr.main.impl.WorkBook; +import com.fr.report.cell.DefaultTemplateCellElement; +import com.fr.report.cell.TemplateCellElement; +import com.fr.report.worksheet.WorkSheet; +import com.fr.stable.unit.OLDPIX; +import com.fr.web.core.Reportlet; +import com.fr.web.request.ReportletRequest; + +import java.awt.Color; +import java.util.Map; + +public class CreateReportletDemo extends Reportlet { + public TemplateWorkBook createReport(ReportletRequest arg0) { + //创建一个WorkBook工作薄,在工作薄中插入一个WorkSheet + WorkBook workbook = new WorkBook(); + WorkSheet sheet1 = new WorkSheet(); + + TemplateCellElement CellA1 = new DefaultTemplateCellElement(0, 0, + "FineReport"); + Style style = Style.getInstance(); + + FRFont frfont = FRFont.getInstance("Arial", 1, 20.0F, Color.red); + style = style.deriveFRFont(frfont); + CellA1.setStyle(style); + sheet1.addCellElement(CellA1); + + sheet1.setColumnWidth(0, new OLDPIX(150.0F)); + sheet1.setRowHeight(1, new OLDPIX(35.0F)); + workbook.addReport(sheet1); + return workbook; + } + + @Override + public void setParameterMap(Map arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void setTplPath(String arg0) { + // TODO Auto-generated method stub + + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/demo/NewDateDemo.java b/plugin-report-doc-demo/src/com/fr/demo/NewDateDemo.java new file mode 100644 index 0000000..b38d639 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/demo/NewDateDemo.java @@ -0,0 +1,40 @@ +//��̬�޸����� +package com.fr.demo; + +import com.fr.data.ArrayTableDataDemo; +import com.fr.general.ModuleContext; +import com.fr.io.TemplateWorkBookIO; +import com.fr.main.TemplateWorkBook; +import com.fr.report.module.EngineModule; +import com.fr.web.core.Reportlet; +import com.fr.web.request.ReportletRequest; + +import java.util.Map; + +public class NewDateDemo extends Reportlet { + public TemplateWorkBook createReport(ReportletRequest reportletrequest) { + TemplateWorkBook workbook = null; + ModuleContext.startModule(EngineModule.class.getName()); + try { + // ����workbook���󣬽�ģ�屣��Ϊworkbook���󲢷��� + workbook = TemplateWorkBookIO.readTemplateWorkBook("1.cpt"); + ArrayTableDataDemo a = new ArrayTableDataDemo(); // ���ö���ij������ݼ����� + workbook.putTableData("ds2", a); // ��ģ�帳�µ����ݼ� + } catch (Exception e) { + e.getStackTrace(); + } + return workbook; + } + + @Override + public void setParameterMap(Map arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void setTplPath(String arg0) { + // TODO Auto-generated method stub + + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/demo/ReadFromDatabase.java b/plugin-report-doc-demo/src/com/fr/demo/ReadFromDatabase.java new file mode 100644 index 0000000..be146dc --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/demo/ReadFromDatabase.java @@ -0,0 +1,65 @@ +package com.fr.demo; + +import com.fr.base.FRContext; +import com.fr.main.TemplateWorkBook; +import com.fr.main.impl.WorkBook; +import com.fr.web.core.Reportlet; +import com.fr.web.request.ReportletRequest; +import com.fr.workspace.simple.SimpleWork; + +import java.io.InputStream; +import java.sql.Blob; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.Map; + + +public class ReadFromDatabase extends Reportlet { + public TemplateWorkBook createReport(ReportletRequest reportletRequest) { + // 定义报表运行环境,才能执行报表 + String envpath = "D:\\FineReport_8.0\\WebReport\\WEB-INF"; + SimpleWork.checkIn(envpath); + + WorkBook workbook = new WorkBook(); + String name = reportletRequest.getParameter("cptname").toString(); + try { + // 定义数据连接 + String driver = "com.mysql.jdbc.Driver"; + String url = "jdbc:mysql://112.124.109.239:3306/yourdatebase"; + String user = "yourusername"; + String pass = "yourpassword"; + Class.forName(driver); + Connection conn = DriverManager.getConnection(url, user, pass); + // 从数据库中读模板 + String sql = "select cpt from report where cptname = '" + name + + "'"; + Statement smt = conn.createStatement(); + ResultSet rs = smt.executeQuery(sql); + while (rs.next()) { + Blob blob = rs.getBlob(1); // 取第一列的值,即cpt列 + FRContext.getLogger().info(blob.toString()); + InputStream ins = blob.getBinaryStream(); + workbook.readStream(ins); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + SimpleWork.checkOut(); + } + return workbook; + } + + @Override + public void setParameterMap(Map arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void setTplPath(String arg0) { + // TODO Auto-generated method stub + + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/demo/SaveReportToDatabase.java b/plugin-report-doc-demo/src/com/fr/demo/SaveReportToDatabase.java new file mode 100644 index 0000000..0f04f30 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/demo/SaveReportToDatabase.java @@ -0,0 +1,50 @@ +package com.fr.demo; + +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 envpath = "D:\\FineReport_8.0\\WebReport\\WEB-INF"; + SimpleWork.checkIn(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(); + } finally { + SimpleWork.checkOut(); + } + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/demo/SetCellElementStyle.java b/plugin-report-doc-demo/src/com/fr/demo/SetCellElementStyle.java new file mode 100644 index 0000000..3b19637 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/demo/SetCellElementStyle.java @@ -0,0 +1,71 @@ +//单元格格式设置 +package com.fr.demo; + +import com.fr.base.Style; +import com.fr.base.background.ColorBackground; +import com.fr.general.FRFont; +import com.fr.main.TemplateWorkBook; +import com.fr.main.impl.WorkBook; +import com.fr.report.cell.DefaultTemplateCellElement; +import com.fr.report.cell.TemplateCellElement; +import com.fr.report.worksheet.WorkSheet; +import com.fr.stable.Constants; +import com.fr.stable.unit.OLDPIX; +import com.fr.web.core.Reportlet; +import com.fr.web.request.ReportletRequest; + +import java.awt.Color; +import java.awt.Font; +import java.util.Map; + + +public class SetCellElementStyle extends Reportlet { + public TemplateWorkBook createReport(ReportletRequest arg0) { + // 新建报表 + WorkBook workbook = new WorkBook(); + WorkSheet worksheet = new WorkSheet(); + // 新建一个单元格,位置为(1,1),列占2单元格,行占2单元格,文本值为 "FineReport" + TemplateCellElement cellElement = new DefaultTemplateCellElement(1, 1, + 2, 2, "FineReport"); + // 设置列宽为300px,设置行高为30px + worksheet.setColumnWidth(1, new OLDPIX(300)); + worksheet.setRowHeight(1, new OLDPIX(30)); + // 得到CellElement的样式,如果没有新建默认样式 + Style style = cellElement.getStyle(); + if (style == null) { + style = Style.getInstance(); + } + // 设置字体和前景的颜色 + FRFont frFont = FRFont.getInstance("Dialog", Font.BOLD, 16); + frFont = frFont.applyForeground(new Color(21, 76, 160)); + style = style.deriveFRFont(frFont); + // 设置背景 + ColorBackground background = ColorBackground.getInstance(new Color(255, + 255, 177)); + style = style.deriveBackground(background); + // 设置水平居中 + style = style.deriveHorizontalAlignment(Constants.CENTER); + // 设置边框 + style = style.deriveBorder(Constants.LINE_DASH, Color.red, + Constants.LINE_DOT, Color.gray, Constants.LINE_DASH_DOT, + Color.BLUE, Constants.LINE_DOUBLE, Color.CYAN); + // 改变单元格的样式 + cellElement.setStyle(style); + // 将单元格添加到报表中 + worksheet.addCellElement(cellElement); + workbook.addReport(worksheet); + return workbook; + } + + @Override + public void setParameterMap(Map arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void setTplPath(String arg0) { + // TODO Auto-generated method stub + + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/demo/SimpleReportletDemo.java b/plugin-report-doc-demo/src/com/fr/demo/SimpleReportletDemo.java new file mode 100644 index 0000000..b051b1a --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/demo/SimpleReportletDemo.java @@ -0,0 +1,42 @@ +//程序网络报表 +package com.fr.demo; + +import com.fr.io.TemplateWorkBookIO; +import com.fr.main.TemplateWorkBook; +import com.fr.web.core.Reportlet; +import com.fr.web.request.ReportletRequest; +import com.fr.workspace.simple.SimpleWork; + +import java.util.Map; + + +public class SimpleReportletDemo extends Reportlet { + public TemplateWorkBook createReport(ReportletRequest reportletrequest) { + String envPath = "D:\\FineReport_8.0\\WebReport\\WEB-INF"; + SimpleWork.checkIn(envPath); + // 新建一个WorkBook对象,用于保存最终返回的报表 + TemplateWorkBook WorkBook = null; + try { + // 读取模板,将模板保存为workbook对象并返回 + WorkBook = TemplateWorkBookIO.readTemplateWorkBook( + "\\doc\\Primary\\Parameter\\Parameter.cpt"); + } catch (Exception e) { + e.getStackTrace(); + } finally { + SimpleWork.checkOut(); + } + return WorkBook; + } + + @Override + public void setParameterMap(Map arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void setTplPath(String arg0) { + // TODO Auto-generated method stub + + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/demo/TotalVerifyJobDemo.java b/plugin-report-doc-demo/src/com/fr/demo/TotalVerifyJobDemo.java new file mode 100644 index 0000000..7a0247c --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/demo/TotalVerifyJobDemo.java @@ -0,0 +1,55 @@ +package com.fr.demo; + +import com.fr.base.Utils; +import com.fr.data.JobValue; +import com.fr.data.TotalVerifyJob; +import com.fr.data.Verifier; +import com.fr.script.Calculator; + +public class TotalVerifyJobDemo extends TotalVerifyJob { + /* + * type : 必须要定义此私有变量,变量名可改,表示校验状态 + * 0 表示校验成功,默认校验状态位为0 + * 1 表示校验失败 + */ + private int type = 0; + + @Override + protected void doTotalJob(Data data, Calculator calculator) + throws Exception { // @param data 以二维表排列的所有提交数据 + int sale, min; + JobValue salenum, minnum; + + int row = data.getRowCount(); // 获取一共多少行数据 + for (int i = 0; i < row; i++) { // 遍历每行,进行校验 + salenum = (JobValue) data.getValueAt(i, 0); + sale = Integer.parseInt(Utils.objectToString(salenum.getValue())); + + minnum = (JobValue) data.getValueAt(i, 1); + min = Integer.parseInt(Utils.objectToString(minnum.getValue())); + + if (sale < min) { //校验判断 + type = 1; + } + } + + } + + public String getMessage() { + // 根据校验状态是成功还是失败,设置对应的返回信息 + if (type == 0) { + return "恭喜你,校验成功"; + } else { + return "销量值不能小于最小基数"; + } + } + + public Verifier.Status getType() { + // 返回校验状态 + return Verifier.Status.parse(type); + } + + public String getJobType() { + return "totalVerifyJob"; + } +} diff --git a/plugin-report-doc-demo/src/com/fr/demo/URLParameterDemo.java b/plugin-report-doc-demo/src/com/fr/demo/URLParameterDemo.java new file mode 100644 index 0000000..c4dac4f --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/demo/URLParameterDemo.java @@ -0,0 +1,53 @@ +// 程序网络报表中获取request中的值 +package com.fr.demo; + +import com.fr.base.Parameter; +import com.fr.general.ModuleContext; +import com.fr.io.TemplateWorkBookIO; +import com.fr.main.TemplateWorkBook; +import com.fr.report.module.EngineModule; +import com.fr.web.core.Reportlet; +import com.fr.web.request.ReportletRequest; +import com.fr.workspace.simple.SimpleWork; + +import java.util.Map; + + +public class URLParameterDemo extends Reportlet { + public TemplateWorkBook createReport(ReportletRequest reportletRequest) { + + String envPath = "D:\\FineReport_8.0\\WebReport\\WEB-INF"; + SimpleWork.checkIn(envPath); + ModuleContext.startModule(EngineModule.class.getName()); + // 获取外部传来的参数 + TemplateWorkBook wbTpl = null; + String countryValue = reportletRequest.getParameter("地区").toString(); + try { + wbTpl = TemplateWorkBookIO.readTemplateWorkBook("\\doc\\Primary\\Parameter\\Parameter.cpt"); + // 提取报表参数组,由于原模板只有country一个参数,因此直接取index为0的参数,并将外部传入的值赋给该参数 + Parameter[] ps = wbTpl.getParameters(); + ps[0].setValue(countryValue); + // 原模板定义有参数界面,参数已经从外部获得,去掉参数页面 + // 若您想保留参数界面,则将模板设置为不延迟报表展示,再传入参数后直接根据参数值显示结果,否则还需要再次点击查询按钮 + wbTpl.getReportParameterAttr().setParameterUI(null); + } catch (Exception e) { + e.printStackTrace(); + } finally { + SimpleWork.checkOut(); + } + return wbTpl; + } + + @Override + public void setParameterMap(Map arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void setTplPath(String arg0) { + // TODO Auto-generated method stub + + } + +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/demo/VerifyJobDemo.java b/plugin-report-doc-demo/src/com/fr/demo/VerifyJobDemo.java new file mode 100644 index 0000000..77b0e40 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/demo/VerifyJobDemo.java @@ -0,0 +1,68 @@ +package com.fr.demo; + +import com.fr.base.Utils; +import com.fr.data.DefinedVerifyJob; +import com.fr.data.JobValue; +import com.fr.data.Verifier; +import com.fr.script.Calculator; + +public class VerifyJobDemo extends DefinedVerifyJob { + /* + * 必须要定义此私有变量,变量名可改,表示校验状态 + * 0 表示校验成功,默认校验状态位为0 + * 1 表示校验失败 + */ + private int type = 0; + + /** + * 当模板自定义事件增加的属性 名称与下面变量有对应时,则会自动赋值于此对应变量 + */ + private JobValue salenum; // JobValue对应单元格 + private int minnum; // 非单元格,则对应具体类型值 + + public void doJob(Calculator calculator) throws Exception { + /* + * 如这边提供一个简单的判断来模拟执行过程 + * 校验规则为销量需要大于等于最小基数:salenum >= minnum + * 校验不通过,提示“销量值不能小于最小基数” + */ + if (salenum != null) { + int sale = 0; + if (salenum.getValue() instanceof Integer) { //将单元格值转为整型以便用于比较 + sale = (Integer) salenum.getValue(); + + + } else { + sale = Integer.parseInt(Utils.objectToString(salenum.getValue())); + } + + if (sale < minnum) { //校验判断 + type = 1; + } + } else { + type = 1; + } + + } + + public String getMessage() { + // 根据校验状态是成功还是失败,设置对应的返回信息 + if (type == 0) { + return "恭喜你,校验成功"; + } else { + return "销量值不能小于最小基数"; + } + + } + + public Verifier.Status getType() { + // 返回校验状态 + return Verifier.Status.parse(type); + } + + public void doFinish(Calculator arg0) throws Exception { + // TODO Auto-generated method stub + + } + +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/function/BinaryImage.java b/plugin-report-doc-demo/src/com/fr/function/BinaryImage.java new file mode 100644 index 0000000..65ac6eb --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/function/BinaryImage.java @@ -0,0 +1,91 @@ +package com.fr.function; + +import com.fr.data.core.db.BinaryObject; +import com.fr.script.AbstractFunction; +import com.sun.jna.Library; +import com.sun.jna.Native; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +public class BinaryImage extends AbstractFunction { + + //加载dll,"E:\\bmp\\WltRS"是dll的文件完整路径,但不带后缀名,生成WltRS.class + static WltRS wltrs = (WltRS) Native.loadLibrary("E:\\bmp\\WltRS", WltRS.class); + + static int index = 0; + + public Object run(Object[] args) { + + int current = index; + + //args[0] 是 BinaryObject对象,取为bo + BinaryObject bo = (BinaryObject) args[0]; + + //将bo转换为.wlt文件,并保存在位置E:\bmp\;本地方法GetBmp的第一个参数是wlt文件的路径 + getFile(bo.getBytes(), "E:\\bmp\\", current + ".wlt"); + + //读取.wlt为文件 + File file = new File("E:\\bmp\\" + current + ".wlt"); + + //调用本地方法,在相同路径下生产.bmp + wltrs.GetBmp("E:\\bmp\\" + current + ".wlt", 1); + + //读取并返回图片 + File imagefile = new File("E:\\bmp\\" + current + ".bmp"); + BufferedImage buffer = null; + try { + buffer = ImageIO.read(imagefile); + } catch (IOException e) { + e.printStackTrace(); + } + + index = (++index) % 300; + return buffer; + } + + + // byte[]转换为file的方法 + public static void getFile(byte[] bfile, String filePath, String fileName) { + BufferedOutputStream bos = null; + FileOutputStream fos = null; + File file = null; + try { + File dir = new File(filePath); + if (!dir.exists() && dir.isDirectory()) {//判断文件目录是否存在 + dir.mkdirs(); + } + file = new File(filePath + "\\" + fileName); + fos = new FileOutputStream(file); + bos = new BufferedOutputStream(fos); + bos.write(bfile); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (bos != null) { + try { + bos.close(); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + if (fos != null) { + try { + fos.close(); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + } + } +} + +//用jna调用本地方法的必须步骤,具体含义不明 +interface WltRS extends Library { + //定义要调用的本地方法 + void GetBmp(String str, int i); +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/function/CellSum.java b/plugin-report-doc-demo/src/com/fr/function/CellSum.java new file mode 100644 index 0000000..008009b --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/function/CellSum.java @@ -0,0 +1,15 @@ +// 自定义函数中获取公式所在单元格 +package com.fr.function; + +import com.fr.base.Utils; +import com.fr.script.AbstractFunction; + +public class CellSum extends AbstractFunction { + public Object run(Object[] args) { + String sum = Utils.objectToNumber(new SUM().run(args), false) + .toString(); // 直接调用FR内部的SUM方法 + String result = "所在单元格为:" + this.getCalculator().getCurrentColumnRow() + + ";总和为:" + sum; // 获取当前单元格拼出最终结果 + return result; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/function/ConnectSAPServer.java b/plugin-report-doc-demo/src/com/fr/function/ConnectSAPServer.java new file mode 100644 index 0000000..e97c7b7 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/function/ConnectSAPServer.java @@ -0,0 +1,58 @@ +package com.fr.function; + +import com.sap.conn.jco.JCoDestination; +import com.sap.conn.jco.JCoDestinationManager; +import com.sap.conn.jco.JCoException; +import com.sap.conn.jco.ext.DestinationDataProvider; + +import java.io.File; +import java.io.FileOutputStream; +import java.util.Properties; + +public class ConnectSAPServer { + static String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL"; + + static { + Properties connectProperties = new Properties(); + connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, + "SAP服务器IP地址"); + connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "系统编号"); + connectProperties + .setProperty(DestinationDataProvider.JCO_CLIENT, "客户端编号(SAP中的,和客户端没关系)"); + connectProperties.setProperty(DestinationDataProvider.JCO_USER, + "用户名"); + connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, + "密码"); + connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "ZH"); + connectProperties.setProperty( + DestinationDataProvider.JCO_POOL_CAPACITY, "10"); + connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, + "10"); + createDataFile(ABAP_AS_POOLED, "jcoDestination", connectProperties); + } + + static void createDataFile(String name, String suffix, Properties properties) { + File cfg = new File(name + "." + suffix); + if (!cfg.exists()) { + try { + FileOutputStream fos = new FileOutputStream(cfg, false); + properties.store(fos, "SAP连接配置文件"); + fos.close(); + } catch (Exception e) { + throw new RuntimeException( + "Unable to create the destination file " + + cfg.getName(), e); + } + } + } + + public static JCoDestination Connect() { + JCoDestination destination = null; + try { + destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED); + } catch (JCoException e) { + e.getCause(); + } + return destination; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/function/FlagHtmlColor.java b/plugin-report-doc-demo/src/com/fr/function/FlagHtmlColor.java new file mode 100644 index 0000000..76da40b --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/function/FlagHtmlColor.java @@ -0,0 +1,67 @@ +package com.fr.function; +import com.fr.script.AbstractFunction; +import com.fr.stable.Primitive; +public class FlagHtmlColor extends AbstractFunction { + public Object run(Object[] args) { + String txt=""; + String color=""; + String flag=""; + if(null==args||args.length==0){ + return Primitive.ERROR_NAME; + }else if(args.length==1){ + txt=args[0].toString(); + color="red"; + flag="N"; + }else if(args.length==2){ + txt=args[0].toString(); + color=args[1].toString(); + flag="N"; + }else{ + txt=args[0].toString(); + color=args[1].toString(); + flag=args[2].toString(); + } + String result=getHtmlStr(txt, color, flag); + return result; + } + public String getHtmlStr(String txt,String color,String flag){ + String starthtml=""; + String endhtml=""; + StringBuffer sb=new StringBuffer(); + int len=txt.length(); + if("N".equalsIgnoreCase(flag)){//数字 + for(int i=0;i='0'&&c<='9'){ + String str=starthtml+c+endhtml; + sb.append(str); + }else{ + sb.append(c); + } + } + }else if("C".equalsIgnoreCase(flag)){//字母 + for(int i=0;i='a'&&c<='z')||(c>='A'&&c<='Z')){ + String str=starthtml+c+endhtml; + sb.append(str); + }else{ + sb.append(c); + } + } + } else if("Z".equalsIgnoreCase(flag)){//中文 + for(int i=0;i= 0x4E00 && c <= 0x9FA5){ + String str=starthtml+c+endhtml; + sb.append(str); + }else{ + sb.append(c); + } + } + }else{ + return txt; + } + return sb.toString(); + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/function/GETIP.java b/plugin-report-doc-demo/src/com/fr/function/GETIP.java new file mode 100644 index 0000000..f247c53 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/function/GETIP.java @@ -0,0 +1,23 @@ +package com.fr.function; + +import com.fr.script.AbstractFunction; + +import java.net.InetAddress; + +public class GETIP extends AbstractFunction { + + @Override + public Object run(Object[] objects) { + try { + InetAddress ia = InetAddress.getLocalHost(); + return ia.getHostAddress(); + } catch (Exception e) { + return e.getMessage(); + + } + } + + public static InetAddress getInetAddress() { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/function/JFreeToChart.java b/plugin-report-doc-demo/src/com/fr/function/JFreeToChart.java new file mode 100644 index 0000000..6ee0a16 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/function/JFreeToChart.java @@ -0,0 +1,86 @@ +// 引入JFreeChart图表 +package com.fr.function; + +import com.fr.script.AbstractFunction; +import org.jfree.chart.ChartFactory; +import org.jfree.chart.JFreeChart; +import org.jfree.chart.axis.CategoryAxis; +import org.jfree.chart.axis.CategoryLabelPositions; +import org.jfree.chart.axis.NumberAxis; +import org.jfree.chart.plot.CategoryPlot; +import org.jfree.chart.plot.DatasetRenderingOrder; +import org.jfree.chart.plot.PlotOrientation; +import org.jfree.chart.renderer.category.LineAndShapeRenderer; +import org.jfree.chart.title.TextTitle; +import org.jfree.data.DataUtilities; +import org.jfree.data.DefaultKeyedValues; +import org.jfree.data.category.CategoryDataset; +import org.jfree.data.general.DatasetUtilities; +import org.jfree.util.SortOrder; + +import java.awt.Color; +import java.awt.image.BufferedImage; +import java.text.NumberFormat; + +public class JFreeToChart extends AbstractFunction { + private String x, y; + + public Object run(Object[] args) { + this.x = args[0].toString(); + this.y = args[1].toString(); + BufferedImage image = createImage(600, 400); + return image; + } + + private BufferedImage createImage(int width, int height) { + CategoryDataset acategorydataset[] = createDatasets(); + JFreeChart jfreechart = createChart(acategorydataset); + return jfreechart.createBufferedImage(width, height); + } + + private CategoryDataset[] createDatasets() { + DefaultKeyedValues defaultkeyedvalues = new DefaultKeyedValues(); + String[] xValue = this.x.split(","); + String[] yValue = this.y.split(","); + for (int i = 0; i < xValue.length; i++) { + defaultkeyedvalues.addValue(xValue[i], Double.valueOf(yValue[i])); + } + defaultkeyedvalues.sortByValues(SortOrder.DESCENDING); + org.jfree.data.KeyedValues keyedvalues = DataUtilities + .getCumulativePercentages(defaultkeyedvalues); + CategoryDataset categorydataset = DatasetUtilities + .createCategoryDataset("Languages", defaultkeyedvalues); + CategoryDataset categorydataset1 = DatasetUtilities + .createCategoryDataset("Cumulative", keyedvalues); + return (new CategoryDataset[]{categorydataset, categorydataset1}); + + } + + private JFreeChart createChart(CategoryDataset acategorydataset[]) { + JFreeChart jfreechart = ChartFactory.createBarChart( + "Freshmeat Software Projects", "Language", "Projects", + acategorydataset[0], PlotOrientation.VERTICAL, true, true, + false); + jfreechart.addSubtitle(new TextTitle("By Programming Language")); + jfreechart.addSubtitle(new TextTitle("As at 5 March 2003")); + jfreechart.setBackgroundPaint(Color.white); + CategoryPlot categoryplot = (CategoryPlot) jfreechart.getPlot(); + categoryplot.setBackgroundPaint(Color.lightGray); + categoryplot.setRangeGridlinePaint(Color.white); + CategoryAxis categoryaxis = categoryplot.getDomainAxis(); + categoryaxis.setLowerMargin(0.02D); + categoryaxis.setUpperMargin(0.02D); + categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90); + NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis(); + numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); + LineAndShapeRenderer lineandshaperenderer = new LineAndShapeRenderer(); + NumberAxis numberaxis1 = new NumberAxis("Percent"); + numberaxis1.setNumberFormatOverride(NumberFormat.getPercentInstance()); + categoryplot.setRangeAxis(1, numberaxis1); + categoryplot.setDataset(1, acategorydataset[1]); + categoryplot.setRenderer(1, lineandshaperenderer); + categoryplot.mapDatasetToRangeAxis(1, 1); + categoryplot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD); + return jfreechart; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/function/Lunar.java b/plugin-report-doc-demo/src/com/fr/function/Lunar.java new file mode 100644 index 0000000..8f003c2 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/function/Lunar.java @@ -0,0 +1,15 @@ +//自定义函数把阳历转换成阴历 +package com.fr.function; + +import com.fr.script.AbstractFunction; + +public class Lunar extends AbstractFunction { + public Object run(Object[] args) { + String result = ""; + int y = Integer.parseInt(args[0].toString()); + int m = Integer.parseInt(args[1].toString()); + int d = Integer.parseInt(args[2].toString()); + result = SolarToLunar.today(y, m, d); + return result; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/function/ParamSAPDataTest.java b/plugin-report-doc-demo/src/com/fr/function/ParamSAPDataTest.java new file mode 100644 index 0000000..e98088d --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/function/ParamSAPDataTest.java @@ -0,0 +1,40 @@ +package com.fr.function; + +import com.fr.data.AbstractTableData; +import com.sap.conn.jco.JCoDestination; +import com.sap.conn.jco.JCoException; + +public class ParamSAPDataTest extends AbstractTableData { + private String[] columnNames; + private int columnNum; + private String[][] rowData; + private static JCoDestination jCoDestination; + + public ParamSAPDataTest() { + throw new Error("Unresolved compilation problems: \n\tThe declared package \"com.fr.data\" does not match the expected package \"com.fr.function\"\n\tThe import com.sap cannot be resolved\n\tThe import com.sap cannot be resolved\n\tThe import com.sap cannot be resolved\n\tThe import com.sap cannot be resolved\n\tAbstractTableData cannot be resolved to a type\n\tJCoDestination cannot be resolved to a type\n\tparameters cannot be resolved or is not a field\n\tThe method init() from the type ParamSAPDataTest refers to the missing type JCoException\n\tJCoException cannot be resolved to a type\n\tThe method init() from the type ParamSAPDataTest refers to the missing type JCoException\n\tJCoException cannot be resolved to a type\n\tJCoException cannot be resolved to a type\n\tJCoDestination cannot be resolved to a type\n\tThe method Connect() from the type ConnectSAPServer refers to the missing type JCoDestination\n\tJCoFunction cannot be resolved to a type\n\tJCoDestination cannot be resolved to a type\n\tparameters cannot be resolved or is not a field\n\tparameters cannot be resolved or is not a field\n\tJCoDestination cannot be resolved to a type\n\tJCoTable cannot be resolved to a type\n\tAbstractTableData cannot be resolved to a type\n"); + } + + public int getColumnCount() { + throw new Error("Unresolved compilation problem: \n"); + } + + public String getColumnName(int columnIndex) { + throw new Error("Unresolved compilation problem: \n"); + } + + public int getRowCount() { + throw new Error("Unresolved compilation problems: \n\tThe method init() from the type ParamSAPDataTest refers to the missing type JCoException\n\tJCoException cannot be resolved to a type\n"); + } + + public Object getValueAt(int rowIndex, int columnIndex) { + throw new Error("Unresolved compilation problems: \n\tThe method init() from the type ParamSAPDataTest refers to the missing type JCoException\n\tJCoException cannot be resolved to a type\n"); + } + + public void init() throws JCoException { + throw new Error("Unresolved compilation problems: \n\tJCoException cannot be resolved to a type\n\tJCoDestination cannot be resolved to a type\n\tThe method Connect() from the type ConnectSAPServer refers to the missing type JCoDestination\n\tJCoFunction cannot be resolved to a type\n\tJCoDestination cannot be resolved to a type\n\tparameters cannot be resolved or is not a field\n\tparameters cannot be resolved or is not a field\n\tJCoDestination cannot be resolved to a type\n\tJCoTable cannot be resolved to a type\n"); + } + + public void release() throws Exception { + throw new Error("Unresolved compilation problem: \n\tAbstractTableData cannot be resolved to a type\n"); + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/function/ReportCheck.java b/plugin-report-doc-demo/src/com/fr/function/ReportCheck.java new file mode 100644 index 0000000..5ea8448 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/function/ReportCheck.java @@ -0,0 +1,105 @@ +// 自定义函数实现表间校验 +package com.fr.function; + +import com.fr.base.ResultFormula; +import com.fr.io.TemplateWorkBookIO; +import com.fr.json.JSONArray; +import com.fr.json.JSONObject; +import com.fr.main.impl.WorkBook; +import com.fr.main.workbook.ResultWorkBook; +import com.fr.report.cell.CellElement; +import com.fr.report.report.ResultReport; +import com.fr.script.AbstractFunction; +import com.fr.stable.WriteActor; +import com.fr.write.cal.WB; + +import java.util.HashMap; + +public class ReportCheck extends AbstractFunction { + private static HashMap wMap = new HashMap(); + + public Object run(Object[] args) { + // 获取公式中的参数 + String cptname = args[0].toString(); // 获取报表名称 + int colnumber = Integer.parseInt(args[2].toString()); // 所取单元格所在列 + int rownumber = Integer.parseInt(args[3].toString()); // 所取单元格所在行 + // 定义返回的值 + Object returnValue = null; + // 定义报表运行环境,才能运行读取的报表 + try { + ResultWorkBook rworkbook = null; + // 读取模板 + WorkBook workbook = (WorkBook) TemplateWorkBookIO + .readTemplateWorkBook(cptname); + // 获取需要传递给报表的参数名与参数值,格式如[{"name":para1name,"value":para1value},{"name":para2name,"value":para2value},......] + JSONArray parasArray = new JSONArray(args[1].toString()); + // 需要判断是否是5秒内执行过的 + // 取出保存的resultworkbook; + Object tempWObj = wMap.get(cptname + parasArray.toString()); + if (tempWObj != null) { + // 取出hashmap里面保存的TpObj; + TpObj curTpObj = (TpObj) tempWObj; + + if ((System.currentTimeMillis() - curTpObj.getExeTime()) < 8000) { + rworkbook = curTpObj.getRworkbook(); + } else { + wMap.remove(cptname + parasArray.toString()); + } + } + // 如果没有设置,需要生成 + if (rworkbook == null) { + JSONObject jo = new JSONObject(); + // 定义报表执行时使用的paraMap,保存参数名与值 + java.util.Map parameterMap = new java.util.HashMap(); + if (parasArray.length() > 0) { + for (int i = 0; i < parasArray.length(); i++) { + jo = parasArray.getJSONObject(i); + parameterMap.put(jo.get("name"), jo.get("value")); + } + } + // 执行报表 + rworkbook = workbook.execute(parameterMap, new WriteActor()); + // 保存下来 + wMap.put(cptname + parasArray.toString(), new TpObj(rworkbook, + System.currentTimeMillis())); + } + // 获取报表结果中对应Cell的值 + ResultReport report = rworkbook.getResultReport(0); + CellElement cellElement = ((WB) report).getCellElement(colnumber, rownumber); + returnValue = cellElement.getValue().toString(); + if (cellElement.getValue() instanceof ResultFormula) { + returnValue = ((ResultFormula) cellElement.getValue()).getResult().toString(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return returnValue; + } + + class TpObj { + private ResultWorkBook rworkbook = null; + private long exeTime = System.currentTimeMillis(); + + public TpObj(ResultWorkBook rworkbook, long exeTime) { + this.setRworkbook(rworkbook); + this.setExeTime(exeTime); + } + + public ResultWorkBook getRworkbook() { + return rworkbook; + } + + public void setRworkbook(ResultWorkBook rworkbook) { + this.rworkbook = rworkbook; + } + + public long getExeTime() { + return exeTime; + } + + public void setExeTime(long exeTime) { + this.exeTime = exeTime; + } + } + +} diff --git a/plugin-report-doc-demo/src/com/fr/function/SolarToLunar.java b/plugin-report-doc-demo/src/com/fr/function/SolarToLunar.java new file mode 100644 index 0000000..c70a634 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/function/SolarToLunar.java @@ -0,0 +1,381 @@ +//自定义函数把阳历转换成阴历 +package com.fr.function; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.GregorianCalendar; + +public class SolarToLunar { + final private static long[] lunarInfo = new long[]{0x04bd8, 0x04ae0, + 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, + 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, + 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, + 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, + 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, + 0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, + 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, + 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, + 0x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, + 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, + 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, + 0x195a6, 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, + 0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, + 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, + 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, + 0x025d0, 0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, + 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, + 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, + 0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, + 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, + 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, + 0x0ada0}; + + final private static int[] year20 = new int[]{1, 4, 1, 2, 1, 2, 1, 1, 2, + 1, 2, 1}; + + final private static int[] year19 = new int[]{0, 3, 0, 1, 0, 1, 0, 0, 1, + 0, 1, 0}; + + final private static int[] year2000 = new int[]{0, 3, 1, 2, 1, 2, 1, 1, + 2, 1, 2, 1}; + + public final static String[] nStr1 = new String[]{"", "正", "二", "三", "四", + "五", "六", "七", "八", "九", "十", "十一", "十二"}; + + private final static String[] Gan = new String[]{"甲", "乙", "丙", "丁", "戊", + "己", "庚", "辛", "壬", "癸"}; + + private final static String[] Zhi = new String[]{"子", "丑", "寅", "卯", "辰", + "巳", "午", "未", "申", "酉", "戌", "亥"}; + + private final static String[] Animals = new String[]{"鼠", "牛", "虎", "兔", + "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"}; + + private final static String[] solarTerm = new String[]{"小寒", "大寒", "立春", + "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", + "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至"}; + + private final static String[] sFtv = new String[]{"0101*元旦", "0214 情人节", + "0308 妇女节", "0312 植树节", "0315 消费者权益日", "0401 愚人节", "0501 劳动节", + "0504 青年节", "0512 护士节", "0601 儿童节", "0701 建党节", "0801 建军节", + "0808 父亲节", "0909 毛泽东逝世纪念", "0910 教师节", "0928 孔子诞辰", "1001*国庆节", + "1006 老人节", "1024 联合国日", "1112 孙中山诞辰", "1220 澳门回归", "1225 圣诞节", + "1226 毛泽东诞辰"}; + + private final static String[] lFtv = new String[]{"0101*农历春节", + "0115 元宵节", "0505 端午节", "0707 七夕情人节", "0815 中秋节", "0909 重阳节", + "1208 腊八节", "1224 小年", "0100*除夕"}; + + /** + * 传回农历 y年的总天数 + * + * @param y + * @return + */ + final private static int lYearDays(int y) { + int i, sum = 348; + for (i = 0x8000; i > 0x8; i >>= 1) { + if ((lunarInfo[y - 1900] & i) != 0) + sum += 1; + } + return (sum + leapDays(y)); + } + + /** + * 传回农历 y年闰月的天数 + * + * @param y + * @return + */ + final private static int leapDays(int y) { + if (leapMonth(y) != 0) { + if ((lunarInfo[y - 1900] & 0x10000) != 0) + return 30; + else + return 29; + } else + return 0; + } + + /** + * 传回农历 y年闰哪个月 1-12 , 没闰传回 0 + * + * @param y + * @return + */ + final private static int leapMonth(int y) { + return (int) (lunarInfo[y - 1900] & 0xf); + } + + /** + * 传回农历 y年m月的总天数 + * + * @param y + * @param m + * @return + */ + final private static int monthDays(int y, int m) { + if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0) + return 29; + else + return 30; + } + + /** + * 传回农历 y年的生肖 + * + * @param y + * @return + */ + final public static String AnimalsYear(int y) { + return Animals[(y - 4) % 12]; + } + + /** + * 传入 月日的offset 传回干支,0=甲子 + * + * @param num + * @return + */ + final private static String cyclicalm(int num) { + return (Gan[num % 10] + Zhi[num % 12]); + } + + /** + * 传入 offset 传回干支, 0=甲子 + * + * @param y + * @return + */ + final public static String cyclical(int y) { + int num = y - 1900 + 36; + return (cyclicalm(num)); + } + + /** + * 传出农历.year0 .month1 .day2 .yearCyl3 .monCyl4 .dayCyl5 .isLeap6 + * + * @param y + * @param m + * @return + */ + final private long[] Lunar(int y, int m) { + long[] nongDate = new long[7]; + int i = 0, temp = 0, leap = 0; + Date baseDate = new GregorianCalendar(1900 + 1900, 1, 31).getTime(); + Date objDate = new GregorianCalendar(y + 1900, m, 1).getTime(); + long offset = (objDate.getTime() - baseDate.getTime()) / 86400000L; + if (y < 2000) + offset += year19[m - 1]; + if (y > 2000) + offset += year20[m - 1]; + if (y == 2000) + offset += year2000[m - 1]; + nongDate[5] = offset + 40; + nongDate[4] = 14; + + for (i = 1900; i < 2050 && offset > 0; i++) { + temp = lYearDays(i); + offset -= temp; + nongDate[4] += 12; + } + if (offset < 0) { + offset += temp; + i--; + nongDate[4] -= 12; + } + nongDate[0] = i; + nongDate[3] = i - 1864; + leap = leapMonth(i); // 闰哪个月 + nongDate[6] = 0; + + for (i = 1; i < 13 && offset > 0; i++) { + // 闰月 + if (leap > 0 && i == (leap + 1) && nongDate[6] == 0) { + --i; + nongDate[6] = 1; + temp = leapDays((int) nongDate[0]); + } else { + temp = monthDays((int) nongDate[0], i); + } + + // 解除闰月 + if (nongDate[6] == 1 && i == (leap + 1)) + nongDate[6] = 0; + offset -= temp; + if (nongDate[6] == 0) + nongDate[4]++; + } + + if (offset == 0 && leap > 0 && i == leap + 1) { + if (nongDate[6] == 1) { + nongDate[6] = 0; + } else { + nongDate[6] = 1; + --i; + --nongDate[4]; + } + } + if (offset < 0) { + offset += temp; + --i; + --nongDate[4]; + } + nongDate[1] = i; + nongDate[2] = offset + 1; + return nongDate; + } + + /** + * 传出y年m月d日对应的农历.year0 .month1 .day2 .yearCyl3 .monCyl4 .dayCyl5 .isLeap6 + * + * @param y + * @param m + * @param d + * @return + */ + final public static long[] calElement(int y, int m, int d) { + long[] nongDate = new long[7]; + int i = 0, temp = 0, leap = 0; + Date baseDate = new GregorianCalendar(0 + 1900, 0, 31).getTime(); + Date objDate = new GregorianCalendar(y, m - 1, d).getTime(); + long offset = (objDate.getTime() - baseDate.getTime()) / 86400000L; + nongDate[5] = offset + 40; + nongDate[4] = 14; + + for (i = 1900; i < 2050 && offset > 0; i++) { + temp = lYearDays(i); + offset -= temp; + nongDate[4] += 12; + } + if (offset < 0) { + offset += temp; + i--; + nongDate[4] -= 12; + } + nongDate[0] = i; + nongDate[3] = i - 1864; + leap = leapMonth(i); // 闰哪个月 + nongDate[6] = 0; + + for (i = 1; i < 13 && offset > 0; i++) { + // 闰月 + if (leap > 0 && i == (leap + 1) && nongDate[6] == 0) { + --i; + nongDate[6] = 1; + temp = leapDays((int) nongDate[0]); + } else { + temp = monthDays((int) nongDate[0], i); + } + + // 解除闰月 + if (nongDate[6] == 1 && i == (leap + 1)) + nongDate[6] = 0; + offset -= temp; + if (nongDate[6] == 0) + nongDate[4]++; + } + + if (offset == 0 && leap > 0 && i == leap + 1) { + if (nongDate[6] == 1) { + nongDate[6] = 0; + } else { + nongDate[6] = 1; + --i; + --nongDate[4]; + } + } + if (offset < 0) { + offset += temp; + --i; + --nongDate[4]; + } + nongDate[1] = i; + nongDate[2] = offset + 1; + return nongDate; + } + + public final static String getChinaDate(int day) { + String a = ""; + if (day == 10) + return "初十"; + if (day == 20) + return "二十"; + if (day == 30) + return "三十"; + int two = (int) ((day) / 10); + if (two == 0) + a = "初"; + if (two == 1) + a = "十"; + if (two == 2) + a = "廿"; + if (two == 3) + a = "三"; + int one = (int) (day % 10); + switch (one) { + case 1: + a += "一"; + break; + case 2: + a += "二"; + break; + case 3: + a += "三"; + break; + case 4: + a += "四"; + break; + case 5: + a += "五"; + break; + case 6: + a += "六"; + break; + case 7: + a += "七"; + break; + case 8: + a += "八"; + break; + case 9: + a += "九"; + break; + } + return a; + } + + public static String today(int y, int m, int d) { + int year = y; + int month = m; + int date = d; + long[] l = calElement(year, month, date); + StringBuffer sToday = new StringBuffer(); + try { + + sToday.append(" 农历"); + sToday.append(cyclical(year)); + sToday.append('('); + sToday.append(AnimalsYear(year)); + sToday.append(")年"); + sToday.append(nStr1[(int) l[1]]); + sToday.append("月"); + sToday.append(getChinaDate((int) (l[2]))); + return sToday.toString(); + } finally { + sToday = null; + } + } + + private static SimpleDateFormat sdf = new SimpleDateFormat( + "yyyy年M月d日 EEEEE"); + + /** + * 农历日历工具使用演示 + * + * @param args + */ + public static void main(String[] args) { + System.out.println(today(1988, 10, 27)); + } +} diff --git a/plugin-report-doc-demo/src/com/fr/function/StringCat.java b/plugin-report-doc-demo/src/com/fr/function/StringCat.java new file mode 100644 index 0000000..8db60a7 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/function/StringCat.java @@ -0,0 +1,19 @@ +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(); + } +} diff --git a/plugin-report-doc-demo/src/com/fr/function/StringImage.java b/plugin-report-doc-demo/src/com/fr/function/StringImage.java new file mode 100644 index 0000000..5b01967 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/function/StringImage.java @@ -0,0 +1,73 @@ +//图片在下文字在上 +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(); + + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/function/SubSection.java b/plugin-report-doc-demo/src/com/fr/function/SubSection.java new file mode 100644 index 0000000..a502c9c --- /dev/null +++ b/plugin-report-doc-demo/src/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; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/function/Ubm.java b/plugin-report-doc-demo/src/com/fr/function/Ubm.java new file mode 100644 index 0000000..3501fb7 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/function/Ubm.java @@ -0,0 +1,25 @@ +// 自定义函数Unicode编码转化为中文 +package com.fr.function; + +import com.fr.script.AbstractFunction; + +public class Ubm extends AbstractFunction { + public Object run(Object[] args) { + String str = args[0].toString(); + String st = ""; + StringBuffer buffer = new StringBuffer(); + while (str.length() > 0) { + if (str.startsWith("%u")) { + st = str.substring(2, 6); + char ch = (char) Integer.parseInt(String.valueOf(st), 16); + buffer.append(new Character(ch).toString()); + str = str.substring(6); + } else { + st = str.substring(0, str.indexOf("%u")); + buffer.append(st); + str = str.substring(st.length()); + } + } + return buffer.toString(); + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/function/Upc.java b/plugin-report-doc-demo/src/com/fr/function/Upc.java new file mode 100644 index 0000000..b922952 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/function/Upc.java @@ -0,0 +1,35 @@ +// 自定义函数生成UPC条形码 +package com.fr.function; + +import com.fr.script.AbstractFunction; +import org.krysalis.barcode4j.impl.upcean.UPCABean; +import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider; +import org.krysalis.barcode4j.tools.UnitConv; + +import java.awt.image.BufferedImage; + +public class Upc extends AbstractFunction { + public Object run(Object[] args) { + if (args == null || args.length < 1) { + return "参数不对,必须有一个参数"; + } + try { + // 创建一个UPC编码生成器 + UPCABean bean = new UPCABean(); + // 设置条形码高度,BufferedImage.TYPE_BYTE_BINARY代表常量值12,可直接使用常量值 + final int dpi = Integer.parseInt(args[1].toString()); + bean.setModuleWidth(UnitConv.in2mm(1.0f / dpi)); + bean.doQuietZone(false); + BitmapCanvasProvider canvas = new BitmapCanvasProvider(dpi, + BufferedImage.TYPE_BYTE_BINARY, false, 0); + // 创建条形码 + bean.generateBarcode(canvas, String.valueOf(args[0])); + canvas.finish(); + // 返回图片显示 + return canvas.getBufferedImage(); + } catch (Exception e) { + e.printStackTrace(); + } + return args[0]; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/function/Widget2Image.java b/plugin-report-doc-demo/src/com/fr/function/Widget2Image.java new file mode 100644 index 0000000..b809ce6 --- /dev/null +++ b/plugin-report-doc-demo/src/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; + } + } + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/io/ExcelToCpt.java b/plugin-report-doc-demo/src/com/fr/io/ExcelToCpt.java new file mode 100644 index 0000000..c8af6e1 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/io/ExcelToCpt.java @@ -0,0 +1,25 @@ +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(); + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/io/ExcelToCptpage.java b/plugin-report-doc-demo/src/com/fr/io/ExcelToCptpage.java new file mode 100644 index 0000000..eb3a391 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/io/ExcelToCptpage.java @@ -0,0 +1,46 @@ +package com.fr.io; + +import com.fr.io.importer.ExcelReportImporter; +import com.fr.main.TemplateWorkBook; +import com.fr.main.impl.WorkBook; +import com.fr.report.cell.CellElement; +import com.fr.report.cell.cellattr.CellPageAttr; +import com.fr.report.elementcase.AbstractElementCase; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.OutputStream; +import java.util.Iterator; + +public class ExcelToCptpage { + public static void main(String[] args) throws Exception { + File excelFile = new File("D:\\API.xls"); // 获取EXCEL文件 + FileInputStream a = new FileInputStream(excelFile); + TemplateWorkBook tpl = new ExcelReportImporter().generateWorkBookByStream(a); + Iterator it = tpl.getReport(0).iteratorOfElementCase(); + + while (it.hasNext()) { + AbstractElementCase ec = (AbstractElementCase) it.next(); + Iterator cellIt = ec.cellIterator(); + while (cellIt.hasNext()) { + CellElement obj = (CellElement) cellIt.next(); + if (matchCell(obj, Integer.parseInt("1"), Integer.parseInt("0"))) { + CellPageAttr cpa = new CellPageAttr(); + cpa.setPageAfterRow(true); + obj.setCellPageAttr(cpa); + } + + } + } + OutputStream outputStream = new FileOutputStream(new File("D:\\abc.cpt")); // 转换成cpt模板 + ((WorkBook) tpl).export(outputStream); + } + + + private static boolean matchCell(CellElement cell, int row, int col) { + if (cell.getRow() == row && cell.getColumn() == col) + return true; + return false; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/io/ExcuteDemo.java b/plugin-report-doc-demo/src/com/fr/io/ExcuteDemo.java new file mode 100644 index 0000000..d77fa1c --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/io/ExcuteDemo.java @@ -0,0 +1,66 @@ +package com.fr.io; + +import com.fr.config.activator.BaseDBActivator; +import com.fr.config.activator.ConfigurationActivator; +import com.fr.data.impl.config.activator.RestrictionActivator; +import com.fr.io.exporter.ExcelExporter; +import com.fr.main.TemplateWorkBook; +import com.fr.main.workbook.ResultWorkBook; +import com.fr.module.Module; +import com.fr.module.tool.ActivatorToolBox; +import com.fr.report.ReportActivator; +import com.fr.report.module.ReportBaseActivator; +import com.fr.serialization.SerializationActivator; +import com.fr.stable.WriteActor; +import com.fr.startup.WorkspaceRegister; +import com.fr.store.StateServerActivator; +import com.fr.workspace.engine.WorkspaceActivator; +import com.fr.workspace.server.ServerWorkspaceRegister; +import com.fr.workspace.simple.SimpleWork; + +import java.io.File; +import java.io.FileOutputStream; + + +public class ExcuteDemo { + public static void main(String[] args) { + try { + // 首先需要定义执行所在的环境,这样才能正确读取数据库信息 + // 定义报表运行环境,用于执行报表 + Module module = ActivatorToolBox.simpleLink( + new WorkspaceActivator(), + new BaseDBActivator(), + new ConfigurationActivator(), + new StateServerActivator(), + new ReportBaseActivator(), + new RestrictionActivator(), + new ReportActivator(), + new WorkspaceRegister(), + new ServerWorkspaceRegister(), + new SerializationActivator()); + String envpath = "D:\\FineReport_10\\webapps\\webroot\\WEB-INF";//工程路径 + SimpleWork.checkIn(envpath); + module.start(); + // 读取模板 + TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook("\\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(); + } finally { + SimpleWork.checkOut(); + } + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/io/ExportApi.java b/plugin-report-doc-demo/src/com/fr/io/ExportApi.java new file mode 100644 index 0000000..8786733 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/io/ExportApi.java @@ -0,0 +1,116 @@ +package com.fr.io; + +import com.fr.base.Parameter; +import com.fr.config.activator.BaseDBActivator; +import com.fr.config.activator.ConfigurationActivator; +import com.fr.data.impl.config.activator.RestrictionActivator; +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.module.Module; +import com.fr.module.tool.ActivatorToolBox; +import com.fr.report.ReportActivator; +import com.fr.report.module.ReportBaseActivator; +import com.fr.serialization.SerializationActivator; +import com.fr.stable.WriteActor; +import com.fr.startup.WorkspaceRegister; +import com.fr.store.StateServerActivator; +import com.fr.workspace.engine.WorkspaceActivator; +import com.fr.workspace.server.ServerWorkspaceRegister; +import com.fr.workspace.simple.SimpleWork; + +import java.io.File; +import java.io.FileOutputStream; + + +public class ExportApi { + public static void main(String[] args) { + // 定义报表运行环境,才能执行报表 + // 定义报表运行环境,用于执行报表 + Module module = ActivatorToolBox.simpleLink( + new WorkspaceActivator(), + new BaseDBActivator(), + new ConfigurationActivator(), + new StateServerActivator(), + new ReportBaseActivator(), + new RestrictionActivator(), + new ReportActivator(), + new WorkspaceRegister(), + new ServerWorkspaceRegister(), + new SerializationActivator()); + String envpath = "D:\\FineReport_10\\webapps\\webroot\\WEB-INF";//工程路径 + SimpleWork.checkIn(envpath); + module.start(); + ResultWorkBook rworkbook = null; + try { + // 未执行模板工作薄 + WorkBook workbook = (WorkBook) TemplateWorkBookIO + .readTemplateWorkBook("\\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(); + } finally { + SimpleWork.checkOut(); + } + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/io/ExportBatch.java b/plugin-report-doc-demo/src/com/fr/io/ExportBatch.java new file mode 100644 index 0000000..efe2a29 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/io/ExportBatch.java @@ -0,0 +1,91 @@ +package com.fr.io; + +import com.fr.config.activator.BaseDBActivator; +import com.fr.config.activator.ConfigurationActivator; +import com.fr.data.impl.config.activator.RestrictionActivator; +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.module.Module; +import com.fr.module.tool.ActivatorToolBox; +import com.fr.report.ReportActivator; +import com.fr.report.module.ReportBaseActivator; +import com.fr.serialization.SerializationActivator; +import com.fr.stable.StableUtils; +import com.fr.stable.WriteActor; +import com.fr.startup.WorkspaceRegister; +import com.fr.store.StateServerActivator; +import com.fr.workspace.engine.WorkspaceActivator; +import com.fr.workspace.server.ServerWorkspaceRegister; +import com.fr.workspace.simple.SimpleWork; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.util.Arrays; + + +public class ExportBatch { + public static void main(String[] args) { + try { + // 定义报表运行环境,用于执行报表 + Module module = ActivatorToolBox.simpleLink( + new WorkspaceActivator(), + new BaseDBActivator(), + new ConfigurationActivator(), + new StateServerActivator(), + new ReportBaseActivator(), + new RestrictionActivator(), + new ReportActivator(), + new WorkspaceRegister(), + new ServerWorkspaceRegister(), + new SerializationActivator()); + String envpath = "D:\\FineReport_10\\webapps\\webroot\\WEB-INF";//工程路径 + SimpleWork.checkIn(envpath); + module.start(); + // 读取环境下的模板文件 + TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook( + "doc\\Primary\\DetailReport\\Details.cpt"); + // 读取用于保存的参数值的txt文件 + File parafile = new File(envpath + "\\para.txt"); + FileInputStream fileinputstream; + fileinputstream = new FileInputStream(parafile); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileinputstream)); + // 定义保存参数的map,用于执行报表 + java.util.Map paramap = new java.util.HashMap(); + /* + * 遍历参数值所在txt文件,txt文件中参数保存形式为 para1,para2 江苏,陈羽 江苏,安娜 首先取出第一行保存参数名称 + * 遍历每个参数组合,如para1=江苏、para2=陈羽,根据参数执行模板,并将结果导出excel excel文件名为名称+导出编号 + */ + // 读第一行,保存参数名称 + String lineText = bufferedReader.readLine(); + lineText = lineText.trim(); + String[] paraname = StableUtils.splitString(lineText, ","); + System.out.println(Arrays.toString(paraname)); + // 遍历每个参数组合,执行模板,导出结果 + int number = 0; + while ((lineText = bufferedReader.readLine()) != null) { + lineText = lineText.trim(); + String[] paravalue = StableUtils.splitString(lineText, ","); + for (int j = 0; j < paravalue.length; j++) { + paramap.put(paraname[j], paravalue[j]); + } + ResultWorkBook result = workbook.execute(paramap,new WriteActor()); + OutputStream outputstream = new FileOutputStream(new File("E:\\ExportEg" + number + ".xls")); + ExcelExporter excelexporter = new ExcelExporter(); + excelexporter.export(outputstream, result); + // 最后要清空一下参数map,用于下次计算 + paramap.clear(); + number++; + outputstream.close(); + } + ModuleContext.stopModules(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/io/ExportExcel.java b/plugin-report-doc-demo/src/com/fr/io/ExportExcel.java new file mode 100644 index 0000000..a7a1d83 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/io/ExportExcel.java @@ -0,0 +1,88 @@ +package com.fr.io; + +import com.fr.base.Parameter; +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 com.fr.workspace.simple.SimpleWork; + +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"; + SimpleWork.checkIn(envpath); + ModuleContext.startModule(EngineModule.class.getName()); + ResultWorkBook rworkbook = null; + try { + // 未执行模板工作薄 + WorkBook workbook = (WorkBook) TemplateWorkBookIO + .readTemplateWorkBook("\\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(); + } + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/io/ExportReports.java b/plugin-report-doc-demo/src/com/fr/io/ExportReports.java new file mode 100644 index 0000000..96a20cc --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/io/ExportReports.java @@ -0,0 +1,58 @@ +package com.fr.io; + +import com.fr.base.Parameter; +import com.fr.general.ModuleContext; +import com.fr.io.exporter.PageExcelExporter; +import com.fr.main.TemplateWorkBook; +import com.fr.main.workbook.PageWorkBook; +import com.fr.report.core.ReportUtils; +import com.fr.report.module.EngineModule; +import com.fr.report.report.PageReport; +import com.fr.stable.PageActor; +import com.fr.workspace.simple.SimpleWork; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.OutputStream; + +public class ExportReports { + public static void main(String[] args) { + // ���屨�����л���,����ִ�б��� + String envpath = "D:\\FineReport\\develop\\code\\build\\package\\WebReport\\WEB-INF"; + SimpleWork.checkIn(envpath); + ModuleContext.startModule(EngineModule.class.getName()); + // ���г����һЩ��Ҫ��ʼ�� + try { + // δִ��ģ�幤���� + TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook( + "Gettingstarted.cpt"); + // ����ֵΪChina�������������������rworkbook + Parameter[] parameters = workbook.getParameters(); + java.util.Map parameterMap = new java.util.HashMap(); + for (int i = 0; i < parameters.length; i++) { + parameterMap.put(parameters[i].getName(), "����"); + } + PageWorkBook rworkbook = (PageWorkBook) workbook.execute(parameterMap, new PageActor()); + rworkbook.setReportName(0, "����"); + // ���parametermap��������ֵ��Ϊ����,�������ResultReport + parameterMap.clear(); + for (int i = 0; i < parameters.length; i++) { + parameterMap.put(parameters[i].getName(), "����"); + } + PageWorkBook rworkbook2 = (PageWorkBook) workbook.execute(parameterMap, new PageActor()); + PageReport rreport2 = rworkbook2.getPageReport(0); + rworkbook.addReport("����", rreport2); + // ���������������ΪExcel�ļ� + OutputStream outputStream = new FileOutputStream(new File("D:\\ExcelExport1.xls")); + PageExcelExporter excelExport = new PageExcelExporter(ReportUtils.getPaperSettingListFromWorkBook(rworkbook)); + excelExport.export(outputStream, rworkbook); + outputStream.close(); + ModuleContext.stopModules(); + + } catch (Exception e) { + e.printStackTrace(); + } finally { + SimpleWork.checkOut(); + } + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/io/JavaPrint.java b/plugin-report-doc-demo/src/com/fr/io/JavaPrint.java new file mode 100644 index 0000000..7a7cad8 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/io/JavaPrint.java @@ -0,0 +1,36 @@ +package com.fr.io; + +import com.fr.base.Parameter; +import com.fr.main.TemplateWorkBook; +import com.fr.print.PrintUtils; +import com.fr.workspace.simple.SimpleWork; + +import java.util.HashMap; + + +public class JavaPrint { + public static void main(String[] args) { + // 定义报表运行环境,才能执行报表 + String envPath = "D:\\FineReport\\develop\\code\\build\\package\\WebReport\\WEB-INF"; + SimpleWork.checkIn(envPath); + try { + TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook("GettingStarted.cpt"); + // 参数传值 + Parameter[] parameters = workbook.getParameters(); + HashMap paraMap = new HashMap(); + 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(); + } finally { + SimpleWork.checkOut(); + } + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/io/SetParameterWindow.java b/plugin-report-doc-demo/src/com/fr/io/SetParameterWindow.java new file mode 100644 index 0000000..aec2d19 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/io/SetParameterWindow.java @@ -0,0 +1,78 @@ +// �����������API +package com.fr.io; + +import com.fr.base.background.ColorBackground; +import com.fr.config.activator.BaseDBActivator; +import com.fr.config.activator.ConfigurationActivator; +import com.fr.data.impl.config.activator.RestrictionActivator; +import com.fr.general.Background; +import com.fr.io.exporter.EmbeddedTableDataExporter; +import com.fr.main.impl.WorkBook; +import com.fr.main.parameter.ReportParameterAttr; +import com.fr.module.Module; +import com.fr.module.tool.ActivatorToolBox; +import com.fr.report.ReportActivator; +import com.fr.report.module.ReportBaseActivator; +import com.fr.serialization.SerializationActivator; +import com.fr.startup.WorkspaceRegister; +import com.fr.store.StateServerActivator; +import com.fr.workspace.engine.WorkspaceActivator; +import com.fr.workspace.server.ServerWorkspaceRegister; +import com.fr.workspace.simple.SimpleWork; + +import java.awt.Color; +import java.io.File; +import java.io.FileOutputStream; + +public class SetParameterWindow { + public static void main(String[] args) { + try { + // 定义报表运行环境,用于执行报表 + Module module = ActivatorToolBox.simpleLink( + new WorkspaceActivator(), + new BaseDBActivator(), + new ConfigurationActivator(), + new StateServerActivator(), + new ReportBaseActivator(), + new RestrictionActivator(), + new ReportActivator(), + new WorkspaceRegister(), + new ServerWorkspaceRegister(), + new SerializationActivator()); + String envpath = "D:\\FineReport_10\\webapps\\webroot\\WEB-INF";//工程路径 + SimpleWork.checkIn(envpath); + module.start(); + WorkBook workbook = (WorkBook) TemplateWorkBookIO + .readTemplateWorkBook( + "\\doc\\Primary\\Parameter\\Parameter.cpt"); + // ��ȡWorkBook�������IJ�������ReportParameterAttr + ReportParameterAttr paraAttr = workbook.getReportParameterAttr(); + /* ��������IJ��� + * 0 : ���� + * 1 ������ + * 2 �� ���� + */ + paraAttr.setAlign(1); + /* + * ���ò������汳�� + * ColorBackground ����ɫ���� + * GradientBackground ������ɫ���� + * ImageBackground ��ͼƬ���� + * PatternBackground ��ͼ������ + * TextureBackground �������� + */ + Background background = ColorBackground.getInstance(new Color(0, 255, 255)); + paraAttr.setBackground(background); + // �������ò�������,�������ս�� + workbook.setReportParameterAttr(paraAttr); + FileOutputStream outputStream = new FileOutputStream(new File( + "D:\\newParameter.cpt")); + EmbeddedTableDataExporter templateExporter = new EmbeddedTableDataExporter(); + templateExporter.export(outputStream, workbook); + } catch (Exception e) { + e.printStackTrace(); + } finally { + SimpleWork.checkOut(); + } + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/io/SimpleDemo.java b/plugin-report-doc-demo/src/com/fr/io/SimpleDemo.java new file mode 100644 index 0000000..8a0357f --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/io/SimpleDemo.java @@ -0,0 +1,71 @@ +//��ȡ�޸ı��� +package com.fr.io; + +import com.fr.base.Style; +import com.fr.config.activator.BaseDBActivator; +import com.fr.config.activator.ConfigurationActivator; +import com.fr.data.impl.config.activator.RestrictionActivator; +import com.fr.general.FRFont; +import com.fr.main.impl.WorkBook; +import com.fr.module.Module; +import com.fr.module.tool.ActivatorToolBox; +import com.fr.report.ReportActivator; +import com.fr.report.cell.CellElement; +import com.fr.report.elementcase.TemplateElementCase; +import com.fr.report.module.ReportBaseActivator; +import com.fr.serialization.SerializationActivator; +import com.fr.startup.WorkspaceRegister; +import com.fr.store.StateServerActivator; +import com.fr.workspace.engine.WorkspaceActivator; +import com.fr.workspace.server.ServerWorkspaceRegister; +import com.fr.workspace.simple.SimpleWork; + +import java.awt.Color; +import java.io.File; +import java.io.FileOutputStream; + +public class SimpleDemo { + public static void main(String[] args) { + // 定义报表运行环境,用于执行报表 + Module module = ActivatorToolBox.simpleLink( + new WorkspaceActivator(), + new BaseDBActivator(), + new ConfigurationActivator(), + new StateServerActivator(), + new ReportBaseActivator(), + new RestrictionActivator(), + new ReportActivator(), + new WorkspaceRegister(), + new ServerWorkspaceRegister(), + new SerializationActivator()); + String envpath = "D:\\FineReport_10\\webapps\\webroot\\WEB-INF";//工程路径 + SimpleWork.checkIn(envpath); + module.start(); + try { + // ��ȡģ�� + WorkBook workbook = (WorkBook) TemplateWorkBookIO + .readTemplateWorkBook( + "\\doc\\Primary\\Parameter\\Parameter.cpt"); + + // ���WorkBook�е�WorkSheet�������޸�A1��Ԫ���ǰ��ɫΪ��ɫ + TemplateElementCase report = (TemplateElementCase) workbook + .getReport(0); + // getCellElement(int column, int + // row),column��row����0��ʼ�����A1��Ԫ����ǵ�0�е�0�� + CellElement cellA1 = report.getCellElement(0, 0); + FRFont frFont = FRFont.getInstance(); + frFont = frFont.applyForeground(Color.red); + Style style = Style.getInstance(); + style = style.deriveFRFont(frFont); + cellA1.setStyle(style); + // ����ģ�� + FileOutputStream outputStream = new FileOutputStream(new File( + "D:\\newParameter1.cpt")); + ((WorkBook) workbook).export(outputStream); + } catch (Exception e) { + e.printStackTrace(); + } finally { + SimpleWork.checkOut(); + } + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/log/LogApi.java b/plugin-report-doc-demo/src/com/fr/log/LogApi.java new file mode 100644 index 0000000..dd50e08 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/log/LogApi.java @@ -0,0 +1,12 @@ +package com.fr.log; + +/** + * 后台输出log信息-http://help.finereport.com/doc-view-746.html + */ +public class LogApi { + public static void main(String[] args) { + FineLoggerFactory.getLogger().info( "This is level info"); //需要服务器log级别为info时才会显示 + FineLoggerFactory.getLogger().warn("This is level warning"); //需要服务器log级别为info、warning时才会显示 + FineLoggerFactory.getLogger().error("This is level error"); //需要服务器log级别为info、warning、error时才会显示,10.0取消了server级别日志记录 + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/output/FTPUpload.java b/plugin-report-doc-demo/src/com/fr/output/FTPUpload.java new file mode 100644 index 0000000..0c08b92 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/output/FTPUpload.java @@ -0,0 +1,76 @@ +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; + } + +} diff --git a/plugin-report-doc-demo/src/com/fr/output/OutputExcel.java b/plugin-report-doc-demo/src/com/fr/output/OutputExcel.java new file mode 100644 index 0000000..1471580 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/output/OutputExcel.java @@ -0,0 +1,100 @@ +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; + } + +} diff --git a/plugin-report-doc-demo/src/com/fr/output/session.java b/plugin-report-doc-demo/src/com/fr/output/session.java new file mode 100644 index 0000000..1745f9c --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/output/session.java @@ -0,0 +1,48 @@ +package com.fr.output; + +import com.fr.stable.CodeUtils; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.io.PrintWriter; + +public class session extends HttpServlet { + public void doGet(HttpServletRequest request, + HttpServletResponse response) + throws IOException, ServletException { + response.setContentType("text/html; charset=gb2312"); + + PrintWriter out = response.getWriter(); + out.println(""); + out.println(""); + String urlid = request.getParameter("id"); //获取url通过ajax传递的值 + HttpSession session = request.getSession(true); + if (urlid == "" || urlid == null) { + out.print("

"); + out.println("set session:"); + out.println(""); + out.println("
"); + if (request.getParameter("sessionvalue") != null && request.getParameter("sessionvalue") != "") { + session.setAttribute("sessionname", request.getParameter("sessionvalue")); + } + } else { + urlid = CodeUtils.decodeText(urlid); + session.setAttribute("sessionname", urlid); //将值赋值给sessionname这个session中 + out.println(""); + } + out.println(""); + out.println(""); + } + + public void doPost(HttpServletRequest request, + HttpServletResponse response) + throws IOException, ServletException { + doGet(request, response); + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/chart/IndependentChartProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/chart/IndependentChartProviderImpl.java new file mode 100644 index 0000000..bd1b741 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/chart/IndependentChartProviderImpl.java @@ -0,0 +1,26 @@ +package com.fr.plugin.chart; + +import com.fr.chart.chartattr.Chart; +import com.fr.chart.fun.impl.AbstractIndependentChartProvider; + +public class IndependentChartProviderImpl extends AbstractIndependentChartProvider { + @Override + public void init() { + + } + + @Override + public void destroy() { + + } + + @Override + public String getChartName() { + return ""; + } + + @Override + public Chart[] getChartTypes() { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/chart/IndependentChartUIProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/chart/IndependentChartUIProviderImpl.java new file mode 100644 index 0000000..9445e2d --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/chart/IndependentChartUIProviderImpl.java @@ -0,0 +1,22 @@ +package com.fr.plugin.chart; + +import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPane; +import com.fr.extended.chart.AbstractExtendedChartTableDataPane; +import com.fr.extended.chart.AbstractExtendedChartUIProvider; + +public class IndependentChartUIProviderImpl extends AbstractExtendedChartUIProvider { + @Override + protected AbstractExtendedChartTableDataPane getTableDataSourcePane() { + return null; + } + + @Override + protected AbstractReportDataContentPane getReportDataSourcePane() { + return null; + } + + @Override + public String getIconPath() { + return ""; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/ActionCMDImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/ActionCMDImpl.java new file mode 100644 index 0000000..436ef9c --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/ActionCMDImpl.java @@ -0,0 +1,23 @@ +package com.fr.plugin.core; + +import com.fr.web.core.ActionCMD; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class ActionCMDImpl implements ActionCMD { + @Override + public String getCMD() { + return ""; + } + + @Override + public void actionCMD(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String s) throws Exception { + + } + + @Override + public void actionCMD(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { + + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/AttachmentDownloaderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/AttachmentDownloaderImpl.java new file mode 100644 index 0000000..1909f32 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/AttachmentDownloaderImpl.java @@ -0,0 +1,18 @@ +package com.fr.plugin.core; + +import com.fr.stable.fun.impl.AbstractAttachmentDownloader; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class AttachmentDownloaderImpl extends AbstractAttachmentDownloader { + @Override + public void download(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String s, String[] strings) throws Exception { + + } + + @Override + public String createDownloadScript(String s) { + return ""; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/CellValueProcessorImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/CellValueProcessorImpl.java new file mode 100644 index 0000000..a140b57 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/CellValueProcessorImpl.java @@ -0,0 +1,18 @@ +package com.fr.plugin.core; + +import com.fr.base.Style; +import com.fr.report.cell.cellattr.CellGUIAttr; +import com.fr.report.fun.impl.AbstractCellValueProvider; +import com.fr.stable.script.CalculatorProvider; + +public class CellValueProcessorImpl extends AbstractCellValueProvider { + @Override + public Object process(Object o, CalculatorProvider calculatorProvider) { + return null; + } + + @Override + public Object processBeforeToTag(Object o, CellGUIAttr cellGUIAttr, Style style, int i, int i1) { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/CssFileHandlerImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/CssFileHandlerImpl.java new file mode 100644 index 0000000..d164ce2 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/CssFileHandlerImpl.java @@ -0,0 +1,10 @@ +package com.fr.plugin.core; + +import com.fr.stable.fun.impl.AbstractCssFileHandler; + +public class CssFileHandlerImpl extends AbstractCssFileHandler { + @Override + public String[] pathsForFiles() { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/DebugLogProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/DebugLogProviderImpl.java new file mode 100644 index 0000000..08fe2dc --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/DebugLogProviderImpl.java @@ -0,0 +1,7 @@ +package com.fr.plugin.core; + +public class DebugLogProviderImpl { + public static void main(String[] args) { + + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/DialectCreatorImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/DialectCreatorImpl.java new file mode 100644 index 0000000..167513c --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/DialectCreatorImpl.java @@ -0,0 +1,18 @@ +package com.fr.plugin.core; + +import com.fr.stable.UrlDriver; +import com.fr.stable.fun.impl.AbstractDialectCreator; + +import java.sql.Connection; + +public class DialectCreatorImpl extends AbstractDialectCreator { + @Override + public Class generate(UrlDriver urlDriver) { + return null; + } + + @Override + public Class generate(Connection connection) { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/EmailProcessorImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/EmailProcessorImpl.java new file mode 100644 index 0000000..1c6af76 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/EmailProcessorImpl.java @@ -0,0 +1,13 @@ +package com.fr.plugin.core; + +import com.fr.stable.fun.impl.AbstractEmailProcessor; + +import java.util.HashMap; +import java.util.Map; + +public class EmailProcessorImpl extends AbstractEmailProcessor { + @Override + public Map loadMailProperties(String s, String s1, String s2, String s3, String s4) { + return new HashMap(); + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/ExcelExportCellValueProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/ExcelExportCellValueProviderImpl.java new file mode 100644 index 0000000..f75368f --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/ExcelExportCellValueProviderImpl.java @@ -0,0 +1,11 @@ +package com.fr.plugin.core; + +import com.fr.stable.fun.impl.AbstractExcelExportCellValueProvider; +import com.fr.stable.script.CalculatorProvider; + +public class ExcelExportCellValueProviderImpl extends AbstractExcelExportCellValueProvider { + @Override + public Object getCellValue(Object o, Object o1, CalculatorProvider calculatorProvider) { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/ExcelExportProcessorImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/ExcelExportProcessorImpl.java new file mode 100644 index 0000000..1fb65a6 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/ExcelExportProcessorImpl.java @@ -0,0 +1,6 @@ +package com.fr.plugin.core; + +import com.fr.stable.fun.impl.AbstractExcelExportProcessor; + +public class ExcelExportProcessorImpl extends AbstractExcelExportProcessor { +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/FunctionDefineProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/FunctionDefineProviderImpl.java new file mode 100644 index 0000000..7983e36 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/FunctionDefineProviderImpl.java @@ -0,0 +1,10 @@ +package com.fr.plugin.core; + +import com.fr.stable.fun.FunctionDefineProvider; + +public class FunctionDefineProviderImpl implements FunctionDefineProvider { + @Override + public int currentAPILevel() { + return 0; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/GraphDrawProcessorImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/GraphDrawProcessorImpl.java new file mode 100644 index 0000000..7149894 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/GraphDrawProcessorImpl.java @@ -0,0 +1,13 @@ +package com.fr.plugin.core; + +import com.fr.stable.fun.impl.AbstractGraphDrawProcessor; + +import java.awt.Graphics; +import java.awt.Image; + +public class GraphDrawProcessorImpl extends AbstractGraphDrawProcessor { + @Override + public void paintImage(Graphics graphics, int i, int i1, Image image, int i2, int i3, int i4, int i5, int i6) { + + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/HttpAuthProcessorImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/HttpAuthProcessorImpl.java new file mode 100644 index 0000000..e7bfffb --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/HttpAuthProcessorImpl.java @@ -0,0 +1,10 @@ +package com.fr.plugin.core; + +/** + * 10.0已经废弃 + */ +public class HttpAuthProcessorImpl { + public static void main(String[] args) { + //HttpAuthProcessor pro = new HttpAuthProcessor(); + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/JavaScriptFileHandlerImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/JavaScriptFileHandlerImpl.java new file mode 100644 index 0000000..95ee326 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/JavaScriptFileHandlerImpl.java @@ -0,0 +1,10 @@ +package com.fr.plugin.core; + +import com.fr.stable.fun.impl.AbstractJavaScriptFileHandler; + +public class JavaScriptFileHandlerImpl extends AbstractJavaScriptFileHandler { + @Override + public String[] pathsForFiles() { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/LogDBRecordProcessorImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/LogDBRecordProcessorImpl.java new file mode 100644 index 0000000..40e22f2 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/LogDBRecordProcessorImpl.java @@ -0,0 +1,25 @@ +package com.fr.plugin.core; + +import com.fr.stable.fun.impl.AbstractLogDBRecordProcessor; + +public class LogDBRecordProcessorImpl extends AbstractLogDBRecordProcessor { + @Override + public String driver() { + return ""; + } + + @Override + public String url() { + return ""; + } + + @Override + public String username() { + return ""; + } + + @Override + public String password() { + return ""; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/LogProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/LogProviderImpl.java new file mode 100644 index 0000000..95b2aa9 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/LogProviderImpl.java @@ -0,0 +1,6 @@ +package com.fr.plugin.core; + +import com.fr.stable.fun.impl.AbstractLogProvider; + +public class LogProviderImpl extends AbstractLogProvider { +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/PrintCellValueProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/PrintCellValueProviderImpl.java new file mode 100644 index 0000000..c93ed4b --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/PrintCellValueProviderImpl.java @@ -0,0 +1,12 @@ +package com.fr.plugin.core; + +import com.fr.report.cell.cellattr.CellGUIAttr; +import com.fr.report.cell.cellattr.PageExportCellElement; +import com.fr.report.fun.impl.AbstractPrintCellValueProvider; + +public class PrintCellValueProviderImpl extends AbstractPrintCellValueProvider { + @Override + public Object getCellValue(PageExportCellElement pageExportCellElement, CellGUIAttr cellGUIAttr, Object o, int i, int i1) { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/RequestParameterCollectorImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/RequestParameterCollectorImpl.java new file mode 100644 index 0000000..46de013 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/RequestParameterCollectorImpl.java @@ -0,0 +1,33 @@ +package com.fr.plugin.core; + +import com.fr.stable.fun.impl.AbstractRequestParameterCollector; + +import javax.servlet.http.HttpServletRequest; +import java.util.Map; + +public class RequestParameterCollectorImpl extends AbstractRequestParameterCollector { + @Override + public Map getParametersFromSession(HttpServletRequest httpServletRequest) { + return null; + } + + @Override + public Map getParametersFromAttribute(HttpServletRequest httpServletRequest) { + return null; + } + + @Override + public Map getParametersFromReqInputStream(HttpServletRequest httpServletRequest) { + return null; + } + + @Override + public Map getParametersFromParameter(HttpServletRequest httpServletRequest) { + return null; + } + + @Override + public Map getParametersFromJSON(HttpServletRequest httpServletRequest, Map map) { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/RequestParameterHandlerImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/RequestParameterHandlerImpl.java new file mode 100644 index 0000000..340bb25 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/RequestParameterHandlerImpl.java @@ -0,0 +1,32 @@ +package com.fr.plugin.core; + +import com.fr.stable.fun.impl.AbstractRequestParameterHandler; + +import javax.servlet.http.HttpServletRequest; + +public class RequestParameterHandlerImpl extends AbstractRequestParameterHandler { + @Override + public Object getParameterFromRequest(HttpServletRequest httpServletRequest, String s) { + return null; + } + + @Override + public Object getParameterFromRequestInputStream(HttpServletRequest httpServletRequest, String s) { + return null; + } + + @Override + public Object getParameterFromAttribute(HttpServletRequest httpServletRequest, String s) { + return null; + } + + @Override + public Object getParameterFromJSONParameters(HttpServletRequest httpServletRequest, String s) { + return null; + } + + @Override + public Object getParameterFromSession(HttpServletRequest httpServletRequest, String s) { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/ServiceImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/ServiceImpl.java new file mode 100644 index 0000000..fb31d2b --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/ServiceImpl.java @@ -0,0 +1,18 @@ +package com.fr.plugin.core; + +import com.fr.stable.fun.Service; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class ServiceImpl implements Service { + @Override + public String actionOP() { + return ""; + } + + @Override + public void process(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String s, String s1) throws Exception { + + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/SpecialCharProcessorImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/SpecialCharProcessorImpl.java new file mode 100644 index 0000000..c52d360 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/SpecialCharProcessorImpl.java @@ -0,0 +1,10 @@ +package com.fr.plugin.core; + +import com.fr.stable.fun.impl.AbstractSpecialCharProcessor; + +public class SpecialCharProcessorImpl extends AbstractSpecialCharProcessor { + @Override + public String processChar(String s) { + return ""; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/TableDataProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/TableDataProviderImpl.java new file mode 100644 index 0000000..0e6b92f --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/TableDataProviderImpl.java @@ -0,0 +1,6 @@ +package com.fr.plugin.core; + +import com.fr.stable.fun.impl.AbstractTableDataProvider; + +public class TableDataProviderImpl extends AbstractTableDataProvider { +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/WidgetSwitcherImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/WidgetSwitcherImpl.java new file mode 100644 index 0000000..f5495c0 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/WidgetSwitcherImpl.java @@ -0,0 +1,10 @@ +package com.fr.plugin.core; + +import com.fr.stable.fun.impl.AbstractWidgetSwitcher; + +public class WidgetSwitcherImpl extends AbstractWidgetSwitcher { + @Override + public String toNewMarkType(String s) { + return ""; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/XMLFileManagerProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/XMLFileManagerProviderImpl.java new file mode 100644 index 0000000..16f7155 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/XMLFileManagerProviderImpl.java @@ -0,0 +1,7 @@ +package com.fr.plugin.core; + +public class XMLFileManagerProviderImpl { + public static void main(String[] args) { +// XMLFileManagerProvider provider = new XMLFileManagerProvider(); + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/design/CellAttributeProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/design/CellAttributeProviderImpl.java new file mode 100644 index 0000000..d0cb46d --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/design/CellAttributeProviderImpl.java @@ -0,0 +1,11 @@ +package com.fr.plugin.design; + +import com.fr.design.fun.impl.AbstractCellAttributeProvider; +import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; + +public class CellAttributeProviderImpl extends AbstractCellAttributeProvider { + @Override + public AbstractAttrNoScrollPane createCellAttributePane() { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/design/CellWidgetOptionProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/design/CellWidgetOptionProviderImpl.java new file mode 100644 index 0000000..e236aff --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/design/CellWidgetOptionProviderImpl.java @@ -0,0 +1,27 @@ +package com.fr.plugin.design; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.fun.impl.AbstractCellWidgetOptionProvider; +import com.fr.form.ui.Widget; + +public class CellWidgetOptionProviderImpl extends AbstractCellWidgetOptionProvider { + @Override + public Class classForWidget() { + return null; + } + + @Override + public Class> appearanceForWidget() { + return null; + } + + @Override + public String iconPathForWidget() { + return ""; + } + + @Override + public String nameForWidget() { + return ""; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/design/ConnectionProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/design/ConnectionProviderImpl.java new file mode 100644 index 0000000..46a6015 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/design/ConnectionProviderImpl.java @@ -0,0 +1,28 @@ +package com.fr.plugin.design; + +import com.fr.data.impl.Connection; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.fun.impl.AbstractConnectionProvider; + +public class ConnectionProviderImpl extends AbstractConnectionProvider { + @Override + public String nameForConnection() { + return ""; + } + + @Override + public String iconPathForConnection() { + return ""; + } + + @Override + public Class classForConnection() { + return null; + + } + + @Override + public Class> appearanceForConnection() { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/design/FormWidgetOptionProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/design/FormWidgetOptionProviderImpl.java new file mode 100644 index 0000000..0fccb52 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/design/FormWidgetOptionProviderImpl.java @@ -0,0 +1,26 @@ +package com.fr.plugin.design; + +import com.fr.design.fun.impl.AbstractFormWidgetOptionProvider; +import com.fr.form.ui.Widget; + +public class FormWidgetOptionProviderImpl extends AbstractFormWidgetOptionProvider { + @Override + public Class classForWidget() { + return null; + } + + @Override + public Class appearanceForWidget() { + return null; + } + + @Override + public String iconPathForWidget() { + return ""; + } + + @Override + public String nameForWidget() { + return ""; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/design/GlobalListenerProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/design/GlobalListenerProviderImpl.java new file mode 100644 index 0000000..169cf08 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/design/GlobalListenerProviderImpl.java @@ -0,0 +1,12 @@ +package com.fr.plugin.design; + +import com.fr.design.fun.impl.AbstractGlobalListenerProvider; + +import java.awt.event.AWTEventListener; + +public class GlobalListenerProviderImpl extends AbstractGlobalListenerProvider { + @Override + public AWTEventListener listener() { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/design/HighlightProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/design/HighlightProviderImpl.java new file mode 100644 index 0000000..ff5ab5c --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/design/HighlightProviderImpl.java @@ -0,0 +1,17 @@ +package com.fr.plugin.design; + +import com.fr.design.condition.ConditionAttrSingleConditionPane; +import com.fr.design.condition.ConditionAttributesPane; +import com.fr.design.fun.impl.AbstractHighlightProvider; + +public class HighlightProviderImpl extends AbstractHighlightProvider { + @Override + public Class classForHighlightAction() { + return null; + } + + @Override + public ConditionAttrSingleConditionPane appearanceForCondition(ConditionAttributesPane conditionAttributesPane) { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/design/IndentationUnitProcessorImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/design/IndentationUnitProcessorImpl.java new file mode 100644 index 0000000..36aa2e4 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/design/IndentationUnitProcessorImpl.java @@ -0,0 +1,6 @@ +package com.fr.plugin.design; + +import com.fr.design.fun.impl.AbstractIndentationUnitProcessor; + +public class IndentationUnitProcessorImpl extends AbstractIndentationUnitProcessor { +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/design/JavaScriptActionProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/design/JavaScriptActionProviderImpl.java new file mode 100644 index 0000000..abda85c --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/design/JavaScriptActionProviderImpl.java @@ -0,0 +1,12 @@ +package com.fr.plugin.design; + +import com.fr.design.beans.FurtherBasicBeanPane; +import com.fr.design.fun.impl.AbstractJavaScriptActionProvider; +import com.fr.js.JavaScript; + +public class JavaScriptActionProviderImpl extends AbstractJavaScriptActionProvider { + @Override + public FurtherBasicBeanPane getJavaScriptActionPane() { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/design/ParameterWidgetOptionProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/design/ParameterWidgetOptionProviderImpl.java new file mode 100644 index 0000000..1bbaa88 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/design/ParameterWidgetOptionProviderImpl.java @@ -0,0 +1,27 @@ +package com.fr.plugin.design; + +import com.fr.design.fun.impl.AbstractParameterWidgetOptionProvider; +import com.fr.form.ui.Widget; + +public class ParameterWidgetOptionProviderImpl extends AbstractParameterWidgetOptionProvider { + @Override + public Class classForWidget() { + return null; + } + + @Override + public Class appearanceForWidget() { + return null; + } + + @Override + public String iconPathForWidget() { + return null; + + } + + @Override + public String nameForWidget() { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/design/PreviewProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/design/PreviewProviderImpl.java new file mode 100644 index 0000000..d182b6c --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/design/PreviewProviderImpl.java @@ -0,0 +1,25 @@ +package com.fr.plugin.design; + +import com.fr.design.fun.impl.AbstractPreviewProvider; + +public class PreviewProviderImpl extends AbstractPreviewProvider { + @Override + public String nameForPopupItem() { + return ""; + } + + @Override + public String iconPathForPopupItem() { + return ""; + } + + @Override + public String iconPathForLarge() { + return ""; + } + + @Override + public int previewTypeCode() { + return 0; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/design/ShortCutImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/design/ShortCutImpl.java new file mode 100644 index 0000000..c10dfe9 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/design/ShortCutImpl.java @@ -0,0 +1,28 @@ +package com.fr.plugin.design; + +import com.fr.design.menu.ShortCut; + +import javax.swing.JPopupMenu; +import javax.swing.JToolBar; + +public class ShortCutImpl extends ShortCut { + @Override + public void intoJPopupMenu(JPopupMenu jPopupMenu) { + + } + + @Override + public void intoJToolBar(JToolBar jToolBar) { + + } + + @Override + public void setEnabled(boolean b) { + + } + + @Override + public boolean isEnabled() { + return true; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/design/SubmitProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/design/SubmitProviderImpl.java new file mode 100644 index 0000000..e0ae021 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/design/SubmitProviderImpl.java @@ -0,0 +1,21 @@ +package com.fr.plugin.design; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.fun.impl.AbstractSubmitProvider; + +public class SubmitProviderImpl extends AbstractSubmitProvider { + @Override + public BasicBeanPane appearanceForSubmit() { + return null; + } + + @Override + public String dataForSubmit() { + return ""; + } + + @Override + public String keyForSubmit() { + return ""; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/design/TableDataDefineProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/design/TableDataDefineProviderImpl.java new file mode 100644 index 0000000..ba8b9e0 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/design/TableDataDefineProviderImpl.java @@ -0,0 +1,37 @@ +package com.fr.plugin.design; + +import com.fr.base.TableData; +import com.fr.design.data.tabledata.tabledatapane.AbstractTableDataPane; +import com.fr.design.fun.impl.AbstractTableDataDefineProvider; + +public class TableDataDefineProviderImpl extends AbstractTableDataDefineProvider { + @Override + public Class classForTableData() { + return null; + } + + @Override + public Class classForInitTableData() { + return null; + } + + @Override + public Class appearanceForTableData() { + return null; + } + + @Override + public String nameForTableData() { + return ""; + } + + @Override + public String prefixForTableData() { + return ""; + } + + @Override + public String iconPathForTableData() { + return ""; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/design/TitlePlaceProcessorImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/design/TitlePlaceProcessorImpl.java new file mode 100644 index 0000000..b8f959e --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/design/TitlePlaceProcessorImpl.java @@ -0,0 +1,13 @@ +package com.fr.plugin.design; + +import com.fr.design.fun.impl.AbstractTitleProcessor; + +import java.awt.Component; +import java.awt.Container; + +public class TitlePlaceProcessorImpl extends AbstractTitleProcessor { + @Override + public void hold(Container container, Component component, Component component1) { + + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/design/UIFormulaProcessorImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/design/UIFormulaProcessorImpl.java new file mode 100644 index 0000000..0c04c5d --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/design/UIFormulaProcessorImpl.java @@ -0,0 +1,16 @@ +package com.fr.plugin.design; + +import com.fr.design.formula.UIFormula; +import com.fr.design.fun.impl.AbstractUIFormulaProcessor; + +public class UIFormulaProcessorImpl extends AbstractUIFormulaProcessor { + @Override + public UIFormula appearanceFormula() { + return null; + } + + @Override + public UIFormula appearanceWhenReserveFormula() { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/design/WidgetDesignHandlerImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/design/WidgetDesignHandlerImpl.java new file mode 100644 index 0000000..10d0c8f --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/design/WidgetDesignHandlerImpl.java @@ -0,0 +1,11 @@ +package com.fr.plugin.design; + +import com.fr.design.fun.impl.AbstractWidgetDesignHandler; +import com.fr.form.ui.Widget; + +public class WidgetDesignHandlerImpl extends AbstractWidgetDesignHandler { + @Override + public void transferWidgetProperties(Widget widget, Widget widget1) { + + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/report/ActorProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/report/ActorProviderImpl.java new file mode 100644 index 0000000..09fb693 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/report/ActorProviderImpl.java @@ -0,0 +1,11 @@ +package com.fr.plugin.report; + +import com.fr.report.fun.impl.AbstractActorProvider; +import com.fr.report.stable.fun.Actor; + +public class ActorProviderImpl extends AbstractActorProvider { + @Override + public Actor[] createActor() { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/report/CellTooltipProcessorImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/report/CellTooltipProcessorImpl.java new file mode 100644 index 0000000..9840b74 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/report/CellTooltipProcessorImpl.java @@ -0,0 +1,12 @@ +package com.fr.plugin.report; + +import com.fr.report.fun.impl.AbstractCellTagTransformer; +import com.fr.script.Calculator; +import com.fr.stable.html.Tag; + +public class CellTooltipProcessorImpl extends AbstractCellTagTransformer { + @Override + public Tag process(Calculator calculator, Tag tag, String s, Object o) { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/report/ExcelExportAppProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/report/ExcelExportAppProviderImpl.java new file mode 100644 index 0000000..24e7e04 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/report/ExcelExportAppProviderImpl.java @@ -0,0 +1,10 @@ +package com.fr.plugin.report; + +import com.fr.report.fun.impl.AbstractExcelExportAppProvider; + +public class ExcelExportAppProviderImpl extends AbstractExcelExportAppProvider { + @Override + public String exportType() { + return ""; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/report/ExcelImportProcessor.java b/plugin-report-doc-demo/src/com/fr/plugin/report/ExcelImportProcessor.java new file mode 100644 index 0000000..75932d1 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/report/ExcelImportProcessor.java @@ -0,0 +1,14 @@ +package com.fr.plugin.report; + +import com.fr.main.TemplateWorkBook; +import com.fr.report.fun.impl.AbstractExcelImportProcessor; + +import java.io.InputStream; +import java.util.Map; + +public class ExcelImportProcessor extends AbstractExcelImportProcessor { + @Override + public TemplateWorkBook generateWorkBookByStream(InputStream inputStream, String s, Map map) throws Exception { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/report/ExportEncodeProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/report/ExportEncodeProviderImpl.java new file mode 100644 index 0000000..700d368 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/report/ExportEncodeProviderImpl.java @@ -0,0 +1,6 @@ +package com.fr.plugin.report; + +import com.fr.report.fun.impl.AbstractExportEncodeProvider; + +public class ExportEncodeProviderImpl extends AbstractExportEncodeProvider { +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/report/ExportExtensionProcessorImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/report/ExportExtensionProcessorImpl.java new file mode 100644 index 0000000..b874a58 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/report/ExportExtensionProcessorImpl.java @@ -0,0 +1,21 @@ +package com.fr.plugin.report; + +import com.fr.io.collection.ExportCollection; +import com.fr.report.fun.impl.AbstractExportExtension; +import com.fr.web.core.ReportSessionIDInfor; +import com.fr.web.core.TemplateSessionIDInfo; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class ExportExtensionProcessorImpl extends AbstractExportExtension { + @Override + public String fileName(HttpServletRequest httpServletRequest, TemplateSessionIDInfo templateSessionIDInfo) throws Exception { + return ""; + } + + @Override + public ExportCollection createCollection(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, ReportSessionIDInfor reportSessionIDInfor, String s, String s1, boolean b) throws Exception { + return null; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/report/ExportOperateProviderImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/report/ExportOperateProviderImpl.java new file mode 100644 index 0000000..84c2b71 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/report/ExportOperateProviderImpl.java @@ -0,0 +1,16 @@ +package com.fr.plugin.report; + +import com.fr.report.fun.impl.AbstractExportOperateProvider; +import com.fr.web.core.reserve.Operate; + +public class ExportOperateProviderImpl extends AbstractExportOperateProvider { + @Override + public Operate operate() { + return null; + } + + @Override + public String markType() { + return ""; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/report/FromExportProcessorImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/report/FromExportProcessorImpl.java new file mode 100644 index 0000000..0818d01 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/report/FromExportProcessorImpl.java @@ -0,0 +1,13 @@ +package com.fr.plugin.report; + +import com.fr.form.stable.fun.AbstractFormExportProcessor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class FromExportProcessorImpl extends AbstractFormExportProcessor { + @Override + public void dealWithExport(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String s) { + + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/report/PageCalObjectProcessorImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/report/PageCalObjectProcessorImpl.java new file mode 100644 index 0000000..50c7866 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/report/PageCalObjectProcessorImpl.java @@ -0,0 +1,18 @@ +package com.fr.plugin.report; + +import com.fr.report.cell.CellElement; +import com.fr.report.cell.cellattr.highlight.HighlightGroup; +import com.fr.report.fun.impl.AbstractPageCalObjectProcessor; +import com.fr.script.Calculator; + +public class PageCalObjectProcessorImpl extends AbstractPageCalObjectProcessor { + @Override + public void collectPageCalHighlight(CellElement cellElement, Calculator calculator, HighlightGroup highlightGroup) { + + } + + @Override + public void resolvePageCalHighlight(Calculator calculator, CellElement cellElement) { + + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/report/ReportPretreatmentProcessorImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/report/ReportPretreatmentProcessorImpl.java new file mode 100644 index 0000000..16c2bb3 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/report/ReportPretreatmentProcessorImpl.java @@ -0,0 +1,13 @@ +package com.fr.plugin.report; + +import com.fr.report.fun.impl.AbstractReportPretreatmentProcessor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class ReportPretreatmentProcessorImpl extends AbstractReportPretreatmentProcessor { + @Override + public void process(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String s) { + + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/privilege/RSAUtil.java b/plugin-report-doc-demo/src/com/fr/privilege/RSAUtil.java new file mode 100644 index 0000000..d9d98e8 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/privilege/RSAUtil.java @@ -0,0 +1,205 @@ +package com.fr.privilege; + +import javax.crypto.Cipher; +import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.math.BigInteger; +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.SecureRandom; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.RSAPrivateKeySpec; +import java.security.spec.RSAPublicKeySpec; + +/** + * RSA 工具类。提供加密,解密,生成密钥对等方法。 + * 需要到http://www.bouncycastle.org下载bcprov-jdk14-123.jar。 + */ +public class RSAUtil { + /** + * * 生成密钥对 * + * + * @return KeyPair * + * @throws EncryptException + */ + public static KeyPair generateKeyPair() throws Exception { + try { + KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA", + new org.bouncycastle.jce.provider.BouncyCastleProvider()); + final int KEY_SIZE = 1024;// 没什么好说的了,这个值关系到块加密的大小,可以更改,但是不要太大,否则效率会低 + keyPairGen.initialize(KEY_SIZE, new SecureRandom()); + KeyPair keyPair = keyPairGen.generateKeyPair(); + saveKeyPair(keyPair); + return keyPair; + } catch (Exception e) { + throw new Exception(e.getMessage()); + } + } + + public static KeyPair getKeyPair() throws Exception { + FileInputStream fis = new FileInputStream("C:/RSAKey.txt"); + ObjectInputStream oos = new ObjectInputStream(fis); + KeyPair kp = (KeyPair) oos.readObject(); + oos.close(); + fis.close(); + return kp; + } + + public static void saveKeyPair(KeyPair kp) throws Exception { + + FileOutputStream fos = new FileOutputStream("C:/RSAKey.txt"); + ObjectOutputStream oos = new ObjectOutputStream(fos); + // 生成密钥 + oos.writeObject(kp); + oos.close(); + fos.close(); + } + + /** + * * 生成公钥 * + * + * @param modulus * + * @param publicExponent * + * @return RSAPublicKey * + * @throws Exception + */ + public static RSAPublicKey generateRSAPublicKey(byte[] modulus, + byte[] publicExponent) throws Exception { + KeyFactory keyFac = null; + try { + keyFac = KeyFactory.getInstance("RSA", + new org.bouncycastle.jce.provider.BouncyCastleProvider()); + } catch (NoSuchAlgorithmException ex) { + throw new Exception(ex.getMessage()); + } + + RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(new BigInteger( + modulus), new BigInteger(publicExponent)); + try { + return (RSAPublicKey) keyFac.generatePublic(pubKeySpec); + } catch (InvalidKeySpecException ex) { + throw new Exception(ex.getMessage()); + } + } + + /** + * * 生成私钥 * + * + * @param modulus * + * @param privateExponent * + * @return RSAPrivateKey * + * @throws Exception + */ + public static RSAPrivateKey generateRSAPrivateKey(byte[] modulus, + byte[] privateExponent) throws Exception { + KeyFactory keyFac = null; + try { + keyFac = KeyFactory.getInstance("RSA", + new org.bouncycastle.jce.provider.BouncyCastleProvider()); + } catch (NoSuchAlgorithmException ex) { + throw new Exception(ex.getMessage()); + } + + RSAPrivateKeySpec priKeySpec = new RSAPrivateKeySpec(new BigInteger( + modulus), new BigInteger(privateExponent)); + try { + return (RSAPrivateKey) keyFac.generatePrivate(priKeySpec); + } catch (InvalidKeySpecException ex) { + throw new Exception(ex.getMessage()); + } + } + + /** + * * 加密 * + * + * @param key 加密的密钥 * + * @param data 待加密的明文数据 * + * @return 加密后的数据 * + * @throws Exception + */ + public static byte[] encrypt(PublicKey pk, byte[] data) throws Exception { + try { + Cipher cipher = Cipher.getInstance("RSA", + new org.bouncycastle.jce.provider.BouncyCastleProvider()); + cipher.init(Cipher.ENCRYPT_MODE, pk); + int blockSize = cipher.getBlockSize();// 获得加密块大小,如:加密前数据为128个byte,而key_size=1024 + // 加密块大小为127 + // byte,加密后为128个byte;因此共有2个加密块,第一个127 + // byte第二个为1个byte + int outputSize = cipher.getOutputSize(data.length);// 获得加密块加密后块大小 + int leavedSize = data.length % blockSize; + int blocksSize = leavedSize != 0 ? data.length / blockSize + 1 + : data.length / blockSize; + byte[] raw = new byte[outputSize * blocksSize]; + int i = 0; + while (data.length - i * blockSize > 0) { + if (data.length - i * blockSize > blockSize) + cipher.doFinal(data, i * blockSize, blockSize, raw, i + * outputSize); + else + cipher.doFinal(data, i * blockSize, data.length - i + * blockSize, raw, i * outputSize); + // 这里面doUpdate方法不可用,查看源代码后发现每次doUpdate后并没有什么实际动作除了把byte[]放到 + // ByteArrayOutputStream中,而最后doFinal的时候才将所有的byte[]进行加密,可是到了此时加密块大小很可能已经超出了 + // OutputSize所以只好用dofinal方法。 + + i++; + } + return raw; + } catch (Exception e) { + throw new Exception(e.getMessage()); + } + } + + /** + * * 解密 * + * + * @param key 解密的密钥 * + * @param raw 已经加密的数据 * + * @return 解密后的明文 * + * @throws Exception + */ + public static byte[] decrypt(PrivateKey pk, byte[] raw) throws Exception { + try { + Cipher cipher = Cipher.getInstance("RSA", + new org.bouncycastle.jce.provider.BouncyCastleProvider()); + cipher.init(cipher.DECRYPT_MODE, pk); + int blockSize = cipher.getBlockSize(); + ByteArrayOutputStream bout = new ByteArrayOutputStream(64); + int j = 0; + + while (raw.length - j * blockSize > 0) { + bout.write(cipher.doFinal(raw, j * blockSize, blockSize)); + j++; + } + return bout.toByteArray(); + } catch (Exception e) { + throw new Exception(e.getMessage()); + } + } + + /** + * * * + * + * @param args * + * @throws Exception + */ + public static void main(String[] args) throws Exception { + RSAPublicKey rsap = (RSAPublicKey) RSAUtil.generateKeyPair() + .getPublic(); + String test = "hello world"; + byte[] en_test = encrypt(getKeyPair().getPublic(), test.getBytes()); + System.out.println("123:" + new String(en_test)); + byte[] de_test = decrypt(getKeyPair().getPrivate(), en_test); + System.out.println(new String(de_test)); + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/privilege/TestPasswordValidator.java b/plugin-report-doc-demo/src/com/fr/privilege/TestPasswordValidator.java new file mode 100644 index 0000000..973278a --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/privilege/TestPasswordValidator.java @@ -0,0 +1,21 @@ +package com.fr.privilege; + +import com.fr.privilege.providers.dao.AbstractPasswordEncode; + +public class TestPasswordValidator extends AbstractPasswordEncode { + + @Override + public int layerIndex() { + return DEFAULT_LAYER_INDEX; + } + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + public String encodePassword(String clientPassword) { + return (clientPassword + "FR");//即获取用户输入的密码然后在后面加上FR,再与数据库密码匹配。 + } + +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/privilege/TestPasswordValidatorRSA.java b/plugin-report-doc-demo/src/com/fr/privilege/TestPasswordValidatorRSA.java new file mode 100644 index 0000000..0e4c229 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/privilege/TestPasswordValidatorRSA.java @@ -0,0 +1,33 @@ +package com.fr.privilege; + +import com.fr.privilege.providers.dao.AbstractPasswordValidator; + +public class TestPasswordValidatorRSA extends AbstractPasswordValidator { + //@Override + public String encodePassword(String clinetPassword) { + try { + //对密码进行翻转如输入ab翻转后为ba + StringBuffer sb = new StringBuffer(); + sb.append(new String(clinetPassword)); + String bb = sb.reverse().toString(); + //进行加密 + byte[] en_test = RSAUtil.encrypt(RSAUtil.getKeyPair().getPublic(), bb.getBytes()); + //进行解密,如果数据库里面保存的是加密码,则此处不需要进行解密 + byte[] de_test = RSAUtil.decrypt(RSAUtil.getKeyPair().getPrivate(), en_test); + //返回加密密码 + clinetPassword = new String(de_test); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return clinetPassword; //即获取加密密码再与数据库密码匹配。 + } + + @Override + public boolean validatePassword(String arg0, String arg1) { + // TODO Auto-generated method stub + return false; + } + + +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/privilege/TestPasswordValidatorUser.java b/plugin-report-doc-demo/src/com/fr/privilege/TestPasswordValidatorUser.java new file mode 100644 index 0000000..8642817 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/privilege/TestPasswordValidatorUser.java @@ -0,0 +1,46 @@ +package com.fr.privilege; + +import com.fr.privilege.providers.dao.AbstractPasswordEncode; + +public class TestPasswordValidatorUser extends AbstractPasswordEncode { + + /** + * 三个参数的密码加密算法:满足数据库密码=FR+用户名+密码+RF,返回true + * + * @param localPassword 存储在数据库中的密码 + * @param clientPassword 用户输入的密码 + * @param clientUsername 用户名 + * @return 是否验证成功 + */ + @Override + public int layerIndex() { + return DEFAULT_LAYER_INDEX; + } + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + public String encodePassword(String clientPassword, String clientUsername) { + return "FR" + clientUsername + clientPassword + "RF"; + + } + + /** + * 验证密码时是否要忽略用户名 + */ + public boolean shouldIgnoreUsername() { + return false; + } + + @Override + public String encodePassword(String arg0) { + // TODO Auto-generated method stub + return null; + } + + /** + * 2个参数的密码验证方法,直接return false + */ +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/test/gauthority.java b/plugin-report-doc-demo/src/com/fr/test/gauthority.java new file mode 100644 index 0000000..19dd38d --- /dev/null +++ b/plugin-report-doc-demo/src/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 ""; + } +} diff --git a/plugin-report-doc-demo/src/main/java/com/fr/learn/Leaner.java b/plugin-report-doc-demo/src/main/java/com/fr/learn/Leaner.java new file mode 100644 index 0000000..c35f2ab --- /dev/null +++ b/plugin-report-doc-demo/src/main/java/com/fr/learn/Leaner.java @@ -0,0 +1,16 @@ +package com.fr.learn; + +import com.fr.start.Designer; + +public class Leaner extends Designer { + + static { + // 这段代码让插件能支持远程设计的时候的调试 + String workDir = System.getProperty("user.dir"); + System.setProperty("fine.plugin.home", workDir + "/webroot/WEB-INF/plugins"); + } + + public Leaner(String[] strings) { + super(strings); + } +} diff --git a/plugin-report-doc-demo/src/main/java/com/fr/learn/Learner4Debug.java b/plugin-report-doc-demo/src/main/java/com/fr/learn/Learner4Debug.java new file mode 100644 index 0000000..94b77f6 --- /dev/null +++ b/plugin-report-doc-demo/src/main/java/com/fr/learn/Learner4Debug.java @@ -0,0 +1,8 @@ +package com.fr.learn; + +public class Learner4Debug { + + public static void main(String... args) { + org.swingexplorer.Launcher.main(new String[]{"com.fr.start.Designer"}); + } +} diff --git a/plugin-report-doc-demo/src/mobile/MobileCodeWSCallbackHandler.java b/plugin-report-doc-demo/src/mobile/MobileCodeWSCallbackHandler.java new file mode 100644 index 0000000..f7a3e59 --- /dev/null +++ b/plugin-report-doc-demo/src/mobile/MobileCodeWSCallbackHandler.java @@ -0,0 +1,71 @@ +/** + * MobileCodeWSCallbackHandler.java + *

+ * This file was auto-generated from WSDL + * by the Apache Axis2 version: 1.7.3 Built on : May 30, 2016 (04:08:57 BST) + */ +package mobile; + + +/** + * MobileCodeWSCallbackHandler Callback class, Users can extend this class and implement + * their own receiveResult and receiveError methods. + */ +public abstract class MobileCodeWSCallbackHandler { + protected Object clientData; + + /** + * User can pass in any object that needs to be accessed once the NonBlocking + * Web service call is finished and appropriate method of this CallBack is called. + * + * @param clientData Object mechanism by which the user can pass in user data + * that will be avilable at the time this callback is called. + */ + public MobileCodeWSCallbackHandler(Object clientData) { + this.clientData = clientData; + } + + /** + * Please use this constructor if you don't want to set any clientData + */ + public MobileCodeWSCallbackHandler() { + this.clientData = null; + } + + /** + * Get the client data + */ + public Object getClientData() { + return clientData; + } + + /** + * auto generated Axis2 call back method for getMobileCodeInfo method + * override this method for handling normal response from getMobileCodeInfo operation + */ + public void receiveResultgetMobileCodeInfo( + mobile.MobileCodeWSStub.GetMobileCodeInfoResponse result) { + } + + /** + * auto generated Axis2 Error handler + * override this method for handling error response from getMobileCodeInfo operation + */ + public void receiveErrorgetMobileCodeInfo(Exception e) { + } + + /** + * auto generated Axis2 call back method for getDatabaseInfo method + * override this method for handling normal response from getDatabaseInfo operation + */ + public void receiveResultgetDatabaseInfo( + mobile.MobileCodeWSStub.GetDatabaseInfoResponse result) { + } + + /** + * auto generated Axis2 Error handler + * override this method for handling error response from getDatabaseInfo operation + */ + public void receiveErrorgetDatabaseInfo(Exception e) { + } +} diff --git a/plugin-report-doc-demo/src/mobile/MobileCodeWSStub.java b/plugin-report-doc-demo/src/mobile/MobileCodeWSStub.java new file mode 100644 index 0000000..8f6199b --- /dev/null +++ b/plugin-report-doc-demo/src/mobile/MobileCodeWSStub.java @@ -0,0 +1,3780 @@ +/** + * MobileCodeWSStub.java + *

+ * This file was auto-generated from WSDL + * by the Apache Axis2 version: 1.7.3 Built on : May 30, 2016 (04:08:57 BST) + */ +package mobile; + +import javax.xml.namespace.QName; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; + + +/* + * MobileCodeWSStub java implementation + */ +public class MobileCodeWSStub extends org.apache.axis2.client.Stub { + private static int counter = 0; + protected org.apache.axis2.description.AxisOperation[] _operations; + + //hashmaps to keep the fault mapping + private java.util.HashMap faultExceptionNameMap = new java.util.HashMap(); + private java.util.HashMap faultExceptionClassNameMap = new java.util.HashMap(); + private java.util.HashMap faultMessageMap = new java.util.HashMap(); + private QName[] opNameArray = null; + + /** + * Constructor that takes in a configContext + */ + public MobileCodeWSStub( + org.apache.axis2.context.ConfigurationContext configurationContext, + java.lang.String targetEndpoint) throws org.apache.axis2.AxisFault { + this(configurationContext, targetEndpoint, false); + } + + /** + * Constructor that takes in a configContext and useseperate listner + */ + public MobileCodeWSStub( + org.apache.axis2.context.ConfigurationContext configurationContext, + java.lang.String targetEndpoint, boolean useSeparateListener) + throws org.apache.axis2.AxisFault { + //To populate AxisService + populateAxisService(); + populateFaults(); + + _serviceClient = new org.apache.axis2.client.ServiceClient(configurationContext, + _service); + + _serviceClient.getOptions() + .setTo(new org.apache.axis2.addressing.EndpointReference( + targetEndpoint)); + _serviceClient.getOptions().setUseSeparateListener(useSeparateListener); + + //Set the soap version + _serviceClient.getOptions() + .setSoapVersionURI(org.apache.axiom.soap.SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI); + } + + /** + * Default Constructor + */ + public MobileCodeWSStub( + org.apache.axis2.context.ConfigurationContext configurationContext) + throws org.apache.axis2.AxisFault { + this(configurationContext, + "http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx"); + } + + /** + * Default Constructor + */ + public MobileCodeWSStub() throws org.apache.axis2.AxisFault { + this("http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx"); + } + + /** + * Constructor taking the target endpoint + */ + public MobileCodeWSStub(java.lang.String targetEndpoint) + throws org.apache.axis2.AxisFault { + this(null, targetEndpoint); + } + + private static synchronized java.lang.String getUniqueSuffix() { + // reset the counter if it is greater than 99999 + if (counter > 99999) { + counter = 0; + } + + counter = counter + 1; + + return Long.toString(System.currentTimeMillis()) + + "_" + counter; + } + + private void populateAxisService() throws org.apache.axis2.AxisFault { + //creating the Service with a unique name + _service = new org.apache.axis2.description.AxisService("MobileCodeWS" + + getUniqueSuffix()); + addAnonymousOperations(); + + //creating the operations + org.apache.axis2.description.AxisOperation __operation; + + _operations = new org.apache.axis2.description.AxisOperation[2]; + + __operation = new org.apache.axis2.description.OutInAxisOperation(); + + __operation.setName(new QName( + "http://WebXml.com.cn/", "getDatabaseInfo")); + _service.addOperation(__operation); + + _operations[0] = __operation; + + __operation = new org.apache.axis2.description.OutInAxisOperation(); + + __operation.setName(new QName( + "http://WebXml.com.cn/", "getMobileCodeInfo")); + _service.addOperation(__operation); + + _operations[1] = __operation; + } + + //populates the faults + private void populateFaults() { + } + + /** + * Auto generated method signature + * <br /><h3>获得国内手机号码归属地数据库信息</h3><p>输入参数:无;返回数据:�?��字符串数组(省份 城市 记录数量)�?</p><br /> + * + * @param getDatabaseInfo0 + * @see mobile.MobileCodeWS#getDatabaseInfo + */ + public GetDatabaseInfoResponse getDatabaseInfo( + GetDatabaseInfo getDatabaseInfo0) + throws java.rmi.RemoteException { + org.apache.axis2.context.MessageContext _messageContext = null; + + try { + org.apache.axis2.client.OperationClient _operationClient = _serviceClient.createClient(_operations[0].getName()); + _operationClient.getOptions() + .setAction("http://WebXml.com.cn/getDatabaseInfo"); + _operationClient.getOptions().setExceptionToBeThrownOnSOAPFault(true); + + addPropertyToOperationClient(_operationClient, + org.apache.axis2.description.WSDL2Constants.ATTR_WHTTP_QUERY_PARAMETER_SEPARATOR, + "&"); + + // create a message context + _messageContext = new org.apache.axis2.context.MessageContext(); + + // create SOAP envelope with that payload + org.apache.axiom.soap.SOAPEnvelope env = null; + + env = toEnvelope(getFactory(_operationClient.getOptions() + .getSoapVersionURI()), + getDatabaseInfo0, + optimizeContent( + new QName("http://WebXml.com.cn/", + "getDatabaseInfo")), + new QName("http://WebXml.com.cn/", + "getDatabaseInfo")); + + //adding SOAP soap_headers + _serviceClient.addHeadersToEnvelope(env); + // set the message context with that soap envelope + _messageContext.setEnvelope(env); + + // add the message contxt to the operation client + _operationClient.addMessageContext(_messageContext); + + //execute the operation client + _operationClient.execute(true); + + org.apache.axis2.context.MessageContext _returnMessageContext = _operationClient.getMessageContext(org.apache.axis2.wsdl.WSDLConstants.MESSAGE_LABEL_IN_VALUE); + org.apache.axiom.soap.SOAPEnvelope _returnEnv = _returnMessageContext.getEnvelope(); + + Object object = fromOM(_returnEnv.getBody() + .getFirstElement(), + GetDatabaseInfoResponse.class); + + return (GetDatabaseInfoResponse) object; + } catch (org.apache.axis2.AxisFault f) { + org.apache.axiom.om.OMElement faultElt = f.getDetail(); + + if (faultElt != null) { + if (faultExceptionNameMap.containsKey( + new org.apache.axis2.client.FaultMapKey( + faultElt.getQName(), "getDatabaseInfo"))) { + //make the fault by reflection + try { + java.lang.String exceptionClassName = (java.lang.String) faultExceptionClassNameMap.get(new org.apache.axis2.client.FaultMapKey( + faultElt.getQName(), "getDatabaseInfo")); + Class exceptionClass = Class.forName(exceptionClassName); + java.lang.reflect.Constructor constructor = exceptionClass.getConstructor(new Class[]{java.lang.String.class}); + Exception ex = (Exception) constructor.newInstance(new Object[]{f.getMessage()}); + + //message class + java.lang.String messageClassName = (java.lang.String) faultMessageMap.get(new org.apache.axis2.client.FaultMapKey( + faultElt.getQName(), "getDatabaseInfo")); + Class messageClass = Class.forName(messageClassName); + Object messageObject = fromOM(faultElt, + messageClass); + java.lang.reflect.Method m = exceptionClass.getMethod("setFaultMessage", + new Class[]{messageClass}); + m.invoke(ex, new Object[]{messageObject}); + + throw new java.rmi.RemoteException(ex.getMessage(), ex); + } catch (ClassCastException e) { + // we cannot intantiate the class - throw the original Axis fault + throw f; + } catch (ClassNotFoundException e) { + // we cannot intantiate the class - throw the original Axis fault + throw f; + } catch (NoSuchMethodException e) { + // we cannot intantiate the class - throw the original Axis fault + throw f; + } catch (java.lang.reflect.InvocationTargetException e) { + // we cannot intantiate the class - throw the original Axis fault + throw f; + } catch (IllegalAccessException e) { + // we cannot intantiate the class - throw the original Axis fault + throw f; + } catch (InstantiationException e) { + // we cannot intantiate the class - throw the original Axis fault + throw f; + } + } else { + throw f; + } + } else { + throw f; + } + } finally { + if (_messageContext.getTransportOut() != null) { + _messageContext.getTransportOut().getSender() + .cleanup(_messageContext); + } + } + } + + /** + * Auto generated method signature for Asynchronous Invocations + * <br /><h3>获得国内手机号码归属地数据库信息</h3><p>输入参数:无;返回数据:�?��字符串数组(省份 城市 记录数量)�?</p><br /> + * + * @param getDatabaseInfo0 + * @see mobile.MobileCodeWS#startgetDatabaseInfo + */ + public void startgetDatabaseInfo( + GetDatabaseInfo getDatabaseInfo0, + final MobileCodeWSCallbackHandler callback) + throws java.rmi.RemoteException { + org.apache.axis2.client.OperationClient _operationClient = _serviceClient.createClient(_operations[0].getName()); + _operationClient.getOptions() + .setAction("http://WebXml.com.cn/getDatabaseInfo"); + _operationClient.getOptions().setExceptionToBeThrownOnSOAPFault(true); + + addPropertyToOperationClient(_operationClient, + org.apache.axis2.description.WSDL2Constants.ATTR_WHTTP_QUERY_PARAMETER_SEPARATOR, + "&"); + + // create SOAP envelope with that payload + org.apache.axiom.soap.SOAPEnvelope env = null; + final org.apache.axis2.context.MessageContext _messageContext = new org.apache.axis2.context.MessageContext(); + + //Style is Doc. + env = toEnvelope(getFactory(_operationClient.getOptions() + .getSoapVersionURI()), + getDatabaseInfo0, + optimizeContent( + new QName("http://WebXml.com.cn/", + "getDatabaseInfo")), + new QName("http://WebXml.com.cn/", + "getDatabaseInfo")); + + // adding SOAP soap_headers + _serviceClient.addHeadersToEnvelope(env); + // create message context with that soap envelope + _messageContext.setEnvelope(env); + + // add the message context to the operation client + _operationClient.addMessageContext(_messageContext); + + _operationClient.setCallback(new org.apache.axis2.client.async.AxisCallback() { + public void onMessage( + org.apache.axis2.context.MessageContext resultContext) { + try { + org.apache.axiom.soap.SOAPEnvelope resultEnv = resultContext.getEnvelope(); + + Object object = fromOM(resultEnv.getBody() + .getFirstElement(), + GetDatabaseInfoResponse.class); + callback.receiveResultgetDatabaseInfo((GetDatabaseInfoResponse) object); + } catch (org.apache.axis2.AxisFault e) { + callback.receiveErrorgetDatabaseInfo(e); + } + } + + public void onError(Exception error) { + if (error instanceof org.apache.axis2.AxisFault) { + org.apache.axis2.AxisFault f = (org.apache.axis2.AxisFault) error; + org.apache.axiom.om.OMElement faultElt = f.getDetail(); + + if (faultElt != null) { + if (faultExceptionNameMap.containsKey( + new org.apache.axis2.client.FaultMapKey( + faultElt.getQName(), + "getDatabaseInfo"))) { + //make the fault by reflection + try { + java.lang.String exceptionClassName = (java.lang.String) faultExceptionClassNameMap.get(new org.apache.axis2.client.FaultMapKey( + faultElt.getQName(), + "getDatabaseInfo")); + Class exceptionClass = Class.forName(exceptionClassName); + java.lang.reflect.Constructor constructor = exceptionClass.getConstructor(new Class[]{java.lang.String.class}); + Exception ex = (Exception) constructor.newInstance(new Object[]{f.getMessage()}); + + //message class + java.lang.String messageClassName = (java.lang.String) faultMessageMap.get(new org.apache.axis2.client.FaultMapKey( + faultElt.getQName(), + "getDatabaseInfo")); + Class messageClass = Class.forName(messageClassName); + Object messageObject = fromOM(faultElt, + messageClass); + java.lang.reflect.Method m = exceptionClass.getMethod("setFaultMessage", + new Class[]{messageClass}); + m.invoke(ex, + new Object[]{messageObject}); + + callback.receiveErrorgetDatabaseInfo(new java.rmi.RemoteException( + ex.getMessage(), ex)); + } catch (ClassCastException e) { + // we cannot intantiate the class - throw the original Axis fault + callback.receiveErrorgetDatabaseInfo(f); + } catch (ClassNotFoundException e) { + // we cannot intantiate the class - throw the original Axis fault + callback.receiveErrorgetDatabaseInfo(f); + } catch (NoSuchMethodException e) { + // we cannot intantiate the class - throw the original Axis fault + callback.receiveErrorgetDatabaseInfo(f); + } catch (java.lang.reflect.InvocationTargetException e) { + // we cannot intantiate the class - throw the original Axis fault + callback.receiveErrorgetDatabaseInfo(f); + } catch (IllegalAccessException e) { + // we cannot intantiate the class - throw the original Axis fault + callback.receiveErrorgetDatabaseInfo(f); + } catch (InstantiationException e) { + // we cannot intantiate the class - throw the original Axis fault + callback.receiveErrorgetDatabaseInfo(f); + } catch (org.apache.axis2.AxisFault e) { + // we cannot intantiate the class - throw the original Axis fault + callback.receiveErrorgetDatabaseInfo(f); + } + } else { + callback.receiveErrorgetDatabaseInfo(f); + } + } else { + callback.receiveErrorgetDatabaseInfo(f); + } + } else { + callback.receiveErrorgetDatabaseInfo(error); + } + } + + public void onFault( + org.apache.axis2.context.MessageContext faultContext) { + org.apache.axis2.AxisFault fault = org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(faultContext); + onError(fault); + } + + public void onComplete() { + try { + _messageContext.getTransportOut().getSender() + .cleanup(_messageContext); + } catch (org.apache.axis2.AxisFault axisFault) { + callback.receiveErrorgetDatabaseInfo(axisFault); + } + } + }); + + org.apache.axis2.util.CallbackReceiver _callbackReceiver = null; + + if ((_operations[0].getMessageReceiver() == null) && + _operationClient.getOptions().isUseSeparateListener()) { + _callbackReceiver = new org.apache.axis2.util.CallbackReceiver(); + _operations[0].setMessageReceiver(_callbackReceiver); + } + + //execute the operation client + _operationClient.execute(false); + } + + /** + * Auto generated method signature + * <br /><h3>获得国内手机号码归属地省份�?地区和手机卡类型信息</h3><p>输入参数:mobileCode = 字符串(手机号码,最少前7位数字),userID = 字符串(商业用户ID�?免费用户为空字符串;返回数据:字符串(手机号码:省份 城市 手机卡类型)�?lt;/p><br /> + * + * @param getMobileCodeInfo2 + * @see mobile.MobileCodeWS#getMobileCodeInfo + */ + public GetMobileCodeInfoResponse getMobileCodeInfo( + GetMobileCodeInfo getMobileCodeInfo2) + throws java.rmi.RemoteException { + org.apache.axis2.context.MessageContext _messageContext = null; + + try { + org.apache.axis2.client.OperationClient _operationClient = _serviceClient.createClient(_operations[1].getName()); + _operationClient.getOptions() + .setAction("http://WebXml.com.cn/getMobileCodeInfo"); + _operationClient.getOptions().setExceptionToBeThrownOnSOAPFault(true); + + addPropertyToOperationClient(_operationClient, + org.apache.axis2.description.WSDL2Constants.ATTR_WHTTP_QUERY_PARAMETER_SEPARATOR, + "&"); + + // create a message context + _messageContext = new org.apache.axis2.context.MessageContext(); + + // create SOAP envelope with that payload + org.apache.axiom.soap.SOAPEnvelope env = null; + + env = toEnvelope(getFactory(_operationClient.getOptions() + .getSoapVersionURI()), + getMobileCodeInfo2, + optimizeContent( + new QName("http://WebXml.com.cn/", + "getMobileCodeInfo")), + new QName("http://WebXml.com.cn/", + "getMobileCodeInfo")); + + //adding SOAP soap_headers + _serviceClient.addHeadersToEnvelope(env); + // set the message context with that soap envelope + _messageContext.setEnvelope(env); + + // add the message contxt to the operation client + _operationClient.addMessageContext(_messageContext); + + //execute the operation client + _operationClient.execute(true); + + org.apache.axis2.context.MessageContext _returnMessageContext = _operationClient.getMessageContext(org.apache.axis2.wsdl.WSDLConstants.MESSAGE_LABEL_IN_VALUE); + org.apache.axiom.soap.SOAPEnvelope _returnEnv = _returnMessageContext.getEnvelope(); + + Object object = fromOM(_returnEnv.getBody() + .getFirstElement(), + GetMobileCodeInfoResponse.class); + + return (GetMobileCodeInfoResponse) object; + } catch (org.apache.axis2.AxisFault f) { + org.apache.axiom.om.OMElement faultElt = f.getDetail(); + + if (faultElt != null) { + if (faultExceptionNameMap.containsKey( + new org.apache.axis2.client.FaultMapKey( + faultElt.getQName(), "getMobileCodeInfo"))) { + //make the fault by reflection + try { + java.lang.String exceptionClassName = (java.lang.String) faultExceptionClassNameMap.get(new org.apache.axis2.client.FaultMapKey( + faultElt.getQName(), "getMobileCodeInfo")); + Class exceptionClass = Class.forName(exceptionClassName); + java.lang.reflect.Constructor constructor = exceptionClass.getConstructor(new Class[]{java.lang.String.class}); + Exception ex = (Exception) constructor.newInstance(new Object[]{new Object[]{f.getMessage()}}); + + //message class + java.lang.String messageClassName = (java.lang.String) faultMessageMap.get(new org.apache.axis2.client.FaultMapKey( + faultElt.getQName(), "getMobileCodeInfo")); + Class messageClass = Class.forName(messageClassName); + Object messageObject = fromOM(faultElt, + messageClass); + java.lang.reflect.Method m = exceptionClass.getMethod("setFaultMessage", + new Class[]{messageClass}); + m.invoke(ex, new Object[]{messageObject}); + + throw new java.rmi.RemoteException(ex.getMessage(), ex); + } catch (ClassCastException e) { + // we cannot intantiate the class - throw the original Axis fault + throw f; + } catch (ClassNotFoundException e) { + // we cannot intantiate the class - throw the original Axis fault + throw f; + } catch (NoSuchMethodException e) { + // we cannot intantiate the class - throw the original Axis fault + throw f; + } catch (java.lang.reflect.InvocationTargetException e) { + // we cannot intantiate the class - throw the original Axis fault + throw f; + } catch (IllegalAccessException e) { + // we cannot intantiate the class - throw the original Axis fault + throw f; + } catch (InstantiationException e) { + // we cannot intantiate the class - throw the original Axis fault + throw f; + } + } else { + throw f; + } + } else { + throw f; + } + } finally { + if (_messageContext.getTransportOut() != null) { + _messageContext.getTransportOut().getSender() + .cleanup(_messageContext); + } + } + } + + /** + * Auto generated method signature for Asynchronous Invocations + * <br /><h3>获得国内手机号码归属地省份�?地区和手机卡类型信息</h3><p>输入参数:mobileCode = 字符串(手机号码,最少前7位数字),userID = 字符串(商业用户ID�?免费用户为空字符串;返回数据:字符串(手机号码:省份 城市 手机卡类型)�?lt;/p><br /> + * + * @param getMobileCodeInfo2 + * @see mobile.MobileCodeWS#startgetMobileCodeInfo + */ + public void startgetMobileCodeInfo( + GetMobileCodeInfo getMobileCodeInfo2, + final MobileCodeWSCallbackHandler callback) + throws java.rmi.RemoteException { + org.apache.axis2.client.OperationClient _operationClient = _serviceClient.createClient(_operations[1].getName()); + _operationClient.getOptions() + .setAction("http://WebXml.com.cn/getMobileCodeInfo"); + _operationClient.getOptions().setExceptionToBeThrownOnSOAPFault(true); + + addPropertyToOperationClient(_operationClient, + org.apache.axis2.description.WSDL2Constants.ATTR_WHTTP_QUERY_PARAMETER_SEPARATOR, + "&"); + + // create SOAP envelope with that payload + org.apache.axiom.soap.SOAPEnvelope env = null; + final org.apache.axis2.context.MessageContext _messageContext = new org.apache.axis2.context.MessageContext(); + + //Style is Doc. + env = toEnvelope(getFactory(_operationClient.getOptions() + .getSoapVersionURI()), + getMobileCodeInfo2, + optimizeContent( + new QName("http://WebXml.com.cn/", + "getMobileCodeInfo")), + new QName("http://WebXml.com.cn/", + "getMobileCodeInfo")); + + // adding SOAP soap_headers + _serviceClient.addHeadersToEnvelope(env); + // create message context with that soap envelope + _messageContext.setEnvelope(env); + + // add the message context to the operation client + _operationClient.addMessageContext(_messageContext); + + _operationClient.setCallback(new org.apache.axis2.client.async.AxisCallback() { + public void onMessage( + org.apache.axis2.context.MessageContext resultContext) { + try { + org.apache.axiom.soap.SOAPEnvelope resultEnv = resultContext.getEnvelope(); + + Object object = fromOM(resultEnv.getBody() + .getFirstElement(), + GetMobileCodeInfoResponse.class); + callback.receiveResultgetMobileCodeInfo((GetMobileCodeInfoResponse) object); + } catch (org.apache.axis2.AxisFault e) { + callback.receiveErrorgetMobileCodeInfo(e); + } + } + + public void onError(Exception error) { + if (error instanceof org.apache.axis2.AxisFault) { + org.apache.axis2.AxisFault f = (org.apache.axis2.AxisFault) error; + org.apache.axiom.om.OMElement faultElt = f.getDetail(); + + if (faultElt != null) { + if (faultExceptionNameMap.containsKey( + new org.apache.axis2.client.FaultMapKey( + faultElt.getQName(), + "getMobileCodeInfo"))) { + //make the fault by reflection + try { + java.lang.String exceptionClassName = (java.lang.String) faultExceptionClassNameMap.get(new org.apache.axis2.client.FaultMapKey( + faultElt.getQName(), + "getMobileCodeInfo")); + Class exceptionClass = Class.forName(exceptionClassName); + java.lang.reflect.Constructor constructor = exceptionClass.getConstructor(new Class[]{java.lang.String.class}); + Exception ex = (Exception) constructor.newInstance(new Object[]{f.getMessage()}); + + //message class + java.lang.String messageClassName = (java.lang.String) faultMessageMap.get(new org.apache.axis2.client.FaultMapKey( + faultElt.getQName(), + "getMobileCodeInfo")); + Class messageClass = Class.forName(messageClassName); + Object messageObject = fromOM(faultElt, + messageClass); + java.lang.reflect.Method m = exceptionClass.getMethod("setFaultMessage", + new Class[]{messageClass}); + m.invoke(ex, + new Object[]{messageObject}); + + callback.receiveErrorgetMobileCodeInfo(new java.rmi.RemoteException( + ex.getMessage(), ex)); + } catch (ClassCastException e) { + // we cannot intantiate the class - throw the original Axis fault + callback.receiveErrorgetMobileCodeInfo(f); + } catch (ClassNotFoundException e) { + // we cannot intantiate the class - throw the original Axis fault + callback.receiveErrorgetMobileCodeInfo(f); + } catch (NoSuchMethodException e) { + // we cannot intantiate the class - throw the original Axis fault + callback.receiveErrorgetMobileCodeInfo(f); + } catch (java.lang.reflect.InvocationTargetException e) { + // we cannot intantiate the class - throw the original Axis fault + callback.receiveErrorgetMobileCodeInfo(f); + } catch (IllegalAccessException e) { + // we cannot intantiate the class - throw the original Axis fault + callback.receiveErrorgetMobileCodeInfo(f); + } catch (InstantiationException e) { + // we cannot intantiate the class - throw the original Axis fault + callback.receiveErrorgetMobileCodeInfo(f); + } catch (org.apache.axis2.AxisFault e) { + // we cannot intantiate the class - throw the original Axis fault + callback.receiveErrorgetMobileCodeInfo(f); + } + } else { + callback.receiveErrorgetMobileCodeInfo(f); + } + } else { + callback.receiveErrorgetMobileCodeInfo(f); + } + } else { + callback.receiveErrorgetMobileCodeInfo(error); + } + } + + public void onFault( + org.apache.axis2.context.MessageContext faultContext) { + org.apache.axis2.AxisFault fault = org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(faultContext); + onError(fault); + } + + public void onComplete() { + try { + _messageContext.getTransportOut().getSender() + .cleanup(_messageContext); + } catch (org.apache.axis2.AxisFault axisFault) { + callback.receiveErrorgetMobileCodeInfo(axisFault); + } + } + }); + + org.apache.axis2.util.CallbackReceiver _callbackReceiver = null; + + if ((_operations[1].getMessageReceiver() == null) && + _operationClient.getOptions().isUseSeparateListener()) { + _callbackReceiver = new org.apache.axis2.util.CallbackReceiver(); + _operations[1].setMessageReceiver(_callbackReceiver); + } + + //execute the operation client + _operationClient.execute(false); + } + + private boolean optimizeContent(QName opName) { + if (opNameArray == null) { + return false; + } + + for (int i = 0; i < opNameArray.length; i++) { + if (opName.equals(opNameArray[i])) { + return true; + } + } + + return false; + } + + private org.apache.axiom.om.OMElement toOM( + GetDatabaseInfo param, boolean optimizeContent) + throws org.apache.axis2.AxisFault { + try { + return param.getOMElement(GetDatabaseInfo.MY_QNAME, + org.apache.axiom.om.OMAbstractFactory.getOMFactory()); + } catch (org.apache.axis2.databinding.ADBException e) { + throw org.apache.axis2.AxisFault.makeFault(e); + } + } + + private org.apache.axiom.om.OMElement toOM( + GetDatabaseInfoResponse param, + boolean optimizeContent) throws org.apache.axis2.AxisFault { + try { + return param.getOMElement(GetDatabaseInfoResponse.MY_QNAME, + org.apache.axiom.om.OMAbstractFactory.getOMFactory()); + } catch (org.apache.axis2.databinding.ADBException e) { + throw org.apache.axis2.AxisFault.makeFault(e); + } + } + + private org.apache.axiom.om.OMElement toOM( + GetMobileCodeInfo param, boolean optimizeContent) + throws org.apache.axis2.AxisFault { + try { + return param.getOMElement(GetMobileCodeInfo.MY_QNAME, + org.apache.axiom.om.OMAbstractFactory.getOMFactory()); + } catch (org.apache.axis2.databinding.ADBException e) { + throw org.apache.axis2.AxisFault.makeFault(e); + } + } + + private org.apache.axiom.om.OMElement toOM( + GetMobileCodeInfoResponse param, + boolean optimizeContent) throws org.apache.axis2.AxisFault { + try { + return param.getOMElement(GetMobileCodeInfoResponse.MY_QNAME, + org.apache.axiom.om.OMAbstractFactory.getOMFactory()); + } catch (org.apache.axis2.databinding.ADBException e) { + throw org.apache.axis2.AxisFault.makeFault(e); + } + } + + private org.apache.axiom.soap.SOAPEnvelope toEnvelope( + org.apache.axiom.soap.SOAPFactory factory, + GetDatabaseInfo param, boolean optimizeContent, + QName elementQName) + throws org.apache.axis2.AxisFault { + try { + org.apache.axiom.soap.SOAPEnvelope emptyEnvelope = factory.getDefaultEnvelope(); + emptyEnvelope.getBody() + .addChild(param.getOMElement( + GetDatabaseInfo.MY_QNAME, factory)); + + return emptyEnvelope; + } catch (org.apache.axis2.databinding.ADBException e) { + throw org.apache.axis2.AxisFault.makeFault(e); + } + } + + /* methods to provide back word compatibility */ + private org.apache.axiom.soap.SOAPEnvelope toEnvelope( + org.apache.axiom.soap.SOAPFactory factory, + GetMobileCodeInfo param, + boolean optimizeContent, QName elementQName) + throws org.apache.axis2.AxisFault { + try { + org.apache.axiom.soap.SOAPEnvelope emptyEnvelope = factory.getDefaultEnvelope(); + emptyEnvelope.getBody() + .addChild(param.getOMElement( + GetMobileCodeInfo.MY_QNAME, factory)); + + return emptyEnvelope; + } catch (org.apache.axis2.databinding.ADBException e) { + throw org.apache.axis2.AxisFault.makeFault(e); + } + } + + /* methods to provide back word compatibility */ + + /** + * get the default envelope + */ + private org.apache.axiom.soap.SOAPEnvelope toEnvelope( + org.apache.axiom.soap.SOAPFactory factory) { + return factory.getDefaultEnvelope(); + } + + private Object fromOM(org.apache.axiom.om.OMElement param, + Class type) throws org.apache.axis2.AxisFault { + try { + if (GetDatabaseInfo.class.equals(type)) { + return GetDatabaseInfo.Factory.parse(param.getXMLStreamReaderWithoutCaching()); + } + + if (GetDatabaseInfoResponse.class.equals( + type)) { + return GetDatabaseInfoResponse.Factory.parse(param.getXMLStreamReaderWithoutCaching()); + } + + if (GetMobileCodeInfo.class.equals(type)) { + return GetMobileCodeInfo.Factory.parse(param.getXMLStreamReaderWithoutCaching()); + } + + if (GetMobileCodeInfoResponse.class.equals( + type)) { + return GetMobileCodeInfoResponse.Factory.parse(param.getXMLStreamReaderWithoutCaching()); + } + } catch (Exception e) { + throw org.apache.axis2.AxisFault.makeFault(e); + } + + return null; + } + + //http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx + public static class ArrayOfStringE implements org.apache.axis2.databinding.ADBBean { + public static final QName MY_QNAME = new QName("http://WebXml.com.cn/", + "ArrayOfString", "ns1"); + + /** + * field for ArrayOfString + */ + protected ArrayOfString localArrayOfString; + + /** + * Auto generated getter method + * + * @return ArrayOfString + */ + public ArrayOfString getArrayOfString() { + return localArrayOfString; + } + + /** + * Auto generated setter method + * + * @param param ArrayOfString + */ + public void setArrayOfString(ArrayOfString param) { + this.localArrayOfString = param; + } + + /** + * @param parentQName + * @param factory + * @return org.apache.axiom.om.OMElement + */ + public org.apache.axiom.om.OMElement getOMElement( + final QName parentQName, + final org.apache.axiom.om.OMFactory factory) + throws org.apache.axis2.databinding.ADBException { + return factory.createOMElement(new org.apache.axis2.databinding.ADBDataSource( + this, MY_QNAME), parentQName); + } + + public void serialize(final QName parentQName, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException, + org.apache.axis2.databinding.ADBException { + serialize(parentQName, xmlWriter, false); + } + + public void serialize(final QName parentQName, + javax.xml.stream.XMLStreamWriter xmlWriter, boolean serializeType) + throws XMLStreamException, + org.apache.axis2.databinding.ADBException { + //We can safely assume an element has only one type associated with it + if (localArrayOfString == null) { + java.lang.String namespace = "http://WebXml.com.cn/"; + writeStartElement(null, namespace, "ArrayOfString", xmlWriter); + + // write the nil attribute + writeAttribute("xsi", + "http://www.w3.org/2001/XMLSchema-instance", "nil", "1", + xmlWriter); + xmlWriter.writeEndElement(); + } else { + localArrayOfString.serialize(MY_QNAME, xmlWriter); + } + } + + private static java.lang.String generatePrefix( + java.lang.String namespace) { + if (namespace.equals("http://WebXml.com.cn/")) { + return "ns1"; + } + + return org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix(); + } + + /** + * Utility method to write an element start tag. + */ + private void writeStartElement(java.lang.String prefix, + java.lang.String namespace, java.lang.String localPart, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String writerPrefix = xmlWriter.getPrefix(namespace); + + if (writerPrefix != null) { + xmlWriter.writeStartElement(writerPrefix, localPart, namespace); + } else { + if (namespace.length() == 0) { + prefix = ""; + } else if (prefix == null) { + prefix = generatePrefix(namespace); + } + + xmlWriter.writeStartElement(prefix, localPart, namespace); + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + } + } + + /** + * Util method to write an attribute with the ns prefix + */ + private void writeAttribute(java.lang.String prefix, + java.lang.String namespace, java.lang.String attName, + java.lang.String attValue, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String writerPrefix = xmlWriter.getPrefix(namespace); + + if (writerPrefix != null) { + xmlWriter.writeAttribute(writerPrefix, namespace, attName, + attValue); + } else { + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + xmlWriter.writeAttribute(prefix, namespace, attName, attValue); + } + } + + /** + * Util method to write an attribute without the ns prefix + */ + private void writeAttribute(java.lang.String namespace, + java.lang.String attName, java.lang.String attValue, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + if (namespace.equals("")) { + xmlWriter.writeAttribute(attName, attValue); + } else { + xmlWriter.writeAttribute(registerPrefix(xmlWriter, namespace), + namespace, attName, attValue); + } + } + + /** + * Util method to write an attribute without the ns prefix + */ + private void writeQNameAttribute(java.lang.String namespace, + java.lang.String attName, QName qname, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String attributeNamespace = qname.getNamespaceURI(); + java.lang.String attributePrefix = xmlWriter.getPrefix(attributeNamespace); + + if (attributePrefix == null) { + attributePrefix = registerPrefix(xmlWriter, attributeNamespace); + } + + java.lang.String attributeValue; + + if (attributePrefix.trim().length() > 0) { + attributeValue = attributePrefix + ":" + qname.getLocalPart(); + } else { + attributeValue = qname.getLocalPart(); + } + + if (namespace.equals("")) { + xmlWriter.writeAttribute(attName, attributeValue); + } else { + registerPrefix(xmlWriter, namespace); + xmlWriter.writeAttribute(attributePrefix, namespace, attName, + attributeValue); + } + } + + /** + * method to handle Qnames + */ + private void writeQName(QName qname, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String namespaceURI = qname.getNamespaceURI(); + + if (namespaceURI != null) { + java.lang.String prefix = xmlWriter.getPrefix(namespaceURI); + + if (prefix == null) { + prefix = generatePrefix(namespaceURI); + xmlWriter.writeNamespace(prefix, namespaceURI); + xmlWriter.setPrefix(prefix, namespaceURI); + } + + if (prefix.trim().length() > 0) { + xmlWriter.writeCharacters(prefix + ":" + + org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } else { + // i.e this is the default namespace + xmlWriter.writeCharacters(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } + } else { + xmlWriter.writeCharacters(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } + } + + private void writeQNames(QName[] qnames, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + if (qnames != null) { + // we have to store this data until last moment since it is not possible to write any + // namespace data after writing the charactor data + StringBuffer stringToWrite = new StringBuffer(); + java.lang.String namespaceURI = null; + java.lang.String prefix = null; + + for (int i = 0; i < qnames.length; i++) { + if (i > 0) { + stringToWrite.append(" "); + } + + namespaceURI = qnames[i].getNamespaceURI(); + + if (namespaceURI != null) { + prefix = xmlWriter.getPrefix(namespaceURI); + + if ((prefix == null) || (prefix.length() == 0)) { + prefix = generatePrefix(namespaceURI); + xmlWriter.writeNamespace(prefix, namespaceURI); + xmlWriter.setPrefix(prefix, namespaceURI); + } + + if (prefix.trim().length() > 0) { + stringToWrite.append(prefix).append(":") + .append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } else { + stringToWrite.append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } + } else { + stringToWrite.append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } + } + + xmlWriter.writeCharacters(stringToWrite.toString()); + } + } + + /** + * Register a namespace prefix + */ + private java.lang.String registerPrefix( + javax.xml.stream.XMLStreamWriter xmlWriter, + java.lang.String namespace) + throws XMLStreamException { + java.lang.String prefix = xmlWriter.getPrefix(namespace); + + if (prefix == null) { + prefix = generatePrefix(namespace); + + javax.xml.namespace.NamespaceContext nsContext = xmlWriter.getNamespaceContext(); + + while (true) { + java.lang.String uri = nsContext.getNamespaceURI(prefix); + + if ((uri == null) || (uri.length() == 0)) { + break; + } + + prefix = org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix(); + } + + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + } + + return prefix; + } + + /** + * Factory class that keeps the parse method + */ + public static class Factory { + private static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(Factory.class); + + /** + * static method to create the object + * Precondition: If this object is an element, the current or next start element starts this object and any intervening reader events are ignorable + * If this object is not an element, it is a complex type and the reader is at the event just after the outer start element + * Postcondition: If this object is an element, the reader is positioned at its end element + * If this object is a complex type, the reader is positioned at the end element of its outer element + */ + public static ArrayOfStringE parse( + XMLStreamReader reader) + throws Exception { + ArrayOfStringE object = new ArrayOfStringE(); + + int event; + QName currentQName = null; + java.lang.String nillableValue = null; + java.lang.String prefix = ""; + java.lang.String namespaceuri = ""; + + try { + while (!reader.isStartElement() && !reader.isEndElement()) + reader.next(); + + currentQName = reader.getName(); + + nillableValue = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance", + "nil"); + + if ("true".equals(nillableValue) || + "1".equals(nillableValue)) { + // Skip the element and report the null value. It cannot have subelements. + while (!reader.isEndElement()) + reader.next(); + + return object; + } + + // Note all attributes that were handled. Used to differ normal attributes + // from anyAttributes. + java.util.Vector handledAttributes = new java.util.Vector(); + + while (!reader.isEndElement()) { + if (reader.isStartElement()) { + if ((reader.isStartElement() && + new QName( + "http://WebXml.com.cn/", "ArrayOfString").equals( + reader.getName())) || + new QName("", + "ArrayOfString").equals( + reader.getName())) { + nillableValue = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance", + "nil"); + + if ("true".equals(nillableValue) || + "1".equals(nillableValue)) { + object.setArrayOfString(null); + reader.next(); + } else { + object.setArrayOfString(ArrayOfString.Factory.parse( + reader)); + } + } // End of if for expected property start element + + else { + // 3 - A start element we are not expecting indicates an invalid parameter was passed + throw new org.apache.axis2.databinding.ADBException( + "Unexpected subelement " + + reader.getName()); + } + } else { + reader.next(); + } + } // end of while loop + } catch (XMLStreamException e) { + throw new Exception(e); + } + + return object; + } + } //end of factory class + + public XMLStreamReader getPullParser(QName arg0) + throws XMLStreamException { + // TODO Auto-generated method stub + return null; + } + } + + public static class GetDatabaseInfo implements org.apache.axis2.databinding.ADBBean { + public static final QName MY_QNAME = new QName("http://WebXml.com.cn/", + "getDatabaseInfo", "ns1"); + + /** + * @param parentQName + * @param factory + * @return org.apache.axiom.om.OMElement + */ + public org.apache.axiom.om.OMElement getOMElement( + final QName parentQName, + final org.apache.axiom.om.OMFactory factory) + throws org.apache.axis2.databinding.ADBException { + return factory.createOMElement(new org.apache.axis2.databinding.ADBDataSource( + this, MY_QNAME), parentQName); + } + + public void serialize(final QName parentQName, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException, + org.apache.axis2.databinding.ADBException { + serialize(parentQName, xmlWriter, false); + } + + public void serialize(final QName parentQName, + javax.xml.stream.XMLStreamWriter xmlWriter, boolean serializeType) + throws XMLStreamException, + org.apache.axis2.databinding.ADBException { + java.lang.String prefix = null; + java.lang.String namespace = null; + + prefix = parentQName.getPrefix(); + namespace = parentQName.getNamespaceURI(); + writeStartElement(prefix, namespace, parentQName.getLocalPart(), + xmlWriter); + + if (serializeType) { + java.lang.String namespacePrefix = registerPrefix(xmlWriter, + "http://WebXml.com.cn/"); + + if ((namespacePrefix != null) && + (namespacePrefix.trim().length() > 0)) { + writeAttribute("xsi", + "http://www.w3.org/2001/XMLSchema-instance", "type", + namespacePrefix + ":getDatabaseInfo", xmlWriter); + } else { + writeAttribute("xsi", + "http://www.w3.org/2001/XMLSchema-instance", "type", + "getDatabaseInfo", xmlWriter); + } + } + + xmlWriter.writeEndElement(); + } + + private static java.lang.String generatePrefix( + java.lang.String namespace) { + if (namespace.equals("http://WebXml.com.cn/")) { + return "ns1"; + } + + return org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix(); + } + + /** + * Utility method to write an element start tag. + */ + private void writeStartElement(java.lang.String prefix, + java.lang.String namespace, java.lang.String localPart, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String writerPrefix = xmlWriter.getPrefix(namespace); + + if (writerPrefix != null) { + xmlWriter.writeStartElement(writerPrefix, localPart, namespace); + } else { + if (namespace.length() == 0) { + prefix = ""; + } else if (prefix == null) { + prefix = generatePrefix(namespace); + } + + xmlWriter.writeStartElement(prefix, localPart, namespace); + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + } + } + + /** + * Util method to write an attribute with the ns prefix + */ + private void writeAttribute(java.lang.String prefix, + java.lang.String namespace, java.lang.String attName, + java.lang.String attValue, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String writerPrefix = xmlWriter.getPrefix(namespace); + + if (writerPrefix != null) { + xmlWriter.writeAttribute(writerPrefix, namespace, attName, + attValue); + } else { + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + xmlWriter.writeAttribute(prefix, namespace, attName, attValue); + } + } + + /** + * Util method to write an attribute without the ns prefix + */ + private void writeAttribute(java.lang.String namespace, + java.lang.String attName, java.lang.String attValue, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + if (namespace.equals("")) { + xmlWriter.writeAttribute(attName, attValue); + } else { + xmlWriter.writeAttribute(registerPrefix(xmlWriter, namespace), + namespace, attName, attValue); + } + } + + /** + * Util method to write an attribute without the ns prefix + */ + private void writeQNameAttribute(java.lang.String namespace, + java.lang.String attName, QName qname, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String attributeNamespace = qname.getNamespaceURI(); + java.lang.String attributePrefix = xmlWriter.getPrefix(attributeNamespace); + + if (attributePrefix == null) { + attributePrefix = registerPrefix(xmlWriter, attributeNamespace); + } + + java.lang.String attributeValue; + + if (attributePrefix.trim().length() > 0) { + attributeValue = attributePrefix + ":" + qname.getLocalPart(); + } else { + attributeValue = qname.getLocalPart(); + } + + if (namespace.equals("")) { + xmlWriter.writeAttribute(attName, attributeValue); + } else { + registerPrefix(xmlWriter, namespace); + xmlWriter.writeAttribute(attributePrefix, namespace, attName, + attributeValue); + } + } + + /** + * method to handle Qnames + */ + private void writeQName(QName qname, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String namespaceURI = qname.getNamespaceURI(); + + if (namespaceURI != null) { + java.lang.String prefix = xmlWriter.getPrefix(namespaceURI); + + if (prefix == null) { + prefix = generatePrefix(namespaceURI); + xmlWriter.writeNamespace(prefix, namespaceURI); + xmlWriter.setPrefix(prefix, namespaceURI); + } + + if (prefix.trim().length() > 0) { + xmlWriter.writeCharacters(prefix + ":" + + org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } else { + // i.e this is the default namespace + xmlWriter.writeCharacters(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } + } else { + xmlWriter.writeCharacters(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } + } + + private void writeQNames(QName[] qnames, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + if (qnames != null) { + // we have to store this data until last moment since it is not possible to write any + // namespace data after writing the charactor data + StringBuffer stringToWrite = new StringBuffer(); + java.lang.String namespaceURI = null; + java.lang.String prefix = null; + + for (int i = 0; i < qnames.length; i++) { + if (i > 0) { + stringToWrite.append(" "); + } + + namespaceURI = qnames[i].getNamespaceURI(); + + if (namespaceURI != null) { + prefix = xmlWriter.getPrefix(namespaceURI); + + if ((prefix == null) || (prefix.length() == 0)) { + prefix = generatePrefix(namespaceURI); + xmlWriter.writeNamespace(prefix, namespaceURI); + xmlWriter.setPrefix(prefix, namespaceURI); + } + + if (prefix.trim().length() > 0) { + stringToWrite.append(prefix).append(":") + .append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } else { + stringToWrite.append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } + } else { + stringToWrite.append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } + } + + xmlWriter.writeCharacters(stringToWrite.toString()); + } + } + + /** + * Register a namespace prefix + */ + private java.lang.String registerPrefix( + javax.xml.stream.XMLStreamWriter xmlWriter, + java.lang.String namespace) + throws XMLStreamException { + java.lang.String prefix = xmlWriter.getPrefix(namespace); + + if (prefix == null) { + prefix = generatePrefix(namespace); + + javax.xml.namespace.NamespaceContext nsContext = xmlWriter.getNamespaceContext(); + + while (true) { + java.lang.String uri = nsContext.getNamespaceURI(prefix); + + if ((uri == null) || (uri.length() == 0)) { + break; + } + + prefix = org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix(); + } + + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + } + + return prefix; + } + + /** + * Factory class that keeps the parse method + */ + public static class Factory { + private static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(Factory.class); + + /** + * static method to create the object + * Precondition: If this object is an element, the current or next start element starts this object and any intervening reader events are ignorable + * If this object is not an element, it is a complex type and the reader is at the event just after the outer start element + * Postcondition: If this object is an element, the reader is positioned at its end element + * If this object is a complex type, the reader is positioned at the end element of its outer element + */ + public static GetDatabaseInfo parse( + XMLStreamReader reader) + throws Exception { + GetDatabaseInfo object = new GetDatabaseInfo(); + + int event; + QName currentQName = null; + java.lang.String nillableValue = null; + java.lang.String prefix = ""; + java.lang.String namespaceuri = ""; + + try { + while (!reader.isStartElement() && !reader.isEndElement()) + reader.next(); + + currentQName = reader.getName(); + + if (reader.getAttributeValue( + "http://www.w3.org/2001/XMLSchema-instance", + "type") != null) { + java.lang.String fullTypeName = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance", + "type"); + + if (fullTypeName != null) { + java.lang.String nsPrefix = null; + + if (fullTypeName.indexOf(":") > -1) { + nsPrefix = fullTypeName.substring(0, + fullTypeName.indexOf(":")); + } + + nsPrefix = (nsPrefix == null) ? "" : nsPrefix; + + java.lang.String type = fullTypeName.substring(fullTypeName.indexOf( + ":") + 1); + + if (!"getDatabaseInfo".equals(type)) { + //find namespace for the prefix + java.lang.String nsUri = reader.getNamespaceContext() + .getNamespaceURI(nsPrefix); + + return (GetDatabaseInfo) ExtensionMapper.getTypeObject(nsUri, + type, reader); + } + } + } + + // Note all attributes that were handled. Used to differ normal attributes + // from anyAttributes. + java.util.Vector handledAttributes = new java.util.Vector(); + + reader.next(); + } catch (XMLStreamException e) { + throw new Exception(e); + } + + return object; + } + } //end of factory class + + public XMLStreamReader getPullParser(QName arg0) + throws XMLStreamException { + // TODO Auto-generated method stub + return null; + } + } + + public static class String implements org.apache.axis2.databinding.ADBBean { + public static final QName MY_QNAME = new QName("http://WebXml.com.cn/", + "string", "ns1"); + + /** + * field for String + */ + protected java.lang.String localString; + + /** + * Auto generated getter method + * + * @return java.lang.String + */ + public java.lang.String getString() { + return localString; + } + + /** + * Auto generated setter method + * + * @param param String + */ + public void setString(java.lang.String param) { + this.localString = param; + } + + /** + * @param parentQName + * @param factory + * @return org.apache.axiom.om.OMElement + */ + public org.apache.axiom.om.OMElement getOMElement( + final QName parentQName, + final org.apache.axiom.om.OMFactory factory) + throws org.apache.axis2.databinding.ADBException { + return factory.createOMElement(new org.apache.axis2.databinding.ADBDataSource( + this, MY_QNAME), parentQName); + } + + public void serialize(final QName parentQName, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException, + org.apache.axis2.databinding.ADBException { + serialize(parentQName, xmlWriter, false); + } + + public void serialize(final QName parentQName, + javax.xml.stream.XMLStreamWriter xmlWriter, boolean serializeType) + throws XMLStreamException, + org.apache.axis2.databinding.ADBException { + //We can safely assume an element has only one type associated with it + java.lang.String namespace = "http://WebXml.com.cn/"; + java.lang.String _localName = "string"; + + writeStartElement(null, namespace, _localName, xmlWriter); + + // add the type details if this is used in a simple type + if (serializeType) { + java.lang.String namespacePrefix = registerPrefix(xmlWriter, + "http://WebXml.com.cn/"); + + if ((namespacePrefix != null) && + (namespacePrefix.trim().length() > 0)) { + writeAttribute("xsi", + "http://www.w3.org/2001/XMLSchema-instance", "type", + namespacePrefix + ":string", xmlWriter); + } else { + writeAttribute("xsi", + "http://www.w3.org/2001/XMLSchema-instance", "type", + "string", xmlWriter); + } + } + + if (localString == null) { + // write the nil attribute + writeAttribute("xsi", + "http://www.w3.org/2001/XMLSchema-instance", "nil", "1", + xmlWriter); + } else { + xmlWriter.writeCharacters(localString); + } + + xmlWriter.writeEndElement(); + } + + private static java.lang.String generatePrefix( + java.lang.String namespace) { + if (namespace.equals("http://WebXml.com.cn/")) { + return "ns1"; + } + + return org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix(); + } + + /** + * Utility method to write an element start tag. + */ + private void writeStartElement(java.lang.String prefix, + java.lang.String namespace, java.lang.String localPart, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String writerPrefix = xmlWriter.getPrefix(namespace); + + if (writerPrefix != null) { + xmlWriter.writeStartElement(writerPrefix, localPart, namespace); + } else { + if (namespace.length() == 0) { + prefix = ""; + } else if (prefix == null) { + prefix = generatePrefix(namespace); + } + + xmlWriter.writeStartElement(prefix, localPart, namespace); + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + } + } + + /** + * Util method to write an attribute with the ns prefix + */ + private void writeAttribute(java.lang.String prefix, + java.lang.String namespace, java.lang.String attName, + java.lang.String attValue, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String writerPrefix = xmlWriter.getPrefix(namespace); + + if (writerPrefix != null) { + xmlWriter.writeAttribute(writerPrefix, namespace, attName, + attValue); + } else { + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + xmlWriter.writeAttribute(prefix, namespace, attName, attValue); + } + } + + /** + * Util method to write an attribute without the ns prefix + */ + private void writeAttribute(java.lang.String namespace, + java.lang.String attName, java.lang.String attValue, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + if (namespace.equals("")) { + xmlWriter.writeAttribute(attName, attValue); + } else { + xmlWriter.writeAttribute(registerPrefix(xmlWriter, namespace), + namespace, attName, attValue); + } + } + + /** + * Util method to write an attribute without the ns prefix + */ + private void writeQNameAttribute(java.lang.String namespace, + java.lang.String attName, QName qname, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String attributeNamespace = qname.getNamespaceURI(); + java.lang.String attributePrefix = xmlWriter.getPrefix(attributeNamespace); + + if (attributePrefix == null) { + attributePrefix = registerPrefix(xmlWriter, attributeNamespace); + } + + java.lang.String attributeValue; + + if (attributePrefix.trim().length() > 0) { + attributeValue = attributePrefix + ":" + qname.getLocalPart(); + } else { + attributeValue = qname.getLocalPart(); + } + + if (namespace.equals("")) { + xmlWriter.writeAttribute(attName, attributeValue); + } else { + registerPrefix(xmlWriter, namespace); + xmlWriter.writeAttribute(attributePrefix, namespace, attName, + attributeValue); + } + } + + /** + * method to handle Qnames + */ + private void writeQName(QName qname, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String namespaceURI = qname.getNamespaceURI(); + + if (namespaceURI != null) { + java.lang.String prefix = xmlWriter.getPrefix(namespaceURI); + + if (prefix == null) { + prefix = generatePrefix(namespaceURI); + xmlWriter.writeNamespace(prefix, namespaceURI); + xmlWriter.setPrefix(prefix, namespaceURI); + } + + if (prefix.trim().length() > 0) { + xmlWriter.writeCharacters(prefix + ":" + + org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } else { + // i.e this is the default namespace + xmlWriter.writeCharacters(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } + } else { + xmlWriter.writeCharacters(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } + } + + private void writeQNames(QName[] qnames, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + if (qnames != null) { + // we have to store this data until last moment since it is not possible to write any + // namespace data after writing the charactor data + StringBuffer stringToWrite = new StringBuffer(); + java.lang.String namespaceURI = null; + java.lang.String prefix = null; + + for (int i = 0; i < qnames.length; i++) { + if (i > 0) { + stringToWrite.append(" "); + } + + namespaceURI = qnames[i].getNamespaceURI(); + + if (namespaceURI != null) { + prefix = xmlWriter.getPrefix(namespaceURI); + + if ((prefix == null) || (prefix.length() == 0)) { + prefix = generatePrefix(namespaceURI); + xmlWriter.writeNamespace(prefix, namespaceURI); + xmlWriter.setPrefix(prefix, namespaceURI); + } + + if (prefix.trim().length() > 0) { + stringToWrite.append(prefix).append(":") + .append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } else { + stringToWrite.append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } + } else { + stringToWrite.append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } + } + + xmlWriter.writeCharacters(stringToWrite.toString()); + } + } + + /** + * Register a namespace prefix + */ + private java.lang.String registerPrefix( + javax.xml.stream.XMLStreamWriter xmlWriter, + java.lang.String namespace) + throws XMLStreamException { + java.lang.String prefix = xmlWriter.getPrefix(namespace); + + if (prefix == null) { + prefix = generatePrefix(namespace); + + javax.xml.namespace.NamespaceContext nsContext = xmlWriter.getNamespaceContext(); + + while (true) { + java.lang.String uri = nsContext.getNamespaceURI(prefix); + + if ((uri == null) || (uri.length() == 0)) { + break; + } + + prefix = org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix(); + } + + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + } + + return prefix; + } + + /** + * Factory class that keeps the parse method + */ + public static class Factory { + private static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(Factory.class); + + /** + * static method to create the object + * Precondition: If this object is an element, the current or next start element starts this object and any intervening reader events are ignorable + * If this object is not an element, it is a complex type and the reader is at the event just after the outer start element + * Postcondition: If this object is an element, the reader is positioned at its end element + * If this object is a complex type, the reader is positioned at the end element of its outer element + */ + public static String parse(XMLStreamReader reader) + throws Exception { + String object = new String(); + + int event; + QName currentQName = null; + java.lang.String nillableValue = null; + java.lang.String prefix = ""; + java.lang.String namespaceuri = ""; + + try { + while (!reader.isStartElement() && !reader.isEndElement()) + reader.next(); + + currentQName = reader.getName(); + + nillableValue = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance", + "nil"); + + if ("true".equals(nillableValue) || + "1".equals(nillableValue)) { + // Skip the element and report the null value. It cannot have subelements. + while (!reader.isEndElement()) + reader.next(); + + return object; + } + + // Note all attributes that were handled. Used to differ normal attributes + // from anyAttributes. + java.util.Vector handledAttributes = new java.util.Vector(); + + while (!reader.isEndElement()) { + if (reader.isStartElement()) { + if ((reader.isStartElement() && + new QName( + "http://WebXml.com.cn/", "string").equals( + reader.getName())) || + new QName("", "string").equals( + reader.getName())) { + nillableValue = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance", + "nil"); + + if (!"true".equals(nillableValue) && + !"1".equals(nillableValue)) { + java.lang.String content = reader.getElementText(); + + object.setString(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + content)); + } else { + reader.getElementText(); // throw away text nodes if any. + } + } // End of if for expected property start element + + else { + // 3 - A start element we are not expecting indicates an invalid parameter was passed + throw new org.apache.axis2.databinding.ADBException( + "Unexpected subelement " + + reader.getName()); + } + } else { + reader.next(); + } + } // end of while loop + } catch (XMLStreamException e) { + throw new Exception(e); + } + + return object; + } + } //end of factory class + + public XMLStreamReader getPullParser(QName arg0) + throws XMLStreamException { + // TODO Auto-generated method stub + return null; + } + } + + public static class ExtensionMapper { + public static Object getTypeObject( + java.lang.String namespaceURI, java.lang.String typeName, + XMLStreamReader reader) throws Exception { + if ("http://WebXml.com.cn/".equals(namespaceURI) && + "ArrayOfString".equals(typeName)) { + return ArrayOfString.Factory.parse(reader); + } + + throw new org.apache.axis2.databinding.ADBException( + "Unsupported type " + namespaceURI + " " + typeName); + } + } + + public static class GetDatabaseInfoResponse implements org.apache.axis2.databinding.ADBBean { + public static final QName MY_QNAME = new QName("http://WebXml.com.cn/", + "getDatabaseInfoResponse", "ns1"); + + /** + * field for GetDatabaseInfoResult + */ + protected ArrayOfString localGetDatabaseInfoResult; + + /* This tracker boolean wil be used to detect whether the user called the set method + * for this attribute. It will be used to determine whether to include this field + * in the serialized XML + */ + protected boolean localGetDatabaseInfoResultTracker = false; + + public boolean isGetDatabaseInfoResultSpecified() { + return localGetDatabaseInfoResultTracker; + } + + /** + * Auto generated getter method + * + * @return ArrayOfString + */ + public ArrayOfString getGetDatabaseInfoResult() { + return localGetDatabaseInfoResult; + } + + /** + * Auto generated setter method + * + * @param param GetDatabaseInfoResult + */ + public void setGetDatabaseInfoResult(ArrayOfString param) { + localGetDatabaseInfoResultTracker = param != null; + + this.localGetDatabaseInfoResult = param; + } + + /** + * @param parentQName + * @param factory + * @return org.apache.axiom.om.OMElement + */ + public org.apache.axiom.om.OMElement getOMElement( + final QName parentQName, + final org.apache.axiom.om.OMFactory factory) + throws org.apache.axis2.databinding.ADBException { + return factory.createOMElement(new org.apache.axis2.databinding.ADBDataSource( + this, MY_QNAME), parentQName); + } + + public void serialize(final QName parentQName, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException, + org.apache.axis2.databinding.ADBException { + serialize(parentQName, xmlWriter, false); + } + + public void serialize(final QName parentQName, + javax.xml.stream.XMLStreamWriter xmlWriter, boolean serializeType) + throws XMLStreamException, + org.apache.axis2.databinding.ADBException { + java.lang.String prefix = null; + java.lang.String namespace = null; + + prefix = parentQName.getPrefix(); + namespace = parentQName.getNamespaceURI(); + writeStartElement(prefix, namespace, parentQName.getLocalPart(), + xmlWriter); + + if (serializeType) { + java.lang.String namespacePrefix = registerPrefix(xmlWriter, + "http://WebXml.com.cn/"); + + if ((namespacePrefix != null) && + (namespacePrefix.trim().length() > 0)) { + writeAttribute("xsi", + "http://www.w3.org/2001/XMLSchema-instance", "type", + namespacePrefix + ":getDatabaseInfoResponse", xmlWriter); + } else { + writeAttribute("xsi", + "http://www.w3.org/2001/XMLSchema-instance", "type", + "getDatabaseInfoResponse", xmlWriter); + } + } + + if (localGetDatabaseInfoResultTracker) { + if (localGetDatabaseInfoResult == null) { + throw new org.apache.axis2.databinding.ADBException( + "getDatabaseInfoResult cannot be null!!"); + } + + localGetDatabaseInfoResult.serialize(new QName( + "http://WebXml.com.cn/", "getDatabaseInfoResult"), + xmlWriter); + } + + xmlWriter.writeEndElement(); + } + + private static java.lang.String generatePrefix( + java.lang.String namespace) { + if (namespace.equals("http://WebXml.com.cn/")) { + return "ns1"; + } + + return org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix(); + } + + /** + * Utility method to write an element start tag. + */ + private void writeStartElement(java.lang.String prefix, + java.lang.String namespace, java.lang.String localPart, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String writerPrefix = xmlWriter.getPrefix(namespace); + + if (writerPrefix != null) { + xmlWriter.writeStartElement(writerPrefix, localPart, namespace); + } else { + if (namespace.length() == 0) { + prefix = ""; + } else if (prefix == null) { + prefix = generatePrefix(namespace); + } + + xmlWriter.writeStartElement(prefix, localPart, namespace); + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + } + } + + /** + * Util method to write an attribute with the ns prefix + */ + private void writeAttribute(java.lang.String prefix, + java.lang.String namespace, java.lang.String attName, + java.lang.String attValue, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String writerPrefix = xmlWriter.getPrefix(namespace); + + if (writerPrefix != null) { + xmlWriter.writeAttribute(writerPrefix, namespace, attName, + attValue); + } else { + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + xmlWriter.writeAttribute(prefix, namespace, attName, attValue); + } + } + + /** + * Util method to write an attribute without the ns prefix + */ + private void writeAttribute(java.lang.String namespace, + java.lang.String attName, java.lang.String attValue, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + if (namespace.equals("")) { + xmlWriter.writeAttribute(attName, attValue); + } else { + xmlWriter.writeAttribute(registerPrefix(xmlWriter, namespace), + namespace, attName, attValue); + } + } + + /** + * Util method to write an attribute without the ns prefix + */ + private void writeQNameAttribute(java.lang.String namespace, + java.lang.String attName, QName qname, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String attributeNamespace = qname.getNamespaceURI(); + java.lang.String attributePrefix = xmlWriter.getPrefix(attributeNamespace); + + if (attributePrefix == null) { + attributePrefix = registerPrefix(xmlWriter, attributeNamespace); + } + + java.lang.String attributeValue; + + if (attributePrefix.trim().length() > 0) { + attributeValue = attributePrefix + ":" + qname.getLocalPart(); + } else { + attributeValue = qname.getLocalPart(); + } + + if (namespace.equals("")) { + xmlWriter.writeAttribute(attName, attributeValue); + } else { + registerPrefix(xmlWriter, namespace); + xmlWriter.writeAttribute(attributePrefix, namespace, attName, + attributeValue); + } + } + + /** + * method to handle Qnames + */ + private void writeQName(QName qname, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String namespaceURI = qname.getNamespaceURI(); + + if (namespaceURI != null) { + java.lang.String prefix = xmlWriter.getPrefix(namespaceURI); + + if (prefix == null) { + prefix = generatePrefix(namespaceURI); + xmlWriter.writeNamespace(prefix, namespaceURI); + xmlWriter.setPrefix(prefix, namespaceURI); + } + + if (prefix.trim().length() > 0) { + xmlWriter.writeCharacters(prefix + ":" + + org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } else { + // i.e this is the default namespace + xmlWriter.writeCharacters(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } + } else { + xmlWriter.writeCharacters(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } + } + + private void writeQNames(QName[] qnames, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + if (qnames != null) { + // we have to store this data until last moment since it is not possible to write any + // namespace data after writing the charactor data + StringBuffer stringToWrite = new StringBuffer(); + java.lang.String namespaceURI = null; + java.lang.String prefix = null; + + for (int i = 0; i < qnames.length; i++) { + if (i > 0) { + stringToWrite.append(" "); + } + + namespaceURI = qnames[i].getNamespaceURI(); + + if (namespaceURI != null) { + prefix = xmlWriter.getPrefix(namespaceURI); + + if ((prefix == null) || (prefix.length() == 0)) { + prefix = generatePrefix(namespaceURI); + xmlWriter.writeNamespace(prefix, namespaceURI); + xmlWriter.setPrefix(prefix, namespaceURI); + } + + if (prefix.trim().length() > 0) { + stringToWrite.append(prefix).append(":") + .append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } else { + stringToWrite.append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } + } else { + stringToWrite.append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } + } + + xmlWriter.writeCharacters(stringToWrite.toString()); + } + } + + /** + * Register a namespace prefix + */ + private java.lang.String registerPrefix( + javax.xml.stream.XMLStreamWriter xmlWriter, + java.lang.String namespace) + throws XMLStreamException { + java.lang.String prefix = xmlWriter.getPrefix(namespace); + + if (prefix == null) { + prefix = generatePrefix(namespace); + + javax.xml.namespace.NamespaceContext nsContext = xmlWriter.getNamespaceContext(); + + while (true) { + java.lang.String uri = nsContext.getNamespaceURI(prefix); + + if ((uri == null) || (uri.length() == 0)) { + break; + } + + prefix = org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix(); + } + + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + } + + return prefix; + } + + /** + * Factory class that keeps the parse method + */ + public static class Factory { + private static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(Factory.class); + + /** + * static method to create the object + * Precondition: If this object is an element, the current or next start element starts this object and any intervening reader events are ignorable + * If this object is not an element, it is a complex type and the reader is at the event just after the outer start element + * Postcondition: If this object is an element, the reader is positioned at its end element + * If this object is a complex type, the reader is positioned at the end element of its outer element + */ + public static GetDatabaseInfoResponse parse( + XMLStreamReader reader) + throws Exception { + GetDatabaseInfoResponse object = new GetDatabaseInfoResponse(); + + int event; + QName currentQName = null; + java.lang.String nillableValue = null; + java.lang.String prefix = ""; + java.lang.String namespaceuri = ""; + + try { + while (!reader.isStartElement() && !reader.isEndElement()) + reader.next(); + + currentQName = reader.getName(); + + if (reader.getAttributeValue( + "http://www.w3.org/2001/XMLSchema-instance", + "type") != null) { + java.lang.String fullTypeName = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance", + "type"); + + if (fullTypeName != null) { + java.lang.String nsPrefix = null; + + if (fullTypeName.indexOf(":") > -1) { + nsPrefix = fullTypeName.substring(0, + fullTypeName.indexOf(":")); + } + + nsPrefix = (nsPrefix == null) ? "" : nsPrefix; + + java.lang.String type = fullTypeName.substring(fullTypeName.indexOf( + ":") + 1); + + if (!"getDatabaseInfoResponse".equals(type)) { + //find namespace for the prefix + java.lang.String nsUri = reader.getNamespaceContext() + .getNamespaceURI(nsPrefix); + + return (GetDatabaseInfoResponse) ExtensionMapper.getTypeObject(nsUri, + type, reader); + } + } + } + + // Note all attributes that were handled. Used to differ normal attributes + // from anyAttributes. + java.util.Vector handledAttributes = new java.util.Vector(); + + reader.next(); + + while (!reader.isStartElement() && !reader.isEndElement()) + reader.next(); + + if ((reader.isStartElement() && + new QName( + "http://WebXml.com.cn/", "getDatabaseInfoResult").equals( + reader.getName())) || + new QName("", + "getDatabaseInfoResult").equals( + reader.getName())) { + object.setGetDatabaseInfoResult(ArrayOfString.Factory.parse( + reader)); + + reader.next(); + } // End of if for expected property start element + + else { + } + + while (!reader.isStartElement() && !reader.isEndElement()) + reader.next(); + + if (reader.isStartElement()) { + // 2 - A start element we are not expecting indicates a trailing invalid property + throw new org.apache.axis2.databinding.ADBException( + "Unexpected subelement " + reader.getName()); + } + } catch (XMLStreamException e) { + throw new Exception(e); + } + + return object; + } + } //end of factory class + + public XMLStreamReader getPullParser(QName arg0) + throws XMLStreamException { + // TODO Auto-generated method stub + return null; + } + } + + public static class ArrayOfString implements org.apache.axis2.databinding.ADBBean { + /* This type was generated from the piece of schema that had + name = ArrayOfString + Namespace URI = http://WebXml.com.cn/ + Namespace Prefix = ns1 + */ + + /** + * field for String + * This was an Array! + */ + protected java.lang.String[] localString; + + /* This tracker boolean wil be used to detect whether the user called the set method + * for this attribute. It will be used to determine whether to include this field + * in the serialized XML + */ + protected boolean localStringTracker = false; + + public boolean isStringSpecified() { + return localStringTracker; + } + + /** + * Auto generated getter method + * + * @return java.lang.String[] + */ + public java.lang.String[] getString() { + return localString; + } + + /** + * validate the array for String + */ + protected void validateString(java.lang.String[] param) { + } + + /** + * Auto generated setter method + * + * @param param String + */ + public void setString(java.lang.String[] param) { + validateString(param); + + localStringTracker = true; + + this.localString = param; + } + + /** + * Auto generated add method for the array for convenience + * + * @param param java.lang.String + */ + public void addString(java.lang.String param) { + if (localString == null) { + localString = new java.lang.String[]{}; + } + + //update the setting tracker + localStringTracker = true; + + java.util.List list = org.apache.axis2.databinding.utils.ConverterUtil.toList(localString); + list.add(param); + this.localString = (java.lang.String[]) list.toArray(new java.lang.String[list.size()]); + } + + /** + * @param parentQName + * @param factory + * @return org.apache.axiom.om.OMElement + */ + public org.apache.axiom.om.OMElement getOMElement( + final QName parentQName, + final org.apache.axiom.om.OMFactory factory) + throws org.apache.axis2.databinding.ADBException { + return factory.createOMElement(new org.apache.axis2.databinding.ADBDataSource( + this, parentQName), parentQName); + } + + public void serialize(final QName parentQName, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException, + org.apache.axis2.databinding.ADBException { + serialize(parentQName, xmlWriter, false); + } + + public void serialize(final QName parentQName, + javax.xml.stream.XMLStreamWriter xmlWriter, boolean serializeType) + throws XMLStreamException, + org.apache.axis2.databinding.ADBException { + java.lang.String prefix = null; + java.lang.String namespace = null; + + prefix = parentQName.getPrefix(); + namespace = parentQName.getNamespaceURI(); + writeStartElement(prefix, namespace, parentQName.getLocalPart(), + xmlWriter); + + if (serializeType) { + java.lang.String namespacePrefix = registerPrefix(xmlWriter, + "http://WebXml.com.cn/"); + + if ((namespacePrefix != null) && + (namespacePrefix.trim().length() > 0)) { + writeAttribute("xsi", + "http://www.w3.org/2001/XMLSchema-instance", "type", + namespacePrefix + ":ArrayOfString", xmlWriter); + } else { + writeAttribute("xsi", + "http://www.w3.org/2001/XMLSchema-instance", "type", + "ArrayOfString", xmlWriter); + } + } + + if (localStringTracker) { + if (localString != null) { + namespace = "http://WebXml.com.cn/"; + + for (int i = 0; i < localString.length; i++) { + if (localString[i] != null) { + writeStartElement(null, namespace, "string", + xmlWriter); + + xmlWriter.writeCharacters(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + localString[i])); + + xmlWriter.writeEndElement(); + } else { + // write null attribute + namespace = "http://WebXml.com.cn/"; + writeStartElement(null, namespace, "string", + xmlWriter); + writeAttribute("xsi", + "http://www.w3.org/2001/XMLSchema-instance", + "nil", "1", xmlWriter); + xmlWriter.writeEndElement(); + } + } + } else { + // write the null attribute + // write null attribute + writeStartElement(null, "http://WebXml.com.cn/", "string", + xmlWriter); + + // write the nil attribute + writeAttribute("xsi", + "http://www.w3.org/2001/XMLSchema-instance", "nil", + "1", xmlWriter); + xmlWriter.writeEndElement(); + } + } + + xmlWriter.writeEndElement(); + } + + private static java.lang.String generatePrefix( + java.lang.String namespace) { + if (namespace.equals("http://WebXml.com.cn/")) { + return "ns1"; + } + + return org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix(); + } + + /** + * Utility method to write an element start tag. + */ + private void writeStartElement(java.lang.String prefix, + java.lang.String namespace, java.lang.String localPart, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String writerPrefix = xmlWriter.getPrefix(namespace); + + if (writerPrefix != null) { + xmlWriter.writeStartElement(writerPrefix, localPart, namespace); + } else { + if (namespace.length() == 0) { + prefix = ""; + } else if (prefix == null) { + prefix = generatePrefix(namespace); + } + + xmlWriter.writeStartElement(prefix, localPart, namespace); + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + } + } + + /** + * Util method to write an attribute with the ns prefix + */ + private void writeAttribute(java.lang.String prefix, + java.lang.String namespace, java.lang.String attName, + java.lang.String attValue, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String writerPrefix = xmlWriter.getPrefix(namespace); + + if (writerPrefix != null) { + xmlWriter.writeAttribute(writerPrefix, namespace, attName, + attValue); + } else { + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + xmlWriter.writeAttribute(prefix, namespace, attName, attValue); + } + } + + /** + * Util method to write an attribute without the ns prefix + */ + private void writeAttribute(java.lang.String namespace, + java.lang.String attName, java.lang.String attValue, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + if (namespace.equals("")) { + xmlWriter.writeAttribute(attName, attValue); + } else { + xmlWriter.writeAttribute(registerPrefix(xmlWriter, namespace), + namespace, attName, attValue); + } + } + + /** + * Util method to write an attribute without the ns prefix + */ + private void writeQNameAttribute(java.lang.String namespace, + java.lang.String attName, QName qname, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String attributeNamespace = qname.getNamespaceURI(); + java.lang.String attributePrefix = xmlWriter.getPrefix(attributeNamespace); + + if (attributePrefix == null) { + attributePrefix = registerPrefix(xmlWriter, attributeNamespace); + } + + java.lang.String attributeValue; + + if (attributePrefix.trim().length() > 0) { + attributeValue = attributePrefix + ":" + qname.getLocalPart(); + } else { + attributeValue = qname.getLocalPart(); + } + + if (namespace.equals("")) { + xmlWriter.writeAttribute(attName, attributeValue); + } else { + registerPrefix(xmlWriter, namespace); + xmlWriter.writeAttribute(attributePrefix, namespace, attName, + attributeValue); + } + } + + /** + * method to handle Qnames + */ + private void writeQName(QName qname, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String namespaceURI = qname.getNamespaceURI(); + + if (namespaceURI != null) { + java.lang.String prefix = xmlWriter.getPrefix(namespaceURI); + + if (prefix == null) { + prefix = generatePrefix(namespaceURI); + xmlWriter.writeNamespace(prefix, namespaceURI); + xmlWriter.setPrefix(prefix, namespaceURI); + } + + if (prefix.trim().length() > 0) { + xmlWriter.writeCharacters(prefix + ":" + + org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } else { + // i.e this is the default namespace + xmlWriter.writeCharacters(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } + } else { + xmlWriter.writeCharacters(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } + } + + private void writeQNames(QName[] qnames, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + if (qnames != null) { + // we have to store this data until last moment since it is not possible to write any + // namespace data after writing the charactor data + StringBuffer stringToWrite = new StringBuffer(); + java.lang.String namespaceURI = null; + java.lang.String prefix = null; + + for (int i = 0; i < qnames.length; i++) { + if (i > 0) { + stringToWrite.append(" "); + } + + namespaceURI = qnames[i].getNamespaceURI(); + + if (namespaceURI != null) { + prefix = xmlWriter.getPrefix(namespaceURI); + + if ((prefix == null) || (prefix.length() == 0)) { + prefix = generatePrefix(namespaceURI); + xmlWriter.writeNamespace(prefix, namespaceURI); + xmlWriter.setPrefix(prefix, namespaceURI); + } + + if (prefix.trim().length() > 0) { + stringToWrite.append(prefix).append(":") + .append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } else { + stringToWrite.append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } + } else { + stringToWrite.append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } + } + + xmlWriter.writeCharacters(stringToWrite.toString()); + } + } + + /** + * Register a namespace prefix + */ + private java.lang.String registerPrefix( + javax.xml.stream.XMLStreamWriter xmlWriter, + java.lang.String namespace) + throws XMLStreamException { + java.lang.String prefix = xmlWriter.getPrefix(namespace); + + if (prefix == null) { + prefix = generatePrefix(namespace); + + javax.xml.namespace.NamespaceContext nsContext = xmlWriter.getNamespaceContext(); + + while (true) { + java.lang.String uri = nsContext.getNamespaceURI(prefix); + + if ((uri == null) || (uri.length() == 0)) { + break; + } + + prefix = org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix(); + } + + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + } + + return prefix; + } + + /** + * Factory class that keeps the parse method + */ + public static class Factory { + private static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(Factory.class); + + /** + * static method to create the object + * Precondition: If this object is an element, the current or next start element starts this object and any intervening reader events are ignorable + * If this object is not an element, it is a complex type and the reader is at the event just after the outer start element + * Postcondition: If this object is an element, the reader is positioned at its end element + * If this object is a complex type, the reader is positioned at the end element of its outer element + */ + public static ArrayOfString parse( + XMLStreamReader reader) + throws Exception { + ArrayOfString object = new ArrayOfString(); + + int event; + QName currentQName = null; + java.lang.String nillableValue = null; + java.lang.String prefix = ""; + java.lang.String namespaceuri = ""; + + try { + while (!reader.isStartElement() && !reader.isEndElement()) + reader.next(); + + currentQName = reader.getName(); + + if (reader.getAttributeValue( + "http://www.w3.org/2001/XMLSchema-instance", + "type") != null) { + java.lang.String fullTypeName = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance", + "type"); + + if (fullTypeName != null) { + java.lang.String nsPrefix = null; + + if (fullTypeName.indexOf(":") > -1) { + nsPrefix = fullTypeName.substring(0, + fullTypeName.indexOf(":")); + } + + nsPrefix = (nsPrefix == null) ? "" : nsPrefix; + + java.lang.String type = fullTypeName.substring(fullTypeName.indexOf( + ":") + 1); + + if (!"ArrayOfString".equals(type)) { + //find namespace for the prefix + java.lang.String nsUri = reader.getNamespaceContext() + .getNamespaceURI(nsPrefix); + + return (ArrayOfString) ExtensionMapper.getTypeObject(nsUri, + type, reader); + } + } + } + + // Note all attributes that were handled. Used to differ normal attributes + // from anyAttributes. + java.util.Vector handledAttributes = new java.util.Vector(); + + reader.next(); + + java.util.ArrayList list1 = new java.util.ArrayList(); + + while (!reader.isStartElement() && !reader.isEndElement()) + reader.next(); + + if ((reader.isStartElement() && + new QName( + "http://WebXml.com.cn/", "string").equals( + reader.getName())) || + new QName("", "string").equals( + reader.getName())) { + // Process the array and step past its final element's end. + nillableValue = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance", + "nil"); + + if ("true".equals(nillableValue) || + "1".equals(nillableValue)) { + list1.add(null); + + reader.next(); + } else { + list1.add(reader.getElementText()); + } + + //loop until we find a start element that is not part of this array + boolean loopDone1 = false; + + while (!loopDone1) { + // Ensure we are at the EndElement + while (!reader.isEndElement()) { + reader.next(); + } + + // Step out of this element + reader.next(); + + // Step to next element event. + while (!reader.isStartElement() && + !reader.isEndElement()) + reader.next(); + + if (reader.isEndElement()) { + //two continuous end elements means we are exiting the xml structure + loopDone1 = true; + } else { + if (new QName( + "http://WebXml.com.cn/", "string").equals( + reader.getName())) { + nillableValue = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance", + "nil"); + + if ("true".equals(nillableValue) || + "1".equals(nillableValue)) { + list1.add(null); + + reader.next(); + } else { + list1.add(reader.getElementText()); + } + } else { + loopDone1 = true; + } + } + } + + // call the converter utility to convert and set the array + object.setString((java.lang.String[]) list1.toArray( + new java.lang.String[list1.size()])); + } // End of if for expected property start element + + else { + } + + while (!reader.isStartElement() && !reader.isEndElement()) + reader.next(); + + if (reader.isStartElement()) { + // 2 - A start element we are not expecting indicates a trailing invalid property + throw new org.apache.axis2.databinding.ADBException( + "Unexpected subelement " + reader.getName()); + } + } catch (XMLStreamException e) { + throw new Exception(e); + } + + return object; + } + } //end of factory class + + public XMLStreamReader getPullParser(QName arg0) + throws XMLStreamException { + // TODO Auto-generated method stub + return null; + } + } + + public static class GetMobileCodeInfoResponse implements org.apache.axis2.databinding.ADBBean { + public static final QName MY_QNAME = new QName("http://WebXml.com.cn/", + "getMobileCodeInfoResponse", "ns1"); + + /** + * field for GetMobileCodeInfoResult + */ + protected java.lang.String localGetMobileCodeInfoResult; + + /* This tracker boolean wil be used to detect whether the user called the set method + * for this attribute. It will be used to determine whether to include this field + * in the serialized XML + */ + protected boolean localGetMobileCodeInfoResultTracker = false; + + public boolean isGetMobileCodeInfoResultSpecified() { + return localGetMobileCodeInfoResultTracker; + } + + /** + * Auto generated getter method + * + * @return java.lang.String + */ + public java.lang.String getGetMobileCodeInfoResult() { + return localGetMobileCodeInfoResult; + } + + /** + * Auto generated setter method + * + * @param param GetMobileCodeInfoResult + */ + public void setGetMobileCodeInfoResult(java.lang.String param) { + localGetMobileCodeInfoResultTracker = param != null; + + this.localGetMobileCodeInfoResult = param; + } + + /** + * @param parentQName + * @param factory + * @return org.apache.axiom.om.OMElement + */ + public org.apache.axiom.om.OMElement getOMElement( + final QName parentQName, + final org.apache.axiom.om.OMFactory factory) + throws org.apache.axis2.databinding.ADBException { + return factory.createOMElement(new org.apache.axis2.databinding.ADBDataSource( + this, MY_QNAME), parentQName); + } + + public void serialize(final QName parentQName, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException, + org.apache.axis2.databinding.ADBException { + serialize(parentQName, xmlWriter, false); + } + + public void serialize(final QName parentQName, + javax.xml.stream.XMLStreamWriter xmlWriter, boolean serializeType) + throws XMLStreamException, + org.apache.axis2.databinding.ADBException { + java.lang.String prefix = null; + java.lang.String namespace = null; + + prefix = parentQName.getPrefix(); + namespace = parentQName.getNamespaceURI(); + writeStartElement(prefix, namespace, parentQName.getLocalPart(), + xmlWriter); + + if (serializeType) { + java.lang.String namespacePrefix = registerPrefix(xmlWriter, + "http://WebXml.com.cn/"); + + if ((namespacePrefix != null) && + (namespacePrefix.trim().length() > 0)) { + writeAttribute("xsi", + "http://www.w3.org/2001/XMLSchema-instance", "type", + namespacePrefix + ":getMobileCodeInfoResponse", + xmlWriter); + } else { + writeAttribute("xsi", + "http://www.w3.org/2001/XMLSchema-instance", "type", + "getMobileCodeInfoResponse", xmlWriter); + } + } + + if (localGetMobileCodeInfoResultTracker) { + namespace = "http://WebXml.com.cn/"; + writeStartElement(null, namespace, "getMobileCodeInfoResult", + xmlWriter); + + if (localGetMobileCodeInfoResult == null) { + // write the nil attribute + throw new org.apache.axis2.databinding.ADBException( + "getMobileCodeInfoResult cannot be null!!"); + } else { + xmlWriter.writeCharacters(localGetMobileCodeInfoResult); + } + + xmlWriter.writeEndElement(); + } + + xmlWriter.writeEndElement(); + } + + private static java.lang.String generatePrefix( + java.lang.String namespace) { + if (namespace.equals("http://WebXml.com.cn/")) { + return "ns1"; + } + + return org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix(); + } + + /** + * Utility method to write an element start tag. + */ + private void writeStartElement(java.lang.String prefix, + java.lang.String namespace, java.lang.String localPart, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String writerPrefix = xmlWriter.getPrefix(namespace); + + if (writerPrefix != null) { + xmlWriter.writeStartElement(writerPrefix, localPart, namespace); + } else { + if (namespace.length() == 0) { + prefix = ""; + } else if (prefix == null) { + prefix = generatePrefix(namespace); + } + + xmlWriter.writeStartElement(prefix, localPart, namespace); + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + } + } + + /** + * Util method to write an attribute with the ns prefix + */ + private void writeAttribute(java.lang.String prefix, + java.lang.String namespace, java.lang.String attName, + java.lang.String attValue, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String writerPrefix = xmlWriter.getPrefix(namespace); + + if (writerPrefix != null) { + xmlWriter.writeAttribute(writerPrefix, namespace, attName, + attValue); + } else { + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + xmlWriter.writeAttribute(prefix, namespace, attName, attValue); + } + } + + /** + * Util method to write an attribute without the ns prefix + */ + private void writeAttribute(java.lang.String namespace, + java.lang.String attName, java.lang.String attValue, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + if (namespace.equals("")) { + xmlWriter.writeAttribute(attName, attValue); + } else { + xmlWriter.writeAttribute(registerPrefix(xmlWriter, namespace), + namespace, attName, attValue); + } + } + + /** + * Util method to write an attribute without the ns prefix + */ + private void writeQNameAttribute(java.lang.String namespace, + java.lang.String attName, QName qname, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String attributeNamespace = qname.getNamespaceURI(); + java.lang.String attributePrefix = xmlWriter.getPrefix(attributeNamespace); + + if (attributePrefix == null) { + attributePrefix = registerPrefix(xmlWriter, attributeNamespace); + } + + java.lang.String attributeValue; + + if (attributePrefix.trim().length() > 0) { + attributeValue = attributePrefix + ":" + qname.getLocalPart(); + } else { + attributeValue = qname.getLocalPart(); + } + + if (namespace.equals("")) { + xmlWriter.writeAttribute(attName, attributeValue); + } else { + registerPrefix(xmlWriter, namespace); + xmlWriter.writeAttribute(attributePrefix, namespace, attName, + attributeValue); + } + } + + /** + * method to handle Qnames + */ + private void writeQName(QName qname, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String namespaceURI = qname.getNamespaceURI(); + + if (namespaceURI != null) { + java.lang.String prefix = xmlWriter.getPrefix(namespaceURI); + + if (prefix == null) { + prefix = generatePrefix(namespaceURI); + xmlWriter.writeNamespace(prefix, namespaceURI); + xmlWriter.setPrefix(prefix, namespaceURI); + } + + if (prefix.trim().length() > 0) { + xmlWriter.writeCharacters(prefix + ":" + + org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } else { + // i.e this is the default namespace + xmlWriter.writeCharacters(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } + } else { + xmlWriter.writeCharacters(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } + } + + private void writeQNames(QName[] qnames, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + if (qnames != null) { + // we have to store this data until last moment since it is not possible to write any + // namespace data after writing the charactor data + StringBuffer stringToWrite = new StringBuffer(); + java.lang.String namespaceURI = null; + java.lang.String prefix = null; + + for (int i = 0; i < qnames.length; i++) { + if (i > 0) { + stringToWrite.append(" "); + } + + namespaceURI = qnames[i].getNamespaceURI(); + + if (namespaceURI != null) { + prefix = xmlWriter.getPrefix(namespaceURI); + + if ((prefix == null) || (prefix.length() == 0)) { + prefix = generatePrefix(namespaceURI); + xmlWriter.writeNamespace(prefix, namespaceURI); + xmlWriter.setPrefix(prefix, namespaceURI); + } + + if (prefix.trim().length() > 0) { + stringToWrite.append(prefix).append(":") + .append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } else { + stringToWrite.append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } + } else { + stringToWrite.append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } + } + + xmlWriter.writeCharacters(stringToWrite.toString()); + } + } + + /** + * Register a namespace prefix + */ + private java.lang.String registerPrefix( + javax.xml.stream.XMLStreamWriter xmlWriter, + java.lang.String namespace) + throws XMLStreamException { + java.lang.String prefix = xmlWriter.getPrefix(namespace); + + if (prefix == null) { + prefix = generatePrefix(namespace); + + javax.xml.namespace.NamespaceContext nsContext = xmlWriter.getNamespaceContext(); + + while (true) { + java.lang.String uri = nsContext.getNamespaceURI(prefix); + + if ((uri == null) || (uri.length() == 0)) { + break; + } + + prefix = org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix(); + } + + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + } + + return prefix; + } + + /** + * Factory class that keeps the parse method + */ + public static class Factory { + private static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(Factory.class); + + /** + * static method to create the object + * Precondition: If this object is an element, the current or next start element starts this object and any intervening reader events are ignorable + * If this object is not an element, it is a complex type and the reader is at the event just after the outer start element + * Postcondition: If this object is an element, the reader is positioned at its end element + * If this object is a complex type, the reader is positioned at the end element of its outer element + */ + public static GetMobileCodeInfoResponse parse( + XMLStreamReader reader) + throws Exception { + GetMobileCodeInfoResponse object = new GetMobileCodeInfoResponse(); + + int event; + QName currentQName = null; + java.lang.String nillableValue = null; + java.lang.String prefix = ""; + java.lang.String namespaceuri = ""; + + try { + while (!reader.isStartElement() && !reader.isEndElement()) + reader.next(); + + currentQName = reader.getName(); + + if (reader.getAttributeValue( + "http://www.w3.org/2001/XMLSchema-instance", + "type") != null) { + java.lang.String fullTypeName = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance", + "type"); + + if (fullTypeName != null) { + java.lang.String nsPrefix = null; + + if (fullTypeName.indexOf(":") > -1) { + nsPrefix = fullTypeName.substring(0, + fullTypeName.indexOf(":")); + } + + nsPrefix = (nsPrefix == null) ? "" : nsPrefix; + + java.lang.String type = fullTypeName.substring(fullTypeName.indexOf( + ":") + 1); + + if (!"getMobileCodeInfoResponse".equals(type)) { + //find namespace for the prefix + java.lang.String nsUri = reader.getNamespaceContext() + .getNamespaceURI(nsPrefix); + + return (GetMobileCodeInfoResponse) ExtensionMapper.getTypeObject(nsUri, + type, reader); + } + } + } + + // Note all attributes that were handled. Used to differ normal attributes + // from anyAttributes. + java.util.Vector handledAttributes = new java.util.Vector(); + + reader.next(); + + while (!reader.isStartElement() && !reader.isEndElement()) + reader.next(); + + if ((reader.isStartElement() && + new QName( + "http://WebXml.com.cn/", + "getMobileCodeInfoResult").equals( + reader.getName())) || + new QName("", + "getMobileCodeInfoResult").equals( + reader.getName())) { + nillableValue = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance", + "nil"); + + if ("true".equals(nillableValue) || + "1".equals(nillableValue)) { + throw new org.apache.axis2.databinding.ADBException( + "The element: " + "getMobileCodeInfoResult" + + " cannot be null"); + } + + java.lang.String content = reader.getElementText(); + + object.setGetMobileCodeInfoResult(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + content)); + + reader.next(); + } // End of if for expected property start element + + else { + } + + while (!reader.isStartElement() && !reader.isEndElement()) + reader.next(); + + if (reader.isStartElement()) { + // 2 - A start element we are not expecting indicates a trailing invalid property + throw new org.apache.axis2.databinding.ADBException( + "Unexpected subelement " + reader.getName()); + } + } catch (XMLStreamException e) { + throw new Exception(e); + } + + return object; + } + } //end of factory class + + public XMLStreamReader getPullParser(QName arg0) + throws XMLStreamException { + // TODO Auto-generated method stub + return null; + } + } + + public static class GetMobileCodeInfo implements org.apache.axis2.databinding.ADBBean { + public static final QName MY_QNAME = new QName("http://WebXml.com.cn/", + "getMobileCodeInfo", "ns1"); + + /** + * field for MobileCode + */ + protected java.lang.String localMobileCode; + + /* This tracker boolean wil be used to detect whether the user called the set method + * for this attribute. It will be used to determine whether to include this field + * in the serialized XML + */ + protected boolean localMobileCodeTracker = false; + + /** + * field for UserID + */ + protected java.lang.String localUserID; + + /* This tracker boolean wil be used to detect whether the user called the set method + * for this attribute. It will be used to determine whether to include this field + * in the serialized XML + */ + protected boolean localUserIDTracker = false; + + public boolean isMobileCodeSpecified() { + return localMobileCodeTracker; + } + + /** + * Auto generated getter method + * + * @return java.lang.String + */ + public java.lang.String getMobileCode() { + return localMobileCode; + } + + /** + * Auto generated setter method + * + * @param param MobileCode + */ + public void setMobileCode(java.lang.String param) { + localMobileCodeTracker = param != null; + + this.localMobileCode = param; + } + + public boolean isUserIDSpecified() { + return localUserIDTracker; + } + + /** + * Auto generated getter method + * + * @return java.lang.String + */ + public java.lang.String getUserID() { + return localUserID; + } + + /** + * Auto generated setter method + * + * @param param UserID + */ + public void setUserID(java.lang.String param) { + localUserIDTracker = param != null; + + this.localUserID = param; + } + + /** + * @param parentQName + * @param factory + * @return org.apache.axiom.om.OMElement + */ + public org.apache.axiom.om.OMElement getOMElement( + final QName parentQName, + final org.apache.axiom.om.OMFactory factory) + throws org.apache.axis2.databinding.ADBException { + return factory.createOMElement(new org.apache.axis2.databinding.ADBDataSource( + this, MY_QNAME), parentQName); + } + + public void serialize(final QName parentQName, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException, + org.apache.axis2.databinding.ADBException { + serialize(parentQName, xmlWriter, false); + } + + public void serialize(final QName parentQName, + javax.xml.stream.XMLStreamWriter xmlWriter, boolean serializeType) + throws XMLStreamException, + org.apache.axis2.databinding.ADBException { + java.lang.String prefix = null; + java.lang.String namespace = null; + + prefix = parentQName.getPrefix(); + namespace = parentQName.getNamespaceURI(); + writeStartElement(prefix, namespace, parentQName.getLocalPart(), + xmlWriter); + + if (serializeType) { + java.lang.String namespacePrefix = registerPrefix(xmlWriter, + "http://WebXml.com.cn/"); + + if ((namespacePrefix != null) && + (namespacePrefix.trim().length() > 0)) { + writeAttribute("xsi", + "http://www.w3.org/2001/XMLSchema-instance", "type", + namespacePrefix + ":getMobileCodeInfo", xmlWriter); + } else { + writeAttribute("xsi", + "http://www.w3.org/2001/XMLSchema-instance", "type", + "getMobileCodeInfo", xmlWriter); + } + } + + if (localMobileCodeTracker) { + namespace = "http://WebXml.com.cn/"; + writeStartElement(null, namespace, "mobileCode", xmlWriter); + + if (localMobileCode == null) { + // write the nil attribute + throw new org.apache.axis2.databinding.ADBException( + "mobileCode cannot be null!!"); + } else { + xmlWriter.writeCharacters(localMobileCode); + } + + xmlWriter.writeEndElement(); + } + + if (localUserIDTracker) { + namespace = "http://WebXml.com.cn/"; + writeStartElement(null, namespace, "userID", xmlWriter); + + if (localUserID == null) { + // write the nil attribute + throw new org.apache.axis2.databinding.ADBException( + "userID cannot be null!!"); + } else { + xmlWriter.writeCharacters(localUserID); + } + + xmlWriter.writeEndElement(); + } + + xmlWriter.writeEndElement(); + } + + private static java.lang.String generatePrefix( + java.lang.String namespace) { + if (namespace.equals("http://WebXml.com.cn/")) { + return "ns1"; + } + + return org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix(); + } + + /** + * Utility method to write an element start tag. + */ + private void writeStartElement(java.lang.String prefix, + java.lang.String namespace, java.lang.String localPart, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String writerPrefix = xmlWriter.getPrefix(namespace); + + if (writerPrefix != null) { + xmlWriter.writeStartElement(writerPrefix, localPart, namespace); + } else { + if (namespace.length() == 0) { + prefix = ""; + } else if (prefix == null) { + prefix = generatePrefix(namespace); + } + + xmlWriter.writeStartElement(prefix, localPart, namespace); + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + } + } + + /** + * Util method to write an attribute with the ns prefix + */ + private void writeAttribute(java.lang.String prefix, + java.lang.String namespace, java.lang.String attName, + java.lang.String attValue, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String writerPrefix = xmlWriter.getPrefix(namespace); + + if (writerPrefix != null) { + xmlWriter.writeAttribute(writerPrefix, namespace, attName, + attValue); + } else { + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + xmlWriter.writeAttribute(prefix, namespace, attName, attValue); + } + } + + /** + * Util method to write an attribute without the ns prefix + */ + private void writeAttribute(java.lang.String namespace, + java.lang.String attName, java.lang.String attValue, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + if (namespace.equals("")) { + xmlWriter.writeAttribute(attName, attValue); + } else { + xmlWriter.writeAttribute(registerPrefix(xmlWriter, namespace), + namespace, attName, attValue); + } + } + + /** + * Util method to write an attribute without the ns prefix + */ + private void writeQNameAttribute(java.lang.String namespace, + java.lang.String attName, QName qname, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String attributeNamespace = qname.getNamespaceURI(); + java.lang.String attributePrefix = xmlWriter.getPrefix(attributeNamespace); + + if (attributePrefix == null) { + attributePrefix = registerPrefix(xmlWriter, attributeNamespace); + } + + java.lang.String attributeValue; + + if (attributePrefix.trim().length() > 0) { + attributeValue = attributePrefix + ":" + qname.getLocalPart(); + } else { + attributeValue = qname.getLocalPart(); + } + + if (namespace.equals("")) { + xmlWriter.writeAttribute(attName, attributeValue); + } else { + registerPrefix(xmlWriter, namespace); + xmlWriter.writeAttribute(attributePrefix, namespace, attName, + attributeValue); + } + } + + /** + * method to handle Qnames + */ + private void writeQName(QName qname, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + java.lang.String namespaceURI = qname.getNamespaceURI(); + + if (namespaceURI != null) { + java.lang.String prefix = xmlWriter.getPrefix(namespaceURI); + + if (prefix == null) { + prefix = generatePrefix(namespaceURI); + xmlWriter.writeNamespace(prefix, namespaceURI); + xmlWriter.setPrefix(prefix, namespaceURI); + } + + if (prefix.trim().length() > 0) { + xmlWriter.writeCharacters(prefix + ":" + + org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } else { + // i.e this is the default namespace + xmlWriter.writeCharacters(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } + } else { + xmlWriter.writeCharacters(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qname)); + } + } + + private void writeQNames(QName[] qnames, + javax.xml.stream.XMLStreamWriter xmlWriter) + throws XMLStreamException { + if (qnames != null) { + // we have to store this data until last moment since it is not possible to write any + // namespace data after writing the charactor data + StringBuffer stringToWrite = new StringBuffer(); + java.lang.String namespaceURI = null; + java.lang.String prefix = null; + + for (int i = 0; i < qnames.length; i++) { + if (i > 0) { + stringToWrite.append(" "); + } + + namespaceURI = qnames[i].getNamespaceURI(); + + if (namespaceURI != null) { + prefix = xmlWriter.getPrefix(namespaceURI); + + if ((prefix == null) || (prefix.length() == 0)) { + prefix = generatePrefix(namespaceURI); + xmlWriter.writeNamespace(prefix, namespaceURI); + xmlWriter.setPrefix(prefix, namespaceURI); + } + + if (prefix.trim().length() > 0) { + stringToWrite.append(prefix).append(":") + .append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } else { + stringToWrite.append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } + } else { + stringToWrite.append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + qnames[i])); + } + } + + xmlWriter.writeCharacters(stringToWrite.toString()); + } + } + + /** + * Register a namespace prefix + */ + private java.lang.String registerPrefix( + javax.xml.stream.XMLStreamWriter xmlWriter, + java.lang.String namespace) + throws XMLStreamException { + java.lang.String prefix = xmlWriter.getPrefix(namespace); + + if (prefix == null) { + prefix = generatePrefix(namespace); + + javax.xml.namespace.NamespaceContext nsContext = xmlWriter.getNamespaceContext(); + + while (true) { + java.lang.String uri = nsContext.getNamespaceURI(prefix); + + if ((uri == null) || (uri.length() == 0)) { + break; + } + + prefix = org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix(); + } + + xmlWriter.writeNamespace(prefix, namespace); + xmlWriter.setPrefix(prefix, namespace); + } + + return prefix; + } + + /** + * Factory class that keeps the parse method + */ + public static class Factory { + private static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(Factory.class); + + /** + * static method to create the object + * Precondition: If this object is an element, the current or next start element starts this object and any intervening reader events are ignorable + * If this object is not an element, it is a complex type and the reader is at the event just after the outer start element + * Postcondition: If this object is an element, the reader is positioned at its end element + * If this object is a complex type, the reader is positioned at the end element of its outer element + */ + public static GetMobileCodeInfo parse( + XMLStreamReader reader) + throws Exception { + GetMobileCodeInfo object = new GetMobileCodeInfo(); + + int event; + QName currentQName = null; + java.lang.String nillableValue = null; + java.lang.String prefix = ""; + java.lang.String namespaceuri = ""; + + try { + while (!reader.isStartElement() && !reader.isEndElement()) + reader.next(); + + currentQName = reader.getName(); + + if (reader.getAttributeValue( + "http://www.w3.org/2001/XMLSchema-instance", + "type") != null) { + java.lang.String fullTypeName = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance", + "type"); + + if (fullTypeName != null) { + java.lang.String nsPrefix = null; + + if (fullTypeName.indexOf(":") > -1) { + nsPrefix = fullTypeName.substring(0, + fullTypeName.indexOf(":")); + } + + nsPrefix = (nsPrefix == null) ? "" : nsPrefix; + + java.lang.String type = fullTypeName.substring(fullTypeName.indexOf( + ":") + 1); + + if (!"getMobileCodeInfo".equals(type)) { + //find namespace for the prefix + java.lang.String nsUri = reader.getNamespaceContext() + .getNamespaceURI(nsPrefix); + + return (GetMobileCodeInfo) ExtensionMapper.getTypeObject(nsUri, + type, reader); + } + } + } + + // Note all attributes that were handled. Used to differ normal attributes + // from anyAttributes. + java.util.Vector handledAttributes = new java.util.Vector(); + + reader.next(); + + while (!reader.isStartElement() && !reader.isEndElement()) + reader.next(); + + if ((reader.isStartElement() && + new QName( + "http://WebXml.com.cn/", "mobileCode").equals( + reader.getName())) || + new QName("", "mobileCode").equals( + reader.getName())) { + nillableValue = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance", + "nil"); + + if ("true".equals(nillableValue) || + "1".equals(nillableValue)) { + throw new org.apache.axis2.databinding.ADBException( + "The element: " + "mobileCode" + + " cannot be null"); + } + + java.lang.String content = reader.getElementText(); + + object.setMobileCode(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + content)); + + reader.next(); + } // End of if for expected property start element + + else { + } + + while (!reader.isStartElement() && !reader.isEndElement()) + reader.next(); + + if ((reader.isStartElement() && + new QName( + "http://WebXml.com.cn/", "userID").equals( + reader.getName())) || + new QName("", "userID").equals( + reader.getName())) { + nillableValue = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance", + "nil"); + + if ("true".equals(nillableValue) || + "1".equals(nillableValue)) { + throw new org.apache.axis2.databinding.ADBException( + "The element: " + "userID" + + " cannot be null"); + } + + java.lang.String content = reader.getElementText(); + + object.setUserID(org.apache.axis2.databinding.utils.ConverterUtil.convertToString( + content)); + + reader.next(); + } // End of if for expected property start element + + else { + } + + while (!reader.isStartElement() && !reader.isEndElement()) + reader.next(); + + if (reader.isStartElement()) { + // 2 - A start element we are not expecting indicates a trailing invalid property + throw new org.apache.axis2.databinding.ADBException( + "Unexpected subelement " + reader.getName()); + } + } catch (XMLStreamException e) { + throw new Exception(e); + } + + return object; + } + } //end of factory class + + public XMLStreamReader getPullParser(QName arg0) + throws XMLStreamException { + // TODO Auto-generated method stub + return null; + } + } +} From e5ffbcb32bab04e3db9e79f4a5d8d5cc39b55696 Mon Sep 17 00:00:00 2001 From: zack Date: Tue, 26 Mar 2019 20:13:53 +0800 Subject: [PATCH 40/40] =?UTF-8?q?REPORT-15312=20=E5=BC=80=E6=94=BEAPI?= =?UTF-8?q?=E6=95=B4=E7=90=86=E4=BB=BB=E5=8A=A1=20=E8=A1=A5=E5=85=85?= =?UTF-8?q?=E4=B8=80=E4=BA=9B=E6=96=B0=E5=A2=9E=E7=9A=84api=20=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E4=B9=8B=E5=89=8D=E6=9C=89=E9=97=AE=E9=A2=98=E7=9A=84?= =?UTF-8?q?api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin-report-doc-demo/plugin.xml | 5 +- .../src/com/fr/io/ExcuteDemo.java | 14 +--- .../src/com/fr/io/ExportApi.java | 16 +--- .../src/com/fr/io/ExportBatch.java | 13 +--- .../src/com/fr/io/ExportExcel.java | 19 ++++- .../src/com/fr/io/ExportReports.java | 20 ++++- .../src/com/fr/io/JavaPrint.java | 15 ++++ .../src/com/fr/io/SetParameterWindow.java | 13 +--- .../src/com/fr/io/SimpleDemo.java | 13 +--- .../com/fr/openapi/remote/TemplateRead.java | 73 +++++++++++++++++++ .../com/fr/plugin/core/MyLocaleFinder.java | 15 ++++ .../ResourcePathTransformerImpl.java | 18 +++++ .../core/secondary/SiteTransformerImpl.java | 23 ++++++ 13 files changed, 191 insertions(+), 66 deletions(-) create mode 100644 plugin-report-doc-demo/src/com/fr/openapi/remote/TemplateRead.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/MyLocaleFinder.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/secondary/ResourcePathTransformerImpl.java create mode 100644 plugin-report-doc-demo/src/com/fr/plugin/core/secondary/SiteTransformerImpl.java diff --git a/plugin-report-doc-demo/plugin.xml b/plugin-report-doc-demo/plugin.xml index 879bd29..9bcebc7 100644 --- a/plugin-report-doc-demo/plugin.xml +++ b/plugin-report-doc-demo/plugin.xml @@ -4,7 +4,7 @@ yes no - 1.1.1 + 1.2 10.0~ 2018-08-02 finereport @@ -13,8 +13,9 @@ [2018-01-25] 发布。
[2018-08-02] 插件适配10 ]]> + - + diff --git a/plugin-report-doc-demo/src/com/fr/io/ExcuteDemo.java b/plugin-report-doc-demo/src/com/fr/io/ExcuteDemo.java index d77fa1c..4c799a6 100644 --- a/plugin-report-doc-demo/src/com/fr/io/ExcuteDemo.java +++ b/plugin-report-doc-demo/src/com/fr/io/ExcuteDemo.java @@ -10,12 +10,8 @@ import com.fr.module.Module; import com.fr.module.tool.ActivatorToolBox; import com.fr.report.ReportActivator; import com.fr.report.module.ReportBaseActivator; -import com.fr.serialization.SerializationActivator; import com.fr.stable.WriteActor; -import com.fr.startup.WorkspaceRegister; import com.fr.store.StateServerActivator; -import com.fr.workspace.engine.WorkspaceActivator; -import com.fr.workspace.server.ServerWorkspaceRegister; import com.fr.workspace.simple.SimpleWork; import java.io.File; @@ -26,18 +22,12 @@ public class ExcuteDemo { public static void main(String[] args) { try { // 首先需要定义执行所在的环境,这样才能正确读取数据库信息 - // 定义报表运行环境,用于执行报表 - Module module = ActivatorToolBox.simpleLink( - new WorkspaceActivator(), - new BaseDBActivator(), + Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(), new ConfigurationActivator(), new StateServerActivator(), new ReportBaseActivator(), new RestrictionActivator(), - new ReportActivator(), - new WorkspaceRegister(), - new ServerWorkspaceRegister(), - new SerializationActivator()); + new ReportActivator()); String envpath = "D:\\FineReport_10\\webapps\\webroot\\WEB-INF";//工程路径 SimpleWork.checkIn(envpath); module.start(); diff --git a/plugin-report-doc-demo/src/com/fr/io/ExportApi.java b/plugin-report-doc-demo/src/com/fr/io/ExportApi.java index 8786733..3523d25 100644 --- a/plugin-report-doc-demo/src/com/fr/io/ExportApi.java +++ b/plugin-report-doc-demo/src/com/fr/io/ExportApi.java @@ -20,12 +20,8 @@ import com.fr.module.Module; import com.fr.module.tool.ActivatorToolBox; import com.fr.report.ReportActivator; import com.fr.report.module.ReportBaseActivator; -import com.fr.serialization.SerializationActivator; import com.fr.stable.WriteActor; -import com.fr.startup.WorkspaceRegister; import com.fr.store.StateServerActivator; -import com.fr.workspace.engine.WorkspaceActivator; -import com.fr.workspace.server.ServerWorkspaceRegister; import com.fr.workspace.simple.SimpleWork; import java.io.File; @@ -35,19 +31,13 @@ import java.io.FileOutputStream; public class ExportApi { public static void main(String[] args) { // 定义报表运行环境,才能执行报表 - // 定义报表运行环境,用于执行报表 - Module module = ActivatorToolBox.simpleLink( - new WorkspaceActivator(), - new BaseDBActivator(), + Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(), new ConfigurationActivator(), new StateServerActivator(), new ReportBaseActivator(), new RestrictionActivator(), - new ReportActivator(), - new WorkspaceRegister(), - new ServerWorkspaceRegister(), - new SerializationActivator()); - String envpath = "D:\\FineReport_10\\webapps\\webroot\\WEB-INF";//工程路径 + new ReportActivator()); + String envpath = "D:\\FineReport_10.0\\webapps\\webroot\\WEB-INF"; SimpleWork.checkIn(envpath); module.start(); ResultWorkBook rworkbook = null; diff --git a/plugin-report-doc-demo/src/com/fr/io/ExportBatch.java b/plugin-report-doc-demo/src/com/fr/io/ExportBatch.java index efe2a29..227c15b 100644 --- a/plugin-report-doc-demo/src/com/fr/io/ExportBatch.java +++ b/plugin-report-doc-demo/src/com/fr/io/ExportBatch.java @@ -11,13 +11,9 @@ import com.fr.module.Module; import com.fr.module.tool.ActivatorToolBox; import com.fr.report.ReportActivator; import com.fr.report.module.ReportBaseActivator; -import com.fr.serialization.SerializationActivator; import com.fr.stable.StableUtils; import com.fr.stable.WriteActor; -import com.fr.startup.WorkspaceRegister; import com.fr.store.StateServerActivator; -import com.fr.workspace.engine.WorkspaceActivator; -import com.fr.workspace.server.ServerWorkspaceRegister; import com.fr.workspace.simple.SimpleWork; import java.io.BufferedReader; @@ -33,17 +29,12 @@ public class ExportBatch { public static void main(String[] args) { try { // 定义报表运行环境,用于执行报表 - Module module = ActivatorToolBox.simpleLink( - new WorkspaceActivator(), - new BaseDBActivator(), + Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(), new ConfigurationActivator(), new StateServerActivator(), new ReportBaseActivator(), new RestrictionActivator(), - new ReportActivator(), - new WorkspaceRegister(), - new ServerWorkspaceRegister(), - new SerializationActivator()); + new ReportActivator()); String envpath = "D:\\FineReport_10\\webapps\\webroot\\WEB-INF";//工程路径 SimpleWork.checkIn(envpath); module.start(); diff --git a/plugin-report-doc-demo/src/com/fr/io/ExportExcel.java b/plugin-report-doc-demo/src/com/fr/io/ExportExcel.java index a7a1d83..83908a7 100644 --- a/plugin-report-doc-demo/src/com/fr/io/ExportExcel.java +++ b/plugin-report-doc-demo/src/com/fr/io/ExportExcel.java @@ -1,6 +1,9 @@ package com.fr.io; import com.fr.base.Parameter; +import com.fr.config.activator.BaseDBActivator; +import com.fr.config.activator.ConfigurationActivator; +import com.fr.data.impl.config.activator.RestrictionActivator; import com.fr.general.ModuleContext; import com.fr.io.exporter.ExcelExporter; import com.fr.io.exporter.LargeDataPageExcelExporter; @@ -11,9 +14,13 @@ 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.module.Module; +import com.fr.module.tool.ActivatorToolBox; +import com.fr.report.ReportActivator; import com.fr.report.core.ReportUtils; -import com.fr.report.module.EngineModule; +import com.fr.report.module.ReportBaseActivator; import com.fr.stable.WriteActor; +import com.fr.store.StateServerActivator; import com.fr.workspace.simple.SimpleWork; import java.io.File; @@ -22,10 +29,16 @@ import java.io.FileOutputStream; public class ExportExcel { public static void main(String[] args) { - // 定义报表运行环境,才能执行报表 + // 定义报表运行环境,才能执行报表 + Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(), + new ConfigurationActivator(), + new StateServerActivator(), + new ReportBaseActivator(), + new RestrictionActivator(), + new ReportActivator()); String envpath = "D:\\FineReport_8.0\\WebReport\\WEB-INF"; SimpleWork.checkIn(envpath); - ModuleContext.startModule(EngineModule.class.getName()); + module.start(); ResultWorkBook rworkbook = null; try { // 未执行模板工作薄 diff --git a/plugin-report-doc-demo/src/com/fr/io/ExportReports.java b/plugin-report-doc-demo/src/com/fr/io/ExportReports.java index 96a20cc..595e8a0 100644 --- a/plugin-report-doc-demo/src/com/fr/io/ExportReports.java +++ b/plugin-report-doc-demo/src/com/fr/io/ExportReports.java @@ -1,14 +1,21 @@ package com.fr.io; import com.fr.base.Parameter; +import com.fr.config.activator.BaseDBActivator; +import com.fr.config.activator.ConfigurationActivator; +import com.fr.data.impl.config.activator.RestrictionActivator; import com.fr.general.ModuleContext; import com.fr.io.exporter.PageExcelExporter; import com.fr.main.TemplateWorkBook; import com.fr.main.workbook.PageWorkBook; +import com.fr.module.Module; +import com.fr.module.tool.ActivatorToolBox; +import com.fr.report.ReportActivator; import com.fr.report.core.ReportUtils; -import com.fr.report.module.EngineModule; +import com.fr.report.module.ReportBaseActivator; import com.fr.report.report.PageReport; import com.fr.stable.PageActor; +import com.fr.store.StateServerActivator; import com.fr.workspace.simple.SimpleWork; import java.io.File; @@ -17,10 +24,17 @@ import java.io.OutputStream; public class ExportReports { public static void main(String[] args) { - // ���屨�����л���,����ִ�б��� + // ���屨�����л���,����ִ�б��� + Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(), + new ConfigurationActivator(), + new StateServerActivator(), + new ReportBaseActivator(), + new RestrictionActivator(), + new ReportActivator()); String envpath = "D:\\FineReport\\develop\\code\\build\\package\\WebReport\\WEB-INF"; SimpleWork.checkIn(envpath); - ModuleContext.startModule(EngineModule.class.getName()); + module.start(); + // ���г����һЩ��Ҫ��ʼ�� try { // δִ��ģ�幤���� diff --git a/plugin-report-doc-demo/src/com/fr/io/JavaPrint.java b/plugin-report-doc-demo/src/com/fr/io/JavaPrint.java index 7a7cad8..3c35be3 100644 --- a/plugin-report-doc-demo/src/com/fr/io/JavaPrint.java +++ b/plugin-report-doc-demo/src/com/fr/io/JavaPrint.java @@ -1,8 +1,16 @@ package com.fr.io; import com.fr.base.Parameter; +import com.fr.config.activator.BaseDBActivator; +import com.fr.config.activator.ConfigurationActivator; +import com.fr.data.impl.config.activator.RestrictionActivator; import com.fr.main.TemplateWorkBook; +import com.fr.module.Module; +import com.fr.module.tool.ActivatorToolBox; import com.fr.print.PrintUtils; +import com.fr.report.ReportActivator; +import com.fr.report.module.ReportBaseActivator; +import com.fr.store.StateServerActivator; import com.fr.workspace.simple.SimpleWork; import java.util.HashMap; @@ -11,8 +19,15 @@ import java.util.HashMap; public class JavaPrint { public static void main(String[] args) { // 定义报表运行环境,才能执行报表 + Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(), + new ConfigurationActivator(), + new StateServerActivator(), + new ReportBaseActivator(), + new RestrictionActivator(), + new ReportActivator()); String envPath = "D:\\FineReport\\develop\\code\\build\\package\\WebReport\\WEB-INF"; SimpleWork.checkIn(envPath); + module.start(); try { TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook("GettingStarted.cpt"); // 参数传值 diff --git a/plugin-report-doc-demo/src/com/fr/io/SetParameterWindow.java b/plugin-report-doc-demo/src/com/fr/io/SetParameterWindow.java index aec2d19..1b1af23 100644 --- a/plugin-report-doc-demo/src/com/fr/io/SetParameterWindow.java +++ b/plugin-report-doc-demo/src/com/fr/io/SetParameterWindow.java @@ -13,11 +13,7 @@ import com.fr.module.Module; import com.fr.module.tool.ActivatorToolBox; import com.fr.report.ReportActivator; import com.fr.report.module.ReportBaseActivator; -import com.fr.serialization.SerializationActivator; -import com.fr.startup.WorkspaceRegister; import com.fr.store.StateServerActivator; -import com.fr.workspace.engine.WorkspaceActivator; -import com.fr.workspace.server.ServerWorkspaceRegister; import com.fr.workspace.simple.SimpleWork; import java.awt.Color; @@ -28,17 +24,12 @@ public class SetParameterWindow { public static void main(String[] args) { try { // 定义报表运行环境,用于执行报表 - Module module = ActivatorToolBox.simpleLink( - new WorkspaceActivator(), - new BaseDBActivator(), + Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(), new ConfigurationActivator(), new StateServerActivator(), new ReportBaseActivator(), new RestrictionActivator(), - new ReportActivator(), - new WorkspaceRegister(), - new ServerWorkspaceRegister(), - new SerializationActivator()); + new ReportActivator()); String envpath = "D:\\FineReport_10\\webapps\\webroot\\WEB-INF";//工程路径 SimpleWork.checkIn(envpath); module.start(); diff --git a/plugin-report-doc-demo/src/com/fr/io/SimpleDemo.java b/plugin-report-doc-demo/src/com/fr/io/SimpleDemo.java index 8a0357f..23f04d7 100644 --- a/plugin-report-doc-demo/src/com/fr/io/SimpleDemo.java +++ b/plugin-report-doc-demo/src/com/fr/io/SimpleDemo.java @@ -13,11 +13,7 @@ import com.fr.report.ReportActivator; import com.fr.report.cell.CellElement; import com.fr.report.elementcase.TemplateElementCase; import com.fr.report.module.ReportBaseActivator; -import com.fr.serialization.SerializationActivator; -import com.fr.startup.WorkspaceRegister; import com.fr.store.StateServerActivator; -import com.fr.workspace.engine.WorkspaceActivator; -import com.fr.workspace.server.ServerWorkspaceRegister; import com.fr.workspace.simple.SimpleWork; import java.awt.Color; @@ -27,17 +23,12 @@ import java.io.FileOutputStream; public class SimpleDemo { public static void main(String[] args) { // 定义报表运行环境,用于执行报表 - Module module = ActivatorToolBox.simpleLink( - new WorkspaceActivator(), - new BaseDBActivator(), + Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(), new ConfigurationActivator(), new StateServerActivator(), new ReportBaseActivator(), new RestrictionActivator(), - new ReportActivator(), - new WorkspaceRegister(), - new ServerWorkspaceRegister(), - new SerializationActivator()); + new ReportActivator()); String envpath = "D:\\FineReport_10\\webapps\\webroot\\WEB-INF";//工程路径 SimpleWork.checkIn(envpath); module.start(); diff --git a/plugin-report-doc-demo/src/com/fr/openapi/remote/TemplateRead.java b/plugin-report-doc-demo/src/com/fr/openapi/remote/TemplateRead.java new file mode 100644 index 0000000..3775266 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/openapi/remote/TemplateRead.java @@ -0,0 +1,73 @@ +package com.fr.openapi.remote; + +import com.fr.config.activator.ConfigurationActivator; +import com.fr.data.impl.config.activator.RestrictionActivator; +import com.fr.design.env.DesignerWorkspaceGenerator; +import com.fr.design.env.RemoteDesignerWorkspaceInfo; +import com.fr.io.TemplateWorkBookIO; +import com.fr.log.FineLoggerFactory; +import com.fr.main.TemplateWorkBook; +import com.fr.main.workbook.ResultWorkBook; +import com.fr.module.Activator; +import com.fr.module.Module; +import com.fr.module.tool.ActivatorToolBox; +import com.fr.report.ReportActivator; +import com.fr.report.module.ReportBaseActivator; +import com.fr.serialization.SerializationActivator; +import com.fr.stable.PageActor; +import com.fr.startup.WorkspaceRegister; +import com.fr.store.StateServerActivator; +import com.fr.workspace.WorkContext; +import com.fr.workspace.connect.WorkspaceConnectionInfo; +import com.fr.workspace.engine.WorkspaceActivator; +import com.fr.workspace.server.ServerWorkspaceRegister; + +import java.util.HashMap; + +/** + * 远程环境读取模板 + */ +public class TemplateRead { + + public static void main(String[] args) { + try { + Module module = ActivatorToolBox.simpleLink( + new WorkspaceActivator(), + new SerializationActivator(), + new Activator() { + @Override + public void start() { + WorkspaceConnectionInfo connectionInfo = new WorkspaceConnectionInfo("http://远程服务器地址:8080/webroot/decision", "admin", "ilovejava", "", ""); + try { + WorkContext.switchTo(DesignerWorkspaceGenerator.generate(RemoteDesignerWorkspaceInfo.create(connectionInfo))); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void stop() { + + } + }, + new ConfigurationActivator(), + new StateServerActivator(), + new ReportBaseActivator(), + new RestrictionActivator(), + new ReportActivator(), + new WorkspaceRegister(), + new ServerWorkspaceRegister() + ); + module.start(); + TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook("12345678.cpt"); + ResultWorkBook result = workbook.execute(new HashMap(), new PageActor()); + + module.stop();//停止module + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + + } + + } + +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/MyLocaleFinder.java b/plugin-report-doc-demo/src/com/fr/plugin/core/MyLocaleFinder.java new file mode 100644 index 0000000..9818a20 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/MyLocaleFinder.java @@ -0,0 +1,15 @@ +package com.fr.plugin.core; + +import com.fr.intelli.record.Focus; +import com.fr.intelli.record.Original; +import com.fr.record.analyzer.EnableMetrics; +import com.fr.stable.fun.impl.AbstractLocaleFinder; + +@EnableMetrics +public class MyLocaleFinder extends AbstractLocaleFinder { + @Override + @Focus(id = "com.fr.plugin.function", text = "插件全家桶", source = Original.PLUGIN) + public String find() { + return "com/fr/plugin/demo"; + } +} diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/secondary/ResourcePathTransformerImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/secondary/ResourcePathTransformerImpl.java new file mode 100644 index 0000000..8749367 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/secondary/ResourcePathTransformerImpl.java @@ -0,0 +1,18 @@ +package com.fr.plugin.core.secondary; + +import com.fr.stable.fun.impl.AbstractResourcePathTransformer; + +/** + * 资源路径接口 + */ +public class ResourcePathTransformerImpl extends AbstractResourcePathTransformer{ + @Override + public boolean accept(String s) { + return true; + } + + @Override + public String transform(String s) { + return s; + } +} \ No newline at end of file diff --git a/plugin-report-doc-demo/src/com/fr/plugin/core/secondary/SiteTransformerImpl.java b/plugin-report-doc-demo/src/com/fr/plugin/core/secondary/SiteTransformerImpl.java new file mode 100644 index 0000000..e962783 --- /dev/null +++ b/plugin-report-doc-demo/src/com/fr/plugin/core/secondary/SiteTransformerImpl.java @@ -0,0 +1,23 @@ +package com.fr.plugin.core.secondary; + +import com.fr.stable.fun.impl.AbstractSiteTransformer; + +/** + * cloudcenter地址接口 + */ +public class SiteTransformerImpl extends AbstractSiteTransformer{ + @Override + public boolean match(String s) { + return true; + } + + @Override + public String transform() { + return ""; + } + + @Override + public String transform(String s) { + return s; + } +} \ No newline at end of file