- 浏览: 2261821 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (423)
- FileNet相关 (3)
- 应用服务器相关 (22)
- Java综合 (77)
- 持久层 (24)
- struts (11)
- webservice (8)
- 虚拟机 (2)
- 光盘刻录 (0)
- AD及AD集群 (1)
- JS (33)
- F5 (0)
- loadrunner8.1 (0)
- Java 反编译工具 (2)
- DataBase (62)
- ant (1)
- 操作系统 (29)
- 我的任务 (3)
- 平台架构 (16)
- 业务规则引擎 (2)
- 模板 (1)
- EJB (5)
- spring (24)
- CMMI (1)
- 项目管理 (20)
- LDAP (13)
- JMS (10)
- JSP (19)
- JBPM (2)
- web MVC框架设计思想 (2)
- 第三方支付平台 (2)
- BUG管理工具 (1)
- 垃圾站 (2)
- php (1)
- swing (1)
- 书籍 (1)
- QQ qq (2)
- 移动互联网 (26)
- 爱听的歌曲 (0)
- hadoop (4)
- 数据库 (9)
- 设计模式 (1)
- 面试经验只谈 (1)
- 大数据 (9)
- sp (1)
- 缓存数据库 (8)
- storm (2)
- taobao (2)
- 分布式,高并发,大型互联网,负载均衡 (6)
- Apache Ignite (0)
- Docker & K8S (0)
最新评论
-
wangyudong:
新版本 Wisdom RESTClienthttps://gi ...
spring rest mvc使用RestTemplate调用 -
wangyudong:
很多API doc生成工具生成API文档需要引入第三方依赖,重 ...
spring rest mvc使用RestTemplate调用 -
zhaoshijie:
cfying 写道大侠,还是加载了两次,怎么解决啊?求。QQ: ...
spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) -
xinglianxlxl:
对我有用,非常感谢
spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) -
k_caesar:
多谢,学习了
利用maven的resources、filter和profile实现不同环境使用不同配置文件
一、导入附件中的jar包(IKExpression1.0.jar)
二、处理表达式简单例子
//根据给定的路由表达式判断是否该路由
public boolean isPassHere(RouteInfo routeInfo, Map<String, Object> dateMap) {
if (routeInfo == null) {
return false;
}
// 如果表达式为空 说明 工作流中 路由条件为:始终为true
if (routeInfo.getCondition().equals("")
|| routeInfo.getCondition() == null) {
return true;
}
// 获取路由表达式,并将表达式转换为 Java支持的表达式
String expression = treatmentExpression(routeInfo.getCondition());
System.out.println(expression);
// 准备表达式中参与的变量
List<Variable> variables = new ArrayList<Variable>();
for (Entry<String, Object> param : dateMap.entrySet()) {
try {
if (isIncludeSubString(expression, param.getKey())) {
Variable variable = new Variable(param.getKey(),
getVariableType(dateMap.get(param.getKey())
.getClass().getSimpleName()), param
.getValue());
variables.add(variable);
}
} catch (BPMException e) {
e.printStackTrace();
}
}
if (variables.size() <= 0) {
return false;
}
Object isOk = ExpressionEvaluator.evaluate(expression, variables);
if (isOk.toString().equals("true")) {
return true;
}
return false;
}
//获取变量的类型
private BaseDataMeta.DataType getVariableType(String strTypt){
if(strTypt.equals("")){
return DataType.DATATYPE_NULL;
}
if(strTypt.equals("String")){
return DataType.DATATYPE_STRING;
}
if(strTypt.equals("Boolean")){
return DataType.DATATYPE_BOOLEAN;
}
if(strTypt.equals("Integer")){
return DataType.DATATYPE_INT;
}
if(strTypt.equals("Long")){
return DataType.DATATYPE_LONG;
}
if(strTypt.equals("Double")){
return DataType.DATATYPE_DOUBLE;
}
if(strTypt.equals("Float")){
return DataType.DATATYPE_FLOAT;
}
if(strTypt.equals("Set")||strTypt.equals("ArrayList")){
return DataType.DATATYPE_COLLECTION;
}
if(strTypt.equals("Date")){
return DataType.DATATYPE_DATE;
}
return null;
}
//判断表达式中是否包含某个变量
private boolean isIncludeSubString(String str, String subString){
boolean result = false;
if (str == null || subString == null){
return false;
}
int strLength = str.length();
int subStrLength = subString.length();
String tmpStr = null;
for (int i = 0; i < strLength; i++){
if (strLength - i < subStrLength){
return false;
}
tmpStr = str.substring(i, subStrLength + i);
if (tmpStr.endsWith(subString)){
return true;
}
}
return result;
}
}
//处理表达式,使其成为Java合法表达式(因为FileNet的表达式是数据库规范)
private String treatmentExpression(String expression){
String qualifiedExpression = expression.replaceAll("and", "&&").replaceAll("or", "||").replaceAll("<>", "!=");
if(! isIncludeSubString(qualifiedExpression,"=")){
return qualifiedExpression;
}
for (int i = 0; i < qualifiedExpression.length(); i++) {
String substr = qualifiedExpression.substring(i, i+1);
if(substr.equals("=")){
String prefix = qualifiedExpression.substring(i-1, i);
String suffix = qualifiedExpression.substring(i+1, i+2);
//如果“=”号前缀没有 ">"、"<"、"=" 并且后缀没有"="连接,那么就证明是一个单独的"="号,我们把等于号改成"=="操作符,因为我们只支持'"=="操作符
if( ! (prefix.equals(">") || prefix.equals("<") || prefix.equals("!") || prefix.equals("=") || suffix.equals("="))){
String p = qualifiedExpression.substring(0, i);
String s = qualifiedExpression.substring(i+1, qualifiedExpression.length());
qualifiedExpression=p+"=="+s;
}
}
}
return qualifiedExpression;
}
二、处理表达式简单例子
//根据给定的路由表达式判断是否该路由
public boolean isPassHere(RouteInfo routeInfo, Map<String, Object> dateMap) {
if (routeInfo == null) {
return false;
}
// 如果表达式为空 说明 工作流中 路由条件为:始终为true
if (routeInfo.getCondition().equals("")
|| routeInfo.getCondition() == null) {
return true;
}
// 获取路由表达式,并将表达式转换为 Java支持的表达式
String expression = treatmentExpression(routeInfo.getCondition());
System.out.println(expression);
// 准备表达式中参与的变量
List<Variable> variables = new ArrayList<Variable>();
for (Entry<String, Object> param : dateMap.entrySet()) {
try {
if (isIncludeSubString(expression, param.getKey())) {
Variable variable = new Variable(param.getKey(),
getVariableType(dateMap.get(param.getKey())
.getClass().getSimpleName()), param
.getValue());
variables.add(variable);
}
} catch (BPMException e) {
e.printStackTrace();
}
}
if (variables.size() <= 0) {
return false;
}
Object isOk = ExpressionEvaluator.evaluate(expression, variables);
if (isOk.toString().equals("true")) {
return true;
}
return false;
}
//获取变量的类型
private BaseDataMeta.DataType getVariableType(String strTypt){
if(strTypt.equals("")){
return DataType.DATATYPE_NULL;
}
if(strTypt.equals("String")){
return DataType.DATATYPE_STRING;
}
if(strTypt.equals("Boolean")){
return DataType.DATATYPE_BOOLEAN;
}
if(strTypt.equals("Integer")){
return DataType.DATATYPE_INT;
}
if(strTypt.equals("Long")){
return DataType.DATATYPE_LONG;
}
if(strTypt.equals("Double")){
return DataType.DATATYPE_DOUBLE;
}
if(strTypt.equals("Float")){
return DataType.DATATYPE_FLOAT;
}
if(strTypt.equals("Set")||strTypt.equals("ArrayList")){
return DataType.DATATYPE_COLLECTION;
}
if(strTypt.equals("Date")){
return DataType.DATATYPE_DATE;
}
return null;
}
//判断表达式中是否包含某个变量
private boolean isIncludeSubString(String str, String subString){
boolean result = false;
if (str == null || subString == null){
return false;
}
int strLength = str.length();
int subStrLength = subString.length();
String tmpStr = null;
for (int i = 0; i < strLength; i++){
if (strLength - i < subStrLength){
return false;
}
tmpStr = str.substring(i, subStrLength + i);
if (tmpStr.endsWith(subString)){
return true;
}
}
return result;
}
}
//处理表达式,使其成为Java合法表达式(因为FileNet的表达式是数据库规范)
private String treatmentExpression(String expression){
String qualifiedExpression = expression.replaceAll("and", "&&").replaceAll("or", "||").replaceAll("<>", "!=");
if(! isIncludeSubString(qualifiedExpression,"=")){
return qualifiedExpression;
}
for (int i = 0; i < qualifiedExpression.length(); i++) {
String substr = qualifiedExpression.substring(i, i+1);
if(substr.equals("=")){
String prefix = qualifiedExpression.substring(i-1, i);
String suffix = qualifiedExpression.substring(i+1, i+2);
//如果“=”号前缀没有 ">"、"<"、"=" 并且后缀没有"="连接,那么就证明是一个单独的"="号,我们把等于号改成"=="操作符,因为我们只支持'"=="操作符
if( ! (prefix.equals(">") || prefix.equals("<") || prefix.equals("!") || prefix.equals("=") || suffix.equals("="))){
String p = qualifiedExpression.substring(0, i);
String s = qualifiedExpression.substring(i+1, qualifiedExpression.length());
qualifiedExpression=p+"=="+s;
}
}
}
return qualifiedExpression;
}
- IKExpression1.0.rar (518.5 KB)
- 下载次数: 3
发表评论
文章已被作者锁定,不允许评论。
-
各大巨头电商提供的IP库API接口-新浪、搜狐、阿里...
2015-04-22 13:18 15910关键字:各大巨头电商提供的IP库API接口-新浪、搜狐、阿里. ... -
用Java来获取访问者真实的IP地址-超准确
2015-04-22 12:55 6258关键字:用Java来获取访问者真实的IP地址-超准确 下面分享 ... -
Shiro集成OAuth2
2015-04-21 10:31 12445关键字:Shiro集成OAuth2 参考:http://jin ... -
淘宝网架构分享总结 - 架构,分布式,淘宝,虚拟化,水平伸缩
2015-04-19 00:25 7635推荐综合架构交流群:JAVA开发高级群 点击入群!!! 关键 ... -
Zookeeper 和 SASL
2015-04-16 09:29 13636关键字:Zookeeper 和 SASL 介绍 这是一个描述Z ... -
非对称加密(RSA)加密解密实现通信JAVA端工具类(教程)
2015-04-15 17:27 1184关键字:非对称加密(RSA)加密解密实现通信JAVA端工具类( ... -
对称加密(AES)加密实现工具类(教程)
2015-04-15 17:11 2146关键字:对称加密(AES)加密实现工具类(教程) Java加 ... -
Curator-Framework开源Zookeeper快速开发框架介绍
2015-04-14 18:41 703关键字:Curator-Framework开源Zookeepe ... -
IM消息推送之Openfire
2015-04-13 13:40 2213关键字:IM消息推送之Openfire Openfire 采用 ... -
Nio框架之Mina的demo
2015-04-12 13:38 644关键字:Nio框架之Mina的demo 官网:http://m ... -
AMQP中文版协议规范
2015-01-23 17:12 2989关键字:AMQP中文版协议规范 AMQP中文版协议规范:ht ... -
数据库连接池选型
2014-12-04 18:32 1171关键字:数据库连接池选型 proxool(与spring不太 ... -
spring中的数据源配置信息加密方案
2014-10-22 10:36 1076关键字:spring中的数据源配置信息加密方案 附件是完整的 ... -
OAuth2.0的Java实现 Apache Amber
2014-10-09 23:20 795关键字:OAuth2.0的Java实现 Apache Ambe ... -
企业信息管理系统基础框架jeesite
2014-05-06 22:21 2586jeesite项目地址(使用说明,):http://jeesi ... -
java中文分词组件-word分词
2014-05-06 21:33 21987关键字:java中文分词组 ... -
java制作可执行文件EXE文件
2014-05-05 18:58 1603关键字:java制作可执行文件EXE文件 参考:http: ... -
Quartz任务调度器详解
2014-04-25 22:46 19001关键字: 参考文章:ht ... -
各种hash算法-hashcodeUtil
2014-04-24 15:36 4245关键字:各种hash算法-hashcodeUtil -
性能监控工具类(StopWatchUtil)
2014-03-21 15:12 5747关键字:性能监控工具类(StopWatchUtil) 附 ...
相关推荐
本项目名为“fast-route”,是一个利用正则表达式优化的高效URL路由解决方案。它允许开发者通过简洁的接口定义路由,并且利用正则表达式的强大功能来精确匹配URL路径。 一、正则表达式在路由中的应用 正则表达式...
1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 ...
1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 ...
在IT行业中,Mule是一个强大的企业服务总线(ESB)和集成平台,它允许开发者构建和部署可扩展的应用程序和服务。"Mule实现路由分发"这一主题...理解并熟练运用这些知识点,对于构建高效、灵活的集成解决方案至关重要。
通过构建一个邻接矩阵或邻接表来表示迷宫,然后利用栈或队列进行遍历,可以找到有效的解决方案。 波兰表达式,又称前缀表达式,是一种没有括号的表达式形式,运算符位于其操作数之前。处理波兰表达式时,可以使用栈...
**文件名称列表解析:** 由于只给出了一个文件名 "SimpleCalculator",我们可以推测这可能是项目的主要源代码文件或者解决方案文件。在.NET开发环境中,这通常会是一个包含整个项目的解决方案文件(.sln)或者主要的...
锐捷网络是专注于网络设备与解决方案的厂商,RGNOS是锐捷网络的操作系统,本配置指南旨在帮助网络管理员了解如何在RGNOS环境下配置和管理路由协议,包括路由协议的无关配置、策略路由配置以及RIP、OSPF和BGP协议的...
但如果你的项目只需要基本的路径匹配功能,它无疑是更为高效的解决方案。 总结来说,`regexparam`是一个小巧且实用的JavaScript工具,适用于处理基础的Web路由模式转换。在资源有限或追求性能优化的项目中,它可以...
FastRoute是Nikita Popov创建的一个高性能的PHP路由解析库,它为路由解析提供了高效且灵活的解决方案。 FastRoute的工作原理是通过编译路由定义到正则表达式,然后使用这些正则表达式在请求URL上进行匹配。这种方式...
在描述中提到的解决方案是利用Vue的`watch`选项来监听`$route`对象的变化。`watch`是一个对象,它的键是需要观察的表达式,值是对应的回调函数。在回调函数中,`to`和`from`参数分别代表即将进入的和即将离开的路由...
以下是一个详细的解决方案,针对的是使用Vue.js和MuseUI库构建的Web应用程序。 首先,我们需要了解Vue Router的基本概念。Vue Router是Vue.js官方的路由管理器,它通过`path`和`component`来定义路由,并可以通过`...
该压缩包文件包含了书中所有算法设计题目的解决方案,对于学习和复习数据结构非常有帮助。 首先,我们要了解数据结构的基本概念。数据结构主要包括数组、链表、栈、队列、树、图等类型。每种数据结构都有其特定的...
Apache Camel 是一个强大的开源企业级集成框架,它简化了在Java应用程序之间建立复杂的消息传递流程。...通过深入研究这些文档,开发者可以有效地利用Camel构建高效、可扩展的企业级集成解决方案。
**针对不同版本的 ASP.NET Core 的解决方案** - **ASP.NET Core 2.2 MVC**: 在 `ConfigureServices` 方法中使用上述的 `services.AddRouting` 和 `options.ConstraintMap` 配置。 - **ASP.NET Core 2.2 Web API*...
总的来说,`Laravel开发-easyrouting` 可能是一种提高路由管理效率的解决方案,通过提供额外的便利性和灵活性,让开发者能够更专注于业务逻辑,而不是路由的配置。如果你正在使用或研究Laravel,理解和掌握这类工具...
【代码9.2blog】是一个包含了多个编程问题解决方案的压缩包,主要针对的是9月1日发布的博客内容。从描述中我们可以看出,这个压缩包涵盖了多个领域的编程挑战,包括但不限于简易火车票售票系统、最佳路径算法、胜负...