Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
开发团队
Flowable Engine
提交
9e309777
F
Flowable Engine
项目概览
开发团队
/
Flowable Engine
通知
9
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Flowable Engine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9e309777
编写于
9月 10, 2014
作者:
T
Tijs Rademakers
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'contribute' of
https://github.com/balsarori/Activiti
上级
7addca6a
05c8a821
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
365 addition
and
152 deletion
+365
-152
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/UserTaskXMLConverter.java
...ava/org/activiti/bpmn/converter/UserTaskXMLConverter.java
+98
-4
modules/activiti-bpmn-converter/src/test/java/org/activiti/editor/language/xml/UserTaskConverterTest.java
...g/activiti/editor/language/xml/UserTaskConverterTest.java
+7
-0
modules/activiti-bpmn-converter/src/test/resources/usertaskmodel.bpmn
...viti-bpmn-converter/src/test/resources/usertaskmodel.bpmn
+11
-1
modules/activiti-bpmn-model/src/main/java/org/activiti/bpmn/model/UserTask.java
...model/src/main/java/org/activiti/bpmn/model/UserTask.java
+51
-0
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/handler/UserTaskParseHandler.java
...engine/impl/bpmn/parser/handler/UserTaskParseHandler.java
+17
-143
modules/activiti-json-converter/src/main/java/org/activiti/editor/constants/StencilConstants.java
.../java/org/activiti/editor/constants/StencilConstants.java
+6
-0
modules/activiti-json-converter/src/main/java/org/activiti/editor/language/json/converter/UserTaskJsonConverter.java
...editor/language/json/converter/UserTaskJsonConverter.java
+80
-2
modules/activiti-json-converter/src/test/java/org/activiti/editor/language/UserTaskConverterTest.java
...a/org/activiti/editor/language/UserTaskConverterTest.java
+11
-0
modules/activiti-json-converter/src/test/resources/test.usertaskmodel.json
...json-converter/src/test/resources/test.usertaskmodel.json
+19
-0
modules/activiti-webapp-explorer2/src/main/resources/stencilset.json
...iviti-webapp-explorer2/src/main/resources/stencilset.json
+65
-2
未找到文件。
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/UserTaskXMLConverter.java
浏览文件 @
9e309777
...
...
@@ -12,10 +12,13 @@
*/
package
org.activiti.bpmn.converter
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
javax.xml.stream.XMLStreamReader
;
import
javax.xml.stream.XMLStreamWriter
;
...
...
@@ -52,6 +55,8 @@ public class UserTaskXMLConverter extends BaseBpmnXMLConverter {
childParserMap
.
put
(
humanPerformerParser
.
getElementName
(),
humanPerformerParser
);
PotentialOwnerParser
potentialOwnerParser
=
new
PotentialOwnerParser
();
childParserMap
.
put
(
potentialOwnerParser
.
getElementName
(),
potentialOwnerParser
);
CustomIdentityLinkParser
customIdentityLinkParser
=
new
CustomIdentityLinkParser
();
childParserMap
.
put
(
customIdentityLinkParser
.
getElementName
(),
customIdentityLinkParser
);
}
public
Class
<?
extends
BaseElement
>
getBpmnElementType
()
{
...
...
@@ -125,9 +130,56 @@ public class UserTaskXMLConverter extends BaseBpmnXMLConverter {
protected
boolean
writeExtensionChildElements
(
BaseElement
element
,
boolean
didWriteExtensionStartElement
,
XMLStreamWriter
xtw
)
throws
Exception
{
UserTask
userTask
=
(
UserTask
)
element
;
didWriteExtensionStartElement
=
writeFormProperties
(
userTask
,
didWriteExtensionStartElement
,
xtw
);
didWriteExtensionStartElement
=
writeCustomIdentities
(
element
,
didWriteExtensionStartElement
,
xtw
);
return
didWriteExtensionStartElement
;
}
protected
boolean
writeCustomIdentities
(
BaseElement
element
,
boolean
didWriteExtensionStartElement
,
XMLStreamWriter
xtw
)
throws
Exception
{
UserTask
userTask
=
(
UserTask
)
element
;
if
(
userTask
.
getCustomUserIdentityLinks
().
size
()
==
0
&&
userTask
.
getCustomGroupIdentityLinks
().
size
()
==
0
)
return
didWriteExtensionStartElement
;
if
(
didWriteExtensionStartElement
==
false
)
{
xtw
.
writeStartElement
(
ELEMENT_EXTENSIONS
);
didWriteExtensionStartElement
=
true
;
}
Set
<
String
>
identityLinkTypes
=
new
HashSet
<
String
>();
identityLinkTypes
.
addAll
(
userTask
.
getCustomUserIdentityLinks
().
keySet
());
identityLinkTypes
.
addAll
(
userTask
.
getCustomGroupIdentityLinks
().
keySet
());
for
(
String
identityType
:
identityLinkTypes
)
{
writeCustomIdentities
(
userTask
,
identityType
,
userTask
.
getCustomUserIdentityLinks
().
get
(
identityType
),
userTask
.
getCustomGroupIdentityLinks
().
get
(
identityType
),
xtw
);
}
return
didWriteExtensionStartElement
;
}
protected
void
writeCustomIdentities
(
UserTask
userTask
,
String
identityType
,
Set
<
String
>
users
,
Set
<
String
>
groups
,
XMLStreamWriter
xtw
)
throws
Exception
{
xtw
.
writeStartElement
(
ACTIVITI_EXTENSIONS_PREFIX
,
ELEMENT_CUSTOM_RESOURCE
,
ACTIVITI_EXTENSIONS_NAMESPACE
);
xtw
.
writeAttribute
(
ACTIVITI_EXTENSIONS_PREFIX
,
ACTIVITI_EXTENSIONS_NAMESPACE
,
ATTRIBUTE_NAME
,
identityType
);
List
<
String
>
identityList
=
new
ArrayList
<
String
>();
if
(
users
!=
null
)
for
(
String
userId:
users
){
identityList
.
add
(
"user("
+
userId
+
")"
);
}
if
(
groups
!=
null
)
for
(
String
groupId:
groups
){
identityList
.
add
(
"group("
+
groupId
+
")"
);
}
String
delimitedString
=
convertToDelimitedString
(
identityList
);
xtw
.
writeStartElement
(
ELEMENT_RESOURCE_ASSIGNMENT
);
xtw
.
writeStartElement
(
ELEMENT_FORMAL_EXPRESSION
);
xtw
.
writeCharacters
(
delimitedString
);
xtw
.
writeEndElement
();
// End ELEMENT_CUSTOM_RESOURCE
xtw
.
writeEndElement
();
// End ELEMENT_RESOURCE_ASSIGNMENT
xtw
.
writeEndElement
();
// End ELEMENT_FORMAL_EXPRESSION
}
@Override
protected
void
writeAdditionalChildElements
(
BaseElement
element
,
BpmnModel
model
,
XMLStreamWriter
xtw
)
throws
Exception
{
}
...
...
@@ -140,9 +192,9 @@ public class UserTaskXMLConverter extends BaseBpmnXMLConverter {
public
void
parseChildElement
(
XMLStreamReader
xtr
,
BaseElement
parentElement
,
BpmnModel
model
)
throws
Exception
{
String
resourceElement
=
XMLStreamReaderUtil
.
moveDown
(
xtr
);
if
(
StringUtils
.
isNotEmpty
(
resourceElement
)
&&
"resourceAssignmentExpression"
.
equals
(
resourceElement
))
{
if
(
StringUtils
.
isNotEmpty
(
resourceElement
)
&&
ELEMENT_RESOURCE_ASSIGNMENT
.
equals
(
resourceElement
))
{
String
expression
=
XMLStreamReaderUtil
.
moveDown
(
xtr
);
if
(
StringUtils
.
isNotEmpty
(
expression
)
&&
"formalExpression"
.
equals
(
expression
))
{
if
(
StringUtils
.
isNotEmpty
(
expression
)
&&
ELEMENT_FORMAL_EXPRESSION
.
equals
(
expression
))
{
((
UserTask
)
parentElement
).
setAssignee
(
xtr
.
getElementText
());
}
}
...
...
@@ -161,9 +213,9 @@ public class UserTaskXMLConverter extends BaseBpmnXMLConverter {
public
void
parseChildElement
(
XMLStreamReader
xtr
,
BaseElement
parentElement
,
BpmnModel
model
)
throws
Exception
{
String
resourceElement
=
XMLStreamReaderUtil
.
moveDown
(
xtr
);
if
(
StringUtils
.
isNotEmpty
(
resourceElement
)
&&
"resourceAssignmentExpression"
.
equals
(
resourceElement
))
{
if
(
StringUtils
.
isNotEmpty
(
resourceElement
)
&&
ELEMENT_RESOURCE_ASSIGNMENT
.
equals
(
resourceElement
))
{
String
expression
=
XMLStreamReaderUtil
.
moveDown
(
xtr
);
if
(
StringUtils
.
isNotEmpty
(
expression
)
&&
"formalExpression"
.
equals
(
expression
))
{
if
(
StringUtils
.
isNotEmpty
(
expression
)
&&
ELEMENT_FORMAL_EXPRESSION
.
equals
(
expression
))
{
List
<
String
>
assignmentList
=
CommaSplitter
.
splitCommas
(
xtr
.
getElementText
());
...
...
@@ -190,4 +242,46 @@ public class UserTaskXMLConverter extends BaseBpmnXMLConverter {
}
}
}
public
class
CustomIdentityLinkParser
extends
BaseChildElementParser
{
public
String
getElementName
()
{
return
ELEMENT_CUSTOM_RESOURCE
;
}
public
void
parseChildElement
(
XMLStreamReader
xtr
,
BaseElement
parentElement
,
BpmnModel
model
)
throws
Exception
{
String
identityLinkType
=
xtr
.
getAttributeValue
(
ACTIVITI_EXTENSIONS_NAMESPACE
,
ATTRIBUTE_NAME
);
if
(
identityLinkType
==
null
)
return
;
String
resourceElement
=
XMLStreamReaderUtil
.
moveDown
(
xtr
);
if
(
StringUtils
.
isNotEmpty
(
resourceElement
)
&&
ELEMENT_RESOURCE_ASSIGNMENT
.
equals
(
resourceElement
))
{
String
expression
=
XMLStreamReaderUtil
.
moveDown
(
xtr
);
if
(
StringUtils
.
isNotEmpty
(
expression
)
&&
ELEMENT_FORMAL_EXPRESSION
.
equals
(
expression
))
{
List
<
String
>
assignmentList
=
CommaSplitter
.
splitCommas
(
xtr
.
getElementText
());
for
(
String
assignmentValue
:
assignmentList
)
{
if
(
assignmentValue
==
null
)
continue
;
assignmentValue
=
assignmentValue
.
trim
();
if
(
assignmentValue
.
length
()
==
0
)
continue
;
String
userPrefix
=
"user("
;
String
groupPrefix
=
"group("
;
if
(
assignmentValue
.
startsWith
(
userPrefix
))
{
assignmentValue
=
assignmentValue
.
substring
(
userPrefix
.
length
(),
assignmentValue
.
length
()
-
1
).
trim
();
((
UserTask
)
parentElement
).
addCustomUserIdentityLink
(
assignmentValue
,
identityLinkType
);
}
else
if
(
assignmentValue
.
startsWith
(
groupPrefix
))
{
assignmentValue
=
assignmentValue
.
substring
(
groupPrefix
.
length
(),
assignmentValue
.
length
()
-
1
).
trim
();
((
UserTask
)
parentElement
).
addCustomGroupIdentityLink
(
assignmentValue
,
identityLinkType
);
}
else
{
((
UserTask
)
parentElement
).
addCustomGroupIdentityLink
(
assignmentValue
,
identityLinkType
);
}
}
}
}
}
}
}
modules/activiti-bpmn-converter/src/test/java/org/activiti/editor/language/xml/UserTaskConverterTest.java
浏览文件 @
9e309777
...
...
@@ -55,6 +55,13 @@ public class UserTaskConverterTest extends AbstractConverterTest {
assertTrue
(
userTask
.
getCandidateGroups
().
contains
(
"management"
));
assertTrue
(
userTask
.
getCandidateGroups
().
contains
(
"sales"
));
assertEquals
(
1
,
userTask
.
getCustomUserIdentityLinks
().
size
());
assertEquals
(
2
,
userTask
.
getCustomGroupIdentityLinks
().
size
());
assertTrue
(
userTask
.
getCustomUserIdentityLinks
().
get
(
"businessAdministrator"
).
contains
(
"kermit"
));
assertTrue
(
userTask
.
getCustomGroupIdentityLinks
().
get
(
"manager"
).
contains
(
"management"
));
assertTrue
(
userTask
.
getCustomGroupIdentityLinks
().
get
(
"businessAdministrator"
).
contains
(
"management"
));
List
<
FormProperty
>
formProperties
=
userTask
.
getFormProperties
();
assertEquals
(
3
,
formProperties
.
size
());
FormProperty
formProperty
=
formProperties
.
get
(
0
);
...
...
modules/activiti-bpmn-converter/src/test/resources/usertaskmodel.bpmn
浏览文件 @
9e309777
...
...
@@ -7,6 +7,16 @@
<sequenceFlow
id=
"sid-AA1205FD-63BD-47BA-9FB3-AA9F7C1E31F0"
sourceRef=
"usertask"
targetRef=
"endEvent"
></sequenceFlow>
<userTask
id=
"usertask"
name=
"User task"
activiti:async=
"true"
activiti:exclusive=
"false"
activiti:assignee=
"kermit"
activiti:candidateUsers=
"kermit,fozzie"
activiti:candidateGroups=
"management,sales"
activiti:dueDate=
"2012-11-01"
activiti:formKey=
"testKey"
activiti:priority=
"40"
>
<extensionElements>
<activiti:customResource
activiti:name=
"businessAdministrator"
>
<resourceAssignmentExpression>
<formalExpression>
user(kermit), group(management)
</formalExpression>
</resourceAssignmentExpression>
</activiti:customResource>
<activiti:customResource
activiti:name=
"manager"
>
<resourceAssignmentExpression>
<formalExpression>
group(management)
</formalExpression>
</resourceAssignmentExpression>
</activiti:customResource>
<activiti:formProperty
id=
"formId"
name=
"formName"
type=
"string"
expression=
"${expression}"
variable=
"variable"
></activiti:formProperty>
<activiti:formProperty
id=
"formId2"
name=
"anotherName"
type=
"long"
></activiti:formProperty>
<activiti:formProperty
id=
"formId3"
name=
"enumName"
type=
"enum"
>
...
...
@@ -47,4 +57,4 @@
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
\ No newline at end of file
</definitions>
modules/activiti-bpmn-model/src/main/java/org/activiti/bpmn/model/UserTask.java
浏览文件 @
9e309777
...
...
@@ -13,7 +13,12 @@
package
org.activiti.bpmn.model
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
/**
* @author Tijs Rademakers
...
...
@@ -30,6 +35,9 @@ public class UserTask extends Task {
protected
List
<
String
>
candidateGroups
=
new
ArrayList
<
String
>();
protected
List
<
FormProperty
>
formProperties
=
new
ArrayList
<
FormProperty
>();
protected
List
<
ActivitiListener
>
taskListeners
=
new
ArrayList
<
ActivitiListener
>();
protected
Map
<
String
,
Set
<
String
>>
customUserIdentityLinks
=
new
HashMap
<
String
,
Set
<
String
>>();
protected
Map
<
String
,
Set
<
String
>>
customGroupIdentityLinks
=
new
HashMap
<
String
,
Set
<
String
>>();
public
String
getAssignee
()
{
return
assignee
;
...
...
@@ -92,6 +100,46 @@ public class UserTask extends Task {
this
.
taskListeners
=
taskListeners
;
}
public
void
addCustomUserIdentityLink
(
String
userId
,
String
type
){
Set
<
String
>
userIdentitySet
=
customUserIdentityLinks
.
get
(
type
);
if
(
userIdentitySet
==
null
){
userIdentitySet
=
new
HashSet
<
String
>();
customUserIdentityLinks
.
put
(
type
,
userIdentitySet
);
}
userIdentitySet
.
add
(
userId
);
}
public
void
addCustomGroupIdentityLink
(
String
groupId
,
String
type
){
Set
<
String
>
groupIdentitySet
=
customGroupIdentityLinks
.
get
(
type
);
if
(
groupIdentitySet
==
null
){
groupIdentitySet
=
new
HashSet
<
String
>();
customGroupIdentityLinks
.
put
(
type
,
groupIdentitySet
);
}
groupIdentitySet
.
add
(
groupId
);
}
public
Map
<
String
,
Set
<
String
>>
getCustomUserIdentityLinks
()
{
return
customUserIdentityLinks
;
}
public
void
setCustomUserIdentityLinks
(
Map
<
String
,
Set
<
String
>>
customUserIdentityLinks
)
{
this
.
customUserIdentityLinks
=
customUserIdentityLinks
;
}
public
Map
<
String
,
Set
<
String
>>
getCustomGroupIdentityLinks
()
{
return
customGroupIdentityLinks
;
}
public
void
setCustomGroupIdentityLinks
(
Map
<
String
,
Set
<
String
>>
customGroupIdentityLinks
)
{
this
.
customGroupIdentityLinks
=
customGroupIdentityLinks
;
}
public
UserTask
clone
()
{
UserTask
clone
=
new
UserTask
();
clone
.
setValues
(
this
);
...
...
@@ -110,6 +158,9 @@ public class UserTask extends Task {
setCandidateGroups
(
new
ArrayList
<
String
>(
otherElement
.
getCandidateGroups
()));
setCandidateUsers
(
new
ArrayList
<
String
>(
otherElement
.
getCandidateUsers
()));
setCustomGroupIdentityLinks
(
otherElement
.
customGroupIdentityLinks
);
setCustomUserIdentityLinks
(
otherElement
.
customUserIdentityLinks
);
formProperties
=
new
ArrayList
<
FormProperty
>();
if
(
otherElement
.
getFormProperties
()
!=
null
&&
otherElement
.
getFormProperties
().
size
()
>
0
)
{
for
(
FormProperty
property
:
otherElement
.
getFormProperties
())
{
...
...
modules/activiti-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/handler/UserTaskParseHandler.java
浏览文件 @
9e309777
...
...
@@ -12,17 +12,12 @@
*/
package
org.activiti.engine.impl.bpmn.parser.handler
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
org.activiti.bpmn.constants.BpmnXMLConstants
;
import
org.activiti.bpmn.converter.util.CommaSplitter
;
import
org.activiti.bpmn.model.ActivitiListener
;
import
org.activiti.bpmn.model.BaseElement
;
import
org.activiti.bpmn.model.ExtensionElement
;
import
org.activiti.bpmn.model.ImplementationType
;
import
org.activiti.bpmn.model.UserTask
;
import
org.activiti.engine.delegate.Expression
;
...
...
@@ -43,9 +38,6 @@ import org.apache.commons.lang3.StringUtils;
public
class
UserTaskParseHandler
extends
AbstractActivityBpmnParseHandler
<
UserTask
>
{
public
static
final
String
PROPERTY_TASK_DEFINITION
=
"taskDefinition"
;
private
static
final
String
USER
=
"user"
;
private
static
final
String
GROUP
=
"group"
;
private
static
final
String
COMMA_SPACE
=
", "
;
public
Class
<
?
extends
BaseElement
>
getHandledType
()
{
return
UserTask
.
class
;
...
...
@@ -119,7 +111,23 @@ public class UserTaskParseHandler extends AbstractActivityBpmnParseHandler<UserT
taskDefinition
.
setFormKeyExpression
(
expressionManager
.
createExpression
(
userTask
.
getFormKey
()));
}
parseCustomIdentityLinks
(
bpmnParse
,
userTask
,
taskDefinition
);
// CustomUserIdentityLinks
for
(
String
customUserIdentityLinkType
:
userTask
.
getCustomUserIdentityLinks
().
keySet
())
{
Set
<
Expression
>
userIdentityLinkExpression
=
new
HashSet
<
Expression
>();
for
(
String
userIdentityLink
:
userTask
.
getCustomUserIdentityLinks
().
get
(
customUserIdentityLinkType
))
{
userIdentityLinkExpression
.
add
(
expressionManager
.
createExpression
(
userIdentityLink
));
}
taskDefinition
.
addCustomUserIdentityLinkExpression
(
customUserIdentityLinkType
,
userIdentityLinkExpression
);
}
// CustomGroupIdentityLinks
for
(
String
customGroupIdentityLinkType
:
userTask
.
getCustomGroupIdentityLinks
().
keySet
())
{
Set
<
Expression
>
groupIdentityLinkExpression
=
new
HashSet
<
Expression
>();
for
(
String
groupIdentityLink
:
userTask
.
getCustomGroupIdentityLinks
().
get
(
customGroupIdentityLinkType
))
{
groupIdentityLinkExpression
.
add
(
expressionManager
.
createExpression
(
groupIdentityLink
));
}
taskDefinition
.
addCustomGroupIdentityLinkExpression
(
customGroupIdentityLinkType
,
groupIdentityLinkExpression
);
}
return
taskDefinition
;
}
...
...
@@ -136,138 +144,4 @@ public class UserTaskParseHandler extends AbstractActivityBpmnParseHandler<UserT
}
return
taskListener
;
}
protected
void
parseCustomIdentityLinks
(
BpmnParse
bpmnParse
,
UserTask
userTask
,
TaskDefinition
taskDefinition
)
{
Map
<
String
,
List
<
ExtensionElement
>>
extensionElements
=
userTask
.
getExtensionElements
();
if
(
extensionElements
!=
null
)
{
List
<
ExtensionElement
>
resourceLists
=
extensionElements
.
get
(
BpmnXMLConstants
.
ELEMENT_CUSTOM_RESOURCE
);
if
(
resourceLists
!=
null
)
{
for
(
ExtensionElement
resourceList
:
resourceLists
)
{
String
resourceType
=
resourceList
.
getAttributeValue
(
BpmnXMLConstants
.
ACTIVITI_EXTENSIONS_NAMESPACE
,
BpmnXMLConstants
.
ATTRIBUTE_NAME
);
Map
<
String
,
String
>
resources
=
getResources
(
resourceType
,
userTask
);
if
(
resources
!=
null
)
{
// check for user type resources
Set
<
Expression
>
resourceExpression
=
convertToExpressions
(
false
,
bpmnParse
,
resources
.
get
(
USER
));
if
(
resourceExpression
!=
null
)
{
taskDefinition
.
addCustomUserIdentityLinkExpression
(
resourceType
,
resourceExpression
);
}
// check for group type resources
resourceExpression
=
convertToExpressions
(
true
,
bpmnParse
,
resources
.
get
(
GROUP
));
if
(
resourceExpression
!=
null
)
{
taskDefinition
.
addCustomGroupIdentityLinkExpression
(
resourceType
,
resourceExpression
);
}
}
}
}
}
}
protected
Set
<
Expression
>
convertToExpressions
(
boolean
isGroup
,
BpmnParse
bpmnParse
,
String
resourceExpression
)
{
ExpressionManager
expressionManager
=
bpmnParse
.
getExpressionManager
();
Set
<
Expression
>
resources
=
new
HashSet
<
Expression
>();
List
<
String
>
resourceList
=
CommaSplitter
.
splitCommas
(
resourceExpression
);
if
(
null
!=
resourceList
)
{
for
(
String
resource
:
resourceList
)
{
resources
.
add
(
expressionManager
.
createExpression
(
resource
));
}
}
return
resources
;
}
protected
Map
<
String
,
String
>
getResources
(
String
resourceType
,
UserTask
userTask
)
{
Map
<
String
,
List
<
ExtensionElement
>>
extensions
=
userTask
.
getExtensionElements
();
String
resourceExpression
=
null
;
if
(
extensions
!=
null
)
{
// top level of resource extension - customResource element
List
<
ExtensionElement
>
resourceElements
=
extensions
.
get
(
BpmnXMLConstants
.
ELEMENT_CUSTOM_RESOURCE
);
if
(
resourceElements
!=
null
)
{
for
(
ExtensionElement
resourceElement
:
resourceElements
)
{
// type of custom resource extension (e.g. businessAdministrator attribute)
if
(
resourceType
.
equals
(
resourceElement
.
getAttributeValue
(
BpmnXMLConstants
.
ACTIVITI_EXTENSIONS_NAMESPACE
,
BpmnXMLConstants
.
ATTRIBUTE_NAME
)))
{
if
(
resourceElement
!=
null
)
{
// first child - resourceAssignmentExpression element
resourceElement
=
getChildElement
(
BpmnXMLConstants
.
ELEMENT_RESOURCE_ASSIGNMENT
,
resourceElement
);
if
(
resourceElement
!=
null
)
{
// second child - formalExpression element
resourceElement
=
getChildElement
(
BpmnXMLConstants
.
ELEMENT_FORMAL_EXPRESSION
,
resourceElement
);
if
(
resourceElement
!=
null
)
{
resourceExpression
=
resourceElement
.
getElementText
();
}
}
}
}
}
}
}
return
generateResourceLists
(
resourceExpression
);
}
protected
Map
<
String
,
String
>
generateResourceLists
(
String
resourceExpression
)
{
Map
<
String
,
String
>
resourceLists
=
null
;
if
(
resourceExpression
!=
null
)
{
StringBuilder
userExpression
=
new
StringBuilder
(
50
);
StringBuilder
groupExpression
=
new
StringBuilder
(
50
);
List
<
String
>
assignmentList
=
CommaSplitter
.
splitCommas
(
resourceExpression
);
for
(
String
assignmentValue
:
assignmentList
)
{
assignmentValue
=
StringUtils
.
trimToNull
(
assignmentValue
);
if
(
assignmentValue
==
null
)
{
continue
;
}
if
(
assignmentValue
.
startsWith
(
USER
))
{
List
<
String
>
userList
=
CommaSplitter
.
splitCommas
(
assignmentValue
.
substring
(
USER
.
length
()
+
1
,
assignmentValue
.
length
()
-
1
).
trim
());
for
(
String
user
:
userList
)
{
if
(
StringUtils
.
isNotEmpty
(
userExpression
.
toString
()))
{
userExpression
.
append
(
COMMA_SPACE
);
}
userExpression
.
append
(
user
);
}
}
else
if
(
assignmentValue
.
startsWith
(
GROUP
))
{
List
<
String
>
groupList
=
CommaSplitter
.
splitCommas
(
assignmentValue
.
substring
(
GROUP
.
length
()
+
1
,
assignmentValue
.
length
()
-
1
).
trim
());
for
(
String
group
:
groupList
)
{
if
(
StringUtils
.
isNotEmpty
(
groupExpression
.
toString
()))
{
groupExpression
.
append
(
COMMA_SPACE
);
}
groupExpression
.
append
(
group
);
}
}
else
{
if
(
StringUtils
.
isNotEmpty
(
groupExpression
.
toString
()))
{
groupExpression
.
append
(
COMMA_SPACE
);
}
groupExpression
.
append
(
assignmentValue
);
}
}
resourceLists
=
new
HashMap
<
String
,
String
>();
resourceLists
.
put
(
USER
,
userExpression
.
toString
());
resourceLists
.
put
(
GROUP
,
groupExpression
.
toString
());
}
return
resourceLists
;
}
protected
ExtensionElement
getChildElement
(
String
key
,
ExtensionElement
element
)
{
if
(
element
!=
null
)
{
List
<
ExtensionElement
>
extensionElements
=
element
.
getChildElements
().
get
(
key
);
if
(
extensionElements
!=
null
)
{
return
extensionElements
.
get
(
0
);
}
}
return
null
;
}
}
modules/activiti-json-converter/src/main/java/org/activiti/editor/constants/StencilConstants.java
浏览文件 @
9e309777
...
...
@@ -145,9 +145,15 @@ public interface StencilConstants {
final
String
PROPERTY_USERTASK_ASSIGNMENT
=
"usertaskassignment"
;
final
String
PROPERTY_USERTASK_ASSIGNMENT_TYPE
=
"assignment_type"
;
final
String
PROPERTY_USERTASK_ASSIGNMENT_EXPRESSION
=
"resourceassignmentexpr"
;
final
String
PROPERTY_USERTASK_OWNER
=
"owner"
;
final
String
PROPERTY_USERTASK_ASSIGNEE
=
"assignee"
;
final
String
PROPERTY_USERTASK_CANDIDATE_USERS
=
"candidateUsers"
;
final
String
PROPERTY_USERTASK_CANDIDATE_GROUPS
=
"candidateGroups"
;
final
String
PROPERTY_USERTASK_CUSTOM_IDENTITY_LINKS
=
"customidentitylinks"
;
final
String
PROPERTY_USERTASK_IDENTITY_TYPE
=
"identity_type"
;
final
String
PROPERTY_USERTASK_IDENTITY_LINK_TYPE
=
"identity_link_type"
;
final
String
PROPERTY_USERTASK_IDENTITY_LINK_EXPRESSION
=
"identitylinkexpr"
;
final
String
PROPERTY_SERVICETASK_CLASS
=
"servicetaskclass"
;
final
String
PROPERTY_SERVICETASK_EXPRESSION
=
"servicetaskexpression"
;
...
...
modules/activiti-json-converter/src/main/java/org/activiti/editor/language/json/converter/UserTaskJsonConverter.java
浏览文件 @
9e309777
...
...
@@ -12,8 +12,12 @@
*/
package
org.activiti.editor.language.json.converter
;
import
java.util.ArrayList
;
import
java.util.HashSet
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
org.activiti.bpmn.model.BaseElement
;
import
org.activiti.bpmn.model.FlowElement
;
...
...
@@ -52,14 +56,22 @@ public class UserTaskJsonConverter extends BaseBpmnJsonConverter {
@Override
protected
void
convertElementToJson
(
ObjectNode
propertiesNode
,
FlowElement
flowElement
)
{
UserTask
userTask
=
(
UserTask
)
flowElement
;
String
owner
=
userTask
.
getOwner
();
String
assignee
=
userTask
.
getAssignee
();
String
candidateUsers
=
convertListToCommaSeparatedString
(
userTask
.
getCandidateUsers
());
String
candidateGroups
=
convertListToCommaSeparatedString
(
userTask
.
getCandidateGroups
());
if
(
StringUtils
.
isNotEmpty
(
assignee
)
||
StringUtils
.
isNotEmpty
(
candidateUsers
)
||
StringUtils
.
isNotEmpty
(
candidateGroups
))
{
if
(
StringUtils
.
isNotEmpty
(
owner
)
||
StringUtils
.
isNotEmpty
(
assignee
)
||
StringUtils
.
isNotEmpty
(
candidateUsers
)
||
StringUtils
.
isNotEmpty
(
candidateGroups
))
{
ObjectNode
assignmentNode
=
objectMapper
.
createObjectNode
();
ArrayNode
itemsNode
=
objectMapper
.
createArrayNode
();
if
(
StringUtils
.
isNotEmpty
(
owner
))
{
ObjectNode
assignmentItemNode
=
objectMapper
.
createObjectNode
();
assignmentItemNode
.
put
(
PROPERTY_USERTASK_ASSIGNMENT_TYPE
,
PROPERTY_USERTASK_OWNER
);
assignmentItemNode
.
put
(
PROPERTY_USERTASK_ASSIGNMENT_EXPRESSION
,
owner
);
itemsNode
.
add
(
assignmentItemNode
);
}
if
(
StringUtils
.
isNotEmpty
(
assignee
))
{
ObjectNode
assignmentItemNode
=
objectMapper
.
createObjectNode
();
assignmentItemNode
.
put
(
PROPERTY_USERTASK_ASSIGNMENT_TYPE
,
PROPERTY_USERTASK_ASSIGNEE
);
...
...
@@ -84,8 +96,37 @@ public class UserTaskJsonConverter extends BaseBpmnJsonConverter {
assignmentNode
.
put
(
"totalCount"
,
itemsNode
.
size
());
assignmentNode
.
put
(
EDITOR_PROPERTIES_GENERAL_ITEMS
,
itemsNode
);
propertiesNode
.
put
(
PROPERTY_USERTASK_ASSIGNMENT
,
assignmentNode
);
}
if
(
userTask
.
getCustomUserIdentityLinks
().
size
()
>
0
||
userTask
.
getCustomGroupIdentityLinks
().
size
()
>
0
){
ObjectNode
customIdentityLinksNode
=
objectMapper
.
createObjectNode
();
ArrayNode
itemsNode
=
objectMapper
.
createArrayNode
();
for
(
String
linkType
:
userTask
.
getCustomUserIdentityLinks
().
keySet
()){
ObjectNode
identityItemNode
=
objectMapper
.
createObjectNode
();
identityItemNode
.
put
(
PROPERTY_USERTASK_IDENTITY_TYPE
,
"user"
);
identityItemNode
.
put
(
PROPERTY_USERTASK_IDENTITY_LINK_TYPE
,
linkType
);
String
users
=
convertListToCommaSeparatedString
(
new
ArrayList
<
String
>(
userTask
.
getCustomUserIdentityLinks
().
get
(
linkType
)));
identityItemNode
.
put
(
PROPERTY_USERTASK_IDENTITY_LINK_EXPRESSION
,
users
);
itemsNode
.
add
(
identityItemNode
);
}
for
(
String
linkType
:
userTask
.
getCustomGroupIdentityLinks
().
keySet
()){
ObjectNode
identityItemNode
=
objectMapper
.
createObjectNode
();
identityItemNode
.
put
(
PROPERTY_USERTASK_IDENTITY_TYPE
,
"group"
);
identityItemNode
.
put
(
PROPERTY_USERTASK_IDENTITY_LINK_TYPE
,
linkType
);
String
groups
=
convertListToCommaSeparatedString
(
new
ArrayList
<
String
>(
userTask
.
getCustomGroupIdentityLinks
().
get
(
linkType
)));
identityItemNode
.
put
(
PROPERTY_USERTASK_IDENTITY_LINK_EXPRESSION
,
groups
);
itemsNode
.
add
(
identityItemNode
);
}
customIdentityLinksNode
.
put
(
"totalCount"
,
itemsNode
.
size
());
customIdentityLinksNode
.
put
(
EDITOR_PROPERTIES_GENERAL_ITEMS
,
itemsNode
);
propertiesNode
.
put
(
PROPERTY_USERTASK_CUSTOM_IDENTITY_LINKS
,
customIdentityLinksNode
);
}
if
(
userTask
.
getPriority
()
!=
null
)
{
setPropertyValue
(
PROPERTY_PRIORITY
,
userTask
.
getPriority
().
toString
(),
propertiesNode
);
}
...
...
@@ -117,6 +158,8 @@ public class UserTaskJsonConverter extends BaseBpmnJsonConverter {
String
assignmentType
=
assignmentItemNode
.
get
(
PROPERTY_USERTASK_ASSIGNMENT_TYPE
).
asText
();
if
(
PROPERTY_USERTASK_ASSIGNEE
.
equals
(
assignmentType
))
{
task
.
setAssignee
(
assignmentItemNode
.
get
(
PROPERTY_USERTASK_ASSIGNMENT_EXPRESSION
).
asText
());
}
else
if
(
PROPERTY_USERTASK_OWNER
.
equals
(
assignmentType
))
{
task
.
setOwner
(
assignmentItemNode
.
get
(
PROPERTY_USERTASK_ASSIGNMENT_EXPRESSION
).
asText
());
}
else
if
(
PROPERTY_USERTASK_CANDIDATE_USERS
.
equals
(
assignmentType
))
{
task
.
setCandidateUsers
(
getValueAsList
(
PROPERTY_USERTASK_ASSIGNMENT_EXPRESSION
,
assignmentItemNode
));
}
else
if
(
PROPERTY_USERTASK_CANDIDATE_GROUPS
.
equals
(
assignmentType
))
{
...
...
@@ -126,7 +169,42 @@ public class UserTaskJsonConverter extends BaseBpmnJsonConverter {
}
}
}
JsonNode
customIdentityLinksNode
=
getProperty
(
PROPERTY_USERTASK_CUSTOM_IDENTITY_LINKS
,
elementNode
);
if
(
customIdentityLinksNode
!=
null
)
{
JsonNode
itemsNode
=
customIdentityLinksNode
.
get
(
EDITOR_PROPERTIES_GENERAL_ITEMS
);
if
(
itemsNode
!=
null
)
{
Iterator
<
JsonNode
>
customIdentityLinksIterator
=
itemsNode
.
elements
();
while
(
customIdentityLinksIterator
.
hasNext
())
{
JsonNode
customIdentityLinksItemNode
=
customIdentityLinksIterator
.
next
();
if
(
customIdentityLinksItemNode
.
get
(
PROPERTY_USERTASK_IDENTITY_TYPE
)
!=
null
&&
customIdentityLinksItemNode
.
get
(
PROPERTY_USERTASK_IDENTITY_LINK_TYPE
)
!=
null
&&
customIdentityLinksItemNode
.
get
(
PROPERTY_USERTASK_IDENTITY_LINK_EXPRESSION
)
!=
null
)
{
String
identityType
=
customIdentityLinksItemNode
.
get
(
PROPERTY_USERTASK_IDENTITY_TYPE
).
asText
();
String
identityLinkType
=
customIdentityLinksItemNode
.
get
(
PROPERTY_USERTASK_IDENTITY_LINK_TYPE
).
asText
();
List
<
String
>
identitiesList
=
getValueAsList
(
PROPERTY_USERTASK_IDENTITY_LINK_EXPRESSION
,
customIdentityLinksItemNode
);
if
(
"user"
.
equals
(
identityType
))
{
Set
<
String
>
users
=
task
.
getCustomUserIdentityLinks
().
get
(
identityLinkType
);
if
(
users
==
null
){
users
=
new
HashSet
<
String
>();
task
.
getCustomUserIdentityLinks
().
put
(
identityLinkType
,
users
);
}
users
.
addAll
(
identitiesList
);
}
else
if
(
"group"
.
equals
(
identityType
))
{
Set
<
String
>
groups
=
task
.
getCustomGroupIdentityLinks
().
get
(
identityLinkType
);
if
(
groups
==
null
){
groups
=
new
HashSet
<
String
>();
task
.
getCustomGroupIdentityLinks
().
put
(
identityLinkType
,
groups
);
}
groups
.
addAll
(
identitiesList
);
}
}
}
}
}
convertJsonToFormProperties
(
elementNode
,
task
);
return
task
;
}
}
}
\ No newline at end of file
modules/activiti-json-converter/src/test/java/org/activiti/editor/language/UserTaskConverterTest.java
浏览文件 @
9e309777
...
...
@@ -49,7 +49,9 @@ public class UserTaskConverterTest extends AbstractConverterTest {
assertEquals
(
"testKey"
,
userTask
.
getFormKey
());
assertEquals
(
"40"
,
userTask
.
getPriority
());
assertEquals
(
"2012-11-01"
,
userTask
.
getDueDate
());
assertEquals
(
"defaultCategory"
,
userTask
.
getCategory
());
assertEquals
(
"gonzo"
,
userTask
.
getOwner
());
assertEquals
(
"kermit"
,
userTask
.
getAssignee
());
assertEquals
(
2
,
userTask
.
getCandidateUsers
().
size
());
assertTrue
(
userTask
.
getCandidateUsers
().
contains
(
"kermit"
));
...
...
@@ -58,6 +60,15 @@ public class UserTaskConverterTest extends AbstractConverterTest {
assertTrue
(
userTask
.
getCandidateGroups
().
contains
(
"management"
));
assertTrue
(
userTask
.
getCandidateGroups
().
contains
(
"sales"
));
assertEquals
(
2
,
userTask
.
getCustomUserIdentityLinks
().
size
());
assertEquals
(
1
,
userTask
.
getCustomGroupIdentityLinks
().
size
());
assertTrue
(
userTask
.
getCustomUserIdentityLinks
().
get
(
"bizAdmin"
).
contains
(
"kermit"
));
assertTrue
(
userTask
.
getCustomGroupIdentityLinks
().
get
(
"bizAdmin"
).
contains
(
"management"
));
assertTrue
(
userTask
.
getCustomGroupIdentityLinks
().
get
(
"bizAdmin"
).
contains
(
"sales"
));
assertTrue
(
userTask
.
getCustomUserIdentityLinks
().
get
(
"manager"
).
contains
(
"fozzie"
));
assertTrue
(
userTask
.
getCustomUserIdentityLinks
().
get
(
"manager"
).
contains
(
"gonzo"
));
List
<
FormProperty
>
formProperties
=
userTask
.
getFormProperties
();
assertEquals
(
2
,
formProperties
.
size
());
FormProperty
formProperty
=
formProperties
.
get
(
0
);
...
...
modules/activiti-json-converter/src/test/resources/test.usertaskmodel.json
浏览文件 @
9e309777
...
...
@@ -39,6 +39,7 @@
"duedatedefinition"
:
"2012-11-01"
,
"exclusivedefinition"
:
"No"
,
"formkeydefinition"
:
"testKey"
,
"categoryDefinition"
:
"defaultCategory"
,
"formproperties"
:
{
"items"
:
[
{
"formproperty_expression"
:
"${expression}"
,
"formproperty_id"
:
"formId"
,
"formproperty_name"
:
"formName"
,
...
...
@@ -62,6 +63,9 @@
"usertaskassignment"
:
{
"items"
:
[
{
"assignment_type"
:
"assignee"
,
"resourceassignmentexpr"
:
"kermit"
},
{
"assignment_type"
:
"owner"
,
"resourceassignmentexpr"
:
"gonzo"
},
{
"assignment_type"
:
"candidateUsers"
,
"resourceassignmentexpr"
:
"kermit,fozzie"
},
...
...
@@ -69,6 +73,21 @@
"resourceassignmentexpr"
:
"management,sales"
}
],
"totalCount"
:
4
},
"customidentitylinks"
:
{
"items"
:
[
{
"identity_type"
:
"user"
,
"identity_link_type"
:
"manager"
,
"identitylinkexpr"
:
"fozzie, gonzo"
},
{
"identity_type"
:
"user"
,
"identity_link_type"
:
"bizAdmin"
,
"identitylinkexpr"
:
"kermit"
},
{
"identity_type"
:
"group"
,
"identity_link_type"
:
"bizAdmin"
,
"identitylinkexpr"
:
"management,sales"
}
],
"totalCount"
:
3
}
},
...
...
modules/activiti-webapp-explorer2/src/main/resources/stencilset.json
浏览文件 @
9e309777
...
...
@@ -100,7 +100,15 @@
"value"
:
""
,
"description"
:
"Priority of the user task."
,
"popular"
:
true
}
]
},
{
"id"
:
"categoryDefinition"
,
"type"
:
"String"
,
"title"
:
"Category"
,
"value"
:
""
,
"description"
:
"Category of the user task."
,
"popular"
:
true
}
]
},
{
"name"
:
"usertaskassignment"
,
"properties"
:
[
{
...
...
@@ -136,6 +144,12 @@
"title_de"
:
"PotentialOwner"
,
"value"
:
"candidateGroups"
,
"refToView"
:
""
},
{
"id"
:
"c4"
,
"title"
:
"Owner"
,
"title_de"
:
"Owner"
,
"value"
:
"owner"
,
"refToView"
:
""
}
]
},
{
"id"
:
"resourceassignmentexpr"
,
...
...
@@ -150,6 +164,55 @@
}
]
}
]
},
{
"name"
:
"customidentitylinks"
,
"properties"
:
[
{
"id"
:
"customidentitylinks"
,
"type"
:
"Complex"
,
"title"
:
"Identity Links"
,
"value"
:
""
,
"description"
:
"Custom Assignment definition for the user task"
,
"popular"
:
true
,
"complexItems"
:
[
{
"id"
:
"identity_type"
,
"name"
:
"Identity Type"
,
"type"
:
"Choice"
,
"value"
:
""
,
"width"
:
80
,
"optional"
:
false
,
"items"
:
[
{
"id"
:
"c1"
,
"title"
:
"User"
,
"title_de"
:
"User"
,
"value"
:
"user"
,
"refToView"
:
""
},
{
"id"
:
"c2"
,
"title"
:
"Group"
,
"title_de"
:
"Group"
,
"value"
:
"group"
,
"refToView"
:
""
}]
},
{
"id"
:
"identity_link_type"
,
"name"
:
"Identity Link Type"
,
"type"
:
"String"
,
"description"
:
"This defines the expression used for the resource assignment."
,
"description_de"
:
"Definiert den Ausdruck, der fr die Zordung von Ressourcen genutzt wird."
,
"value"
:
""
,
"width"
:
200
,
"optional"
:
true
},
{
"id"
:
"identitylinkexpr"
,
"name"
:
"Resource assignment expression"
,
"type"
:
"String"
,
"description"
:
"This defines the expression used for the resource assignment."
,
"description_de"
:
"Definiert den Ausdruck, der fr die Zordung von Ressourcen genutzt wird."
,
"value"
:
""
,
"width"
:
200
,
"optional"
:
true
}
]
}
]
},
{
"name"
:
"formdefinition"
,
"properties"
:
[
{
"id"
:
"formproperties"
,
...
...
@@ -1225,7 +1288,7 @@
"view"
:
"activity/usertask.svg"
,
"icon"
:
"activity/list/type.user.png"
,
"groups"
:
[
"Activities"
],
"propertyPackages"
:
[
"elementbase"
,
"baseattributes"
,
"usertaskbase"
,
"usertaskassignment"
,
"formdefinition"
,
"tasklistenersbase"
,
"asynchronousbase"
,
"loopcharacteristics"
,
"activity"
],
"propertyPackages"
:
[
"elementbase"
,
"baseattributes"
,
"usertaskbase"
,
"usertaskassignment"
,
"
customidentitylinks"
,
"
formdefinition"
,
"tasklistenersbase"
,
"asynchronousbase"
,
"loopcharacteristics"
,
"activity"
],
"roles"
:
[
"sequence_start"
,
"Activity"
,
"sequence_end"
,
"ActivitiesMorph"
,
"all"
]
},
{
"type"
:
"node"
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录