Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
开发团队
Flowable Engine
提交
ee2f460c
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,发现更多精彩内容 >>
提交
ee2f460c
编写于
10月 10, 2013
作者:
T
tijsrademakers
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix for extension elements for process, sub process, lanes, pools etc
上级
1a89621e
变更
23
隐藏空白更改
内联
并排
Showing
23 changed file
with
533 addition
and
241 deletion
+533
-241
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/BaseBpmnXMLConverter.java
...ava/org/activiti/bpmn/converter/BaseBpmnXMLConverter.java
+25
-186
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/BpmnXMLConverter.java
...in/java/org/activiti/bpmn/converter/BpmnXMLConverter.java
+8
-14
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/CompensateEventDefinitionParser.java
...bpmn/converter/child/CompensateEventDefinitionParser.java
+2
-0
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/ErrorEventDefinitionParser.java
...viti/bpmn/converter/child/ErrorEventDefinitionParser.java
+2
-0
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/FlowNodeRefParser.java
.../org/activiti/bpmn/converter/child/FlowNodeRefParser.java
+36
-0
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/MessageEventDefinitionParser.java
...ti/bpmn/converter/child/MessageEventDefinitionParser.java
+3
-0
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/SignalEventDefinitionParser.java
...iti/bpmn/converter/child/SignalEventDefinitionParser.java
+2
-0
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/TerminateEventDefinitionParser.java
.../bpmn/converter/child/TerminateEventDefinitionParser.java
+3
-0
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/TimeCycleParser.java
...va/org/activiti/bpmn/converter/child/TimeCycleParser.java
+36
-0
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/TimeDateParser.java
...ava/org/activiti/bpmn/converter/child/TimeDateParser.java
+36
-0
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/TimeDurationParser.java
...org/activiti/bpmn/converter/child/TimeDurationParser.java
+36
-0
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/TimerEventDefinitionParser.java
...viti/bpmn/converter/child/TimerEventDefinitionParser.java
+1
-22
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/export/ProcessExport.java
...ava/org/activiti/bpmn/converter/export/ProcessExport.java
+4
-2
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/parser/ExtensionElementsParser.java
...tiviti/bpmn/converter/parser/ExtensionElementsParser.java
+60
-0
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/parser/ItemDefinitionParser.java
.../activiti/bpmn/converter/parser/ItemDefinitionParser.java
+1
-0
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/parser/LaneParser.java
...n/java/org/activiti/bpmn/converter/parser/LaneParser.java
+3
-10
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/parser/MessageParser.java
...ava/org/activiti/bpmn/converter/parser/MessageParser.java
+1
-0
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/parser/SignalParser.java
...java/org/activiti/bpmn/converter/parser/SignalParser.java
+1
-0
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/util/BpmnXMLUtil.java
...in/java/org/activiti/bpmn/converter/util/BpmnXMLUtil.java
+210
-0
modules/activiti-bpmn-converter/src/test/java/org/activiti/editor/language/xml/CustomExtensionsConverterTest.java
...ti/editor/language/xml/CustomExtensionsConverterTest.java
+27
-4
modules/activiti-bpmn-converter/src/test/java/org/activiti/editor/language/xml/InCompleteSignalConverterTest.java
...ti/editor/language/xml/InCompleteSignalConverterTest.java
+0
-1
modules/activiti-bpmn-converter/src/test/resources/customextensionsmodel.bpmn
...n-converter/src/test/resources/customextensionsmodel.bpmn
+28
-0
modules/activiti-engine/src/test/java/org/activiti/examples/task/StandaloneTaskTest.java
...t/java/org/activiti/examples/task/StandaloneTaskTest.java
+8
-2
未找到文件。
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/BaseBpmnXMLConverter.java
浏览文件 @
ee2f460c
...
...
@@ -21,23 +21,6 @@ import javax.xml.stream.XMLStreamWriter;
import
org.activiti.bpmn.constants.BpmnXMLConstants
;
import
org.activiti.bpmn.converter.child.BaseChildElementParser
;
import
org.activiti.bpmn.converter.child.CancelEventDefinitionParser
;
import
org.activiti.bpmn.converter.child.CompensateEventDefinitionParser
;
import
org.activiti.bpmn.converter.child.ConditionExpressionParser
;
import
org.activiti.bpmn.converter.child.DataInputAssociationParser
;
import
org.activiti.bpmn.converter.child.DataOutputAssociationParser
;
import
org.activiti.bpmn.converter.child.DocumentationParser
;
import
org.activiti.bpmn.converter.child.ErrorEventDefinitionParser
;
import
org.activiti.bpmn.converter.child.ExecutionListenerParser
;
import
org.activiti.bpmn.converter.child.FieldExtensionParser
;
import
org.activiti.bpmn.converter.child.FormPropertyParser
;
import
org.activiti.bpmn.converter.child.IOSpecificationParser
;
import
org.activiti.bpmn.converter.child.MessageEventDefinitionParser
;
import
org.activiti.bpmn.converter.child.MultiInstanceParser
;
import
org.activiti.bpmn.converter.child.SignalEventDefinitionParser
;
import
org.activiti.bpmn.converter.child.TaskListenerParser
;
import
org.activiti.bpmn.converter.child.TerminateEventDefinitionParser
;
import
org.activiti.bpmn.converter.child.TimerEventDefinitionParser
;
import
org.activiti.bpmn.converter.export.ActivitiListenerExport
;
import
org.activiti.bpmn.converter.export.MultiInstanceExport
;
import
org.activiti.bpmn.converter.util.BpmnXMLUtil
;
...
...
@@ -47,8 +30,6 @@ import org.activiti.bpmn.model.BaseElement;
import
org.activiti.bpmn.model.BpmnModel
;
import
org.activiti.bpmn.model.ErrorEventDefinition
;
import
org.activiti.bpmn.model.EventDefinition
;
import
org.activiti.bpmn.model.ExtensionAttribute
;
import
org.activiti.bpmn.model.ExtensionElement
;
import
org.activiti.bpmn.model.FlowElement
;
import
org.activiti.bpmn.model.FormProperty
;
import
org.activiti.bpmn.model.FormValue
;
...
...
@@ -75,34 +56,9 @@ public abstract class BaseBpmnXMLConverter implements BpmnXMLConstants {
protected
BpmnModel
model
;
protected
Process
activeProcess
;
protected
Map
<
String
,
BaseChildElementParser
>
childElementParsers
=
new
HashMap
<
String
,
BaseChildElementParser
>();
private
static
Map
<
String
,
BaseChildElementParser
>
genericChildParserMap
=
new
HashMap
<
String
,
BaseChildElementParser
>();
protected
boolean
didWriteExtensionStartElement
=
false
;
static
{
addGenericParser
(
new
CancelEventDefinitionParser
());
addGenericParser
(
new
CompensateEventDefinitionParser
());
addGenericParser
(
new
ConditionExpressionParser
());
addGenericParser
(
new
DataInputAssociationParser
());
addGenericParser
(
new
DataOutputAssociationParser
());
addGenericParser
(
new
DocumentationParser
());
addGenericParser
(
new
ErrorEventDefinitionParser
());
addGenericParser
(
new
ExecutionListenerParser
());
addGenericParser
(
new
FieldExtensionParser
());
addGenericParser
(
new
FormPropertyParser
());
addGenericParser
(
new
IOSpecificationParser
());
addGenericParser
(
new
MessageEventDefinitionParser
());
addGenericParser
(
new
MultiInstanceParser
());
addGenericParser
(
new
SignalEventDefinitionParser
());
addGenericParser
(
new
TaskListenerParser
());
addGenericParser
(
new
TerminateEventDefinitionParser
());
addGenericParser
(
new
TimerEventDefinitionParser
());
}
private
static
void
addGenericParser
(
BaseChildElementParser
parser
)
{
genericChildParserMap
.
put
(
parser
.
getElementName
(),
parser
);
}
public
void
convertToBpmnModel
(
XMLStreamReader
xtr
,
BpmnModel
model
,
Process
activeProcess
,
List
<
SubProcess
>
activeSubProcessList
)
throws
Exception
{
...
...
@@ -203,19 +159,7 @@ public abstract class BaseBpmnXMLConverter implements BpmnXMLConstants {
writeExtensionChildElements
(
baseElement
,
xtw
);
didWriteExtensionStartElement
=
writeListeners
(
baseElement
,
xtw
);
if
(
baseElement
.
getExtensionElements
().
size
()
>
0
)
{
if
(
didWriteExtensionStartElement
==
false
)
{
xtw
.
writeStartElement
(
ELEMENT_EXTENSIONS
);
didWriteExtensionStartElement
=
true
;
}
Map
<
String
,
String
>
namespaceMap
=
new
HashMap
<
String
,
String
>();
for
(
List
<
ExtensionElement
>
extensionElements
:
baseElement
.
getExtensionElements
().
values
())
{
for
(
ExtensionElement
extensionElement
:
extensionElements
)
{
writeExtensionElement
(
extensionElement
,
namespaceMap
,
xtw
);
}
}
}
didWriteExtensionStartElement
=
BpmnXMLUtil
.
writeExtensionElements
(
baseElement
,
didWriteExtensionStartElement
,
xtw
);
if
(
didWriteExtensionStartElement
)
{
xtw
.
writeEndElement
();
...
...
@@ -245,71 +189,10 @@ public abstract class BaseBpmnXMLConverter implements BpmnXMLConstants {
protected
void
parseChildElements
(
String
elementName
,
BaseElement
parentElement
,
XMLStreamReader
xtr
)
throws
Exception
{
Map
<
String
,
BaseChildElementParser
>
childParsers
=
new
HashMap
<
String
,
BaseChildElementParser
>();
childParsers
.
putAll
(
genericChildParserMap
);
if
(
childElementParsers
!=
null
)
{
childParsers
.
putAll
(
childElementParsers
);
}
boolean
inExtensionElements
=
false
;
boolean
readyWithChildElements
=
false
;
while
(
readyWithChildElements
==
false
&&
xtr
.
hasNext
())
{
xtr
.
next
();
if
(
xtr
.
isStartElement
())
{
if
(
ELEMENT_EXTENSIONS
.
equals
(
xtr
.
getLocalName
()))
{
inExtensionElements
=
true
;
}
else
if
(
childParsers
.
containsKey
(
xtr
.
getLocalName
()))
{
childParsers
.
get
(
xtr
.
getLocalName
()).
parseChildElement
(
xtr
,
parentElement
,
model
);
}
else
if
(
inExtensionElements
)
{
ExtensionElement
extensionElement
=
parseExtensionElement
(
xtr
);
parentElement
.
addExtensionElement
(
extensionElement
);
}
}
else
if
(
xtr
.
isEndElement
())
{
if
(
ELEMENT_EXTENSIONS
.
equals
(
xtr
.
getLocalName
()))
{
inExtensionElements
=
false
;
}
else
if
(
elementName
.
equalsIgnoreCase
(
xtr
.
getLocalName
()))
{
readyWithChildElements
=
true
;
}
}
}
}
protected
ExtensionElement
parseExtensionElement
(
XMLStreamReader
xtr
)
throws
Exception
{
ExtensionElement
extensionElement
=
new
ExtensionElement
();
extensionElement
.
setName
(
xtr
.
getLocalName
());
if
(
StringUtils
.
isNotEmpty
(
xtr
.
getNamespaceURI
()))
{
extensionElement
.
setNamespace
(
xtr
.
getNamespaceURI
());
}
if
(
StringUtils
.
isNotEmpty
(
xtr
.
getPrefix
()))
{
extensionElement
.
setNamespacePrefix
(
xtr
.
getPrefix
());
}
for
(
int
i
=
0
;
i
<
xtr
.
getAttributeCount
();
i
++)
{
ExtensionAttribute
extensionAttribute
=
new
ExtensionAttribute
();
extensionAttribute
.
setName
(
xtr
.
getAttributeLocalName
(
i
));
extensionAttribute
.
setValue
(
xtr
.
getAttributeValue
(
i
));
extensionAttribute
.
setNamespace
(
xtr
.
getAttributeNamespace
(
i
));
if
(
StringUtils
.
isNotEmpty
(
xtr
.
getAttributePrefix
(
i
)))
{
extensionAttribute
.
setNamespacePrefix
(
xtr
.
getAttributePrefix
(
i
));
}
extensionElement
.
addAttribute
(
extensionAttribute
);
}
boolean
readyWithExtensionElement
=
false
;
while
(
readyWithExtensionElement
==
false
&&
xtr
.
hasNext
())
{
xtr
.
next
();
if
(
xtr
.
isCharacters
())
{
if
(
StringUtils
.
isNotEmpty
(
xtr
.
getText
().
trim
()))
{
extensionElement
.
setElementText
(
xtr
.
getText
().
trim
());
}
}
else
if
(
xtr
.
isStartElement
())
{
ExtensionElement
childExtensionElement
=
parseExtensionElement
(
xtr
);
extensionElement
.
addChildElement
(
childExtensionElement
);
}
else
if
(
xtr
.
isEndElement
()
&&
extensionElement
.
getName
().
equalsIgnoreCase
(
xtr
.
getLocalName
()))
{
readyWithExtensionElement
=
true
;
}
}
return
extensionElement
;
BpmnXMLUtil
.
parseChildElements
(
elementName
,
parentElement
,
xtr
,
childParsers
,
model
);
}
protected
boolean
parseAsync
(
XMLStreamReader
xtr
)
{
...
...
@@ -353,69 +236,6 @@ public abstract class BaseBpmnXMLConverter implements BpmnXMLConstants {
// To XML converter convenience methods
protected
void
writeExtensionElement
(
ExtensionElement
extensionElement
,
Map
<
String
,
String
>
namespaceMap
,
XMLStreamWriter
xtw
)
throws
Exception
{
if
(
StringUtils
.
isNotEmpty
(
extensionElement
.
getName
()))
{
Map
<
String
,
String
>
localNamespaceMap
=
new
HashMap
<
String
,
String
>();
if
(
StringUtils
.
isNotEmpty
(
extensionElement
.
getNamespace
()))
{
if
(
StringUtils
.
isNotEmpty
(
extensionElement
.
getNamespacePrefix
()))
{
xtw
.
writeStartElement
(
extensionElement
.
getNamespacePrefix
(),
extensionElement
.
getName
(),
extensionElement
.
getNamespace
());
if
(
namespaceMap
.
containsKey
(
extensionElement
.
getNamespacePrefix
())
==
false
||
namespaceMap
.
get
(
extensionElement
.
getNamespacePrefix
()).
equals
(
extensionElement
.
getNamespace
())
==
false
)
{
xtw
.
writeNamespace
(
extensionElement
.
getNamespacePrefix
(),
extensionElement
.
getNamespace
());
namespaceMap
.
put
(
extensionElement
.
getNamespacePrefix
(),
extensionElement
.
getNamespace
());
localNamespaceMap
.
put
(
extensionElement
.
getNamespacePrefix
(),
extensionElement
.
getNamespace
());
}
}
else
{
xtw
.
writeStartElement
(
extensionElement
.
getNamespace
(),
extensionElement
.
getName
());
}
}
else
{
xtw
.
writeStartElement
(
extensionElement
.
getName
());
}
for
(
List
<
ExtensionAttribute
>
attributes
:
extensionElement
.
getAttributes
().
values
())
{
for
(
ExtensionAttribute
attribute
:
attributes
)
{
if
(
StringUtils
.
isNotEmpty
(
attribute
.
getName
())
&&
attribute
.
getValue
()
!=
null
)
{
if
(
StringUtils
.
isNotEmpty
(
attribute
.
getNamespace
()))
{
if
(
StringUtils
.
isNotEmpty
(
attribute
.
getNamespacePrefix
()))
{
if
(
namespaceMap
.
containsKey
(
attribute
.
getNamespacePrefix
())
==
false
||
namespaceMap
.
get
(
attribute
.
getNamespacePrefix
()).
equals
(
attribute
.
getNamespace
())
==
false
)
{
xtw
.
writeNamespace
(
attribute
.
getNamespacePrefix
(),
attribute
.
getNamespace
());
namespaceMap
.
put
(
attribute
.
getNamespacePrefix
(),
attribute
.
getNamespace
());
}
xtw
.
writeAttribute
(
attribute
.
getNamespacePrefix
(),
attribute
.
getNamespace
(),
attribute
.
getName
(),
attribute
.
getValue
());
}
else
{
xtw
.
writeAttribute
(
attribute
.
getNamespace
(),
attribute
.
getName
(),
attribute
.
getValue
());
}
}
else
{
xtw
.
writeAttribute
(
attribute
.
getName
(),
attribute
.
getValue
());
}
}
}
}
if
(
extensionElement
.
getElementText
()
!=
null
)
{
xtw
.
writeCharacters
(
extensionElement
.
getElementText
());
}
else
{
for
(
List
<
ExtensionElement
>
childElements
:
extensionElement
.
getChildElements
().
values
())
{
for
(
ExtensionElement
childElement
:
childElements
)
{
writeExtensionElement
(
childElement
,
namespaceMap
,
xtw
);
}
}
}
for
(
String
prefix
:
localNamespaceMap
.
keySet
())
{
namespaceMap
.
remove
(
prefix
);
}
xtw
.
writeEndElement
();
}
}
protected
String
convertToDelimitedString
(
List
<
String
>
stringList
)
{
return
BpmnXMLUtil
.
convertToDelimitedString
(
stringList
);
}
...
...
@@ -496,7 +316,10 @@ public abstract class BaseBpmnXMLConverter implements BpmnXMLConstants {
protected
void
writeTimerDefinition
(
TimerEventDefinition
timerDefinition
,
XMLStreamWriter
xtw
)
throws
Exception
{
xtw
.
writeStartElement
(
ELEMENT_EVENT_TIMERDEFINITION
);
boolean
didWriteExtensionStartElement
=
BpmnXMLUtil
.
writeExtensionElements
(
timerDefinition
,
false
,
xtw
);
if
(
didWriteExtensionStartElement
)
{
xtw
.
writeEndElement
();
}
if
(
StringUtils
.
isNotEmpty
(
timerDefinition
.
getTimeDate
()))
{
xtw
.
writeStartElement
(
ATTRIBUTE_TIMER_DATE
);
xtw
.
writeCharacters
(
timerDefinition
.
getTimeDate
());
...
...
@@ -518,7 +341,11 @@ public abstract class BaseBpmnXMLConverter implements BpmnXMLConstants {
protected
void
writeSignalDefinition
(
SignalEventDefinition
signalDefinition
,
XMLStreamWriter
xtw
)
throws
Exception
{
xtw
.
writeStartElement
(
ELEMENT_EVENT_SIGNALDEFINITION
);
writeDefaultAttribute
(
ATTRIBUTE_SIGNAL_REF
,
signalDefinition
.
getSignalRef
(),
xtw
);
writeDefaultAttribute
(
ATTRIBUTE_SIGNAL_REF
,
signalDefinition
.
getSignalRef
(),
xtw
);
boolean
didWriteExtensionStartElement
=
BpmnXMLUtil
.
writeExtensionElements
(
signalDefinition
,
false
,
xtw
);
if
(
didWriteExtensionStartElement
)
{
xtw
.
writeEndElement
();
}
xtw
.
writeEndElement
();
}
...
...
@@ -541,18 +368,30 @@ public abstract class BaseBpmnXMLConverter implements BpmnXMLConstants {
}
}
}
writeDefaultAttribute
(
ATTRIBUTE_MESSAGE_REF
,
messageRef
,
xtw
);
writeDefaultAttribute
(
ATTRIBUTE_MESSAGE_REF
,
messageRef
,
xtw
);
boolean
didWriteExtensionStartElement
=
BpmnXMLUtil
.
writeExtensionElements
(
messageDefinition
,
false
,
xtw
);
if
(
didWriteExtensionStartElement
)
{
xtw
.
writeEndElement
();
}
xtw
.
writeEndElement
();
}
protected
void
writeErrorDefinition
(
ErrorEventDefinition
errorDefinition
,
XMLStreamWriter
xtw
)
throws
Exception
{
xtw
.
writeStartElement
(
ELEMENT_EVENT_ERRORDEFINITION
);
writeDefaultAttribute
(
ATTRIBUTE_ERROR_REF
,
errorDefinition
.
getErrorCode
(),
xtw
);
writeDefaultAttribute
(
ATTRIBUTE_ERROR_REF
,
errorDefinition
.
getErrorCode
(),
xtw
);
boolean
didWriteExtensionStartElement
=
BpmnXMLUtil
.
writeExtensionElements
(
errorDefinition
,
false
,
xtw
);
if
(
didWriteExtensionStartElement
)
{
xtw
.
writeEndElement
();
}
xtw
.
writeEndElement
();
}
protected
void
writeTerminateDefinition
(
TerminateEventDefinition
terminateDefinition
,
XMLStreamWriter
xtw
)
throws
Exception
{
xtw
.
writeStartElement
(
ELEMENT_EVENT_TERMINATEDEFINITION
);
boolean
didWriteExtensionStartElement
=
BpmnXMLUtil
.
writeExtensionElements
(
terminateDefinition
,
false
,
xtw
);
if
(
didWriteExtensionStartElement
)
{
xtw
.
writeEndElement
();
}
xtw
.
writeEndElement
();
}
...
...
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/BpmnXMLConverter.java
浏览文件 @
ee2f460c
...
...
@@ -39,7 +39,6 @@ import org.activiti.bpmn.constants.BpmnXMLConstants;
import
org.activiti.bpmn.converter.alfresco.AlfrescoStartEventXMLConverter
;
import
org.activiti.bpmn.converter.alfresco.AlfrescoUserTaskXMLConverter
;
import
org.activiti.bpmn.converter.child.DocumentationParser
;
import
org.activiti.bpmn.converter.child.ExecutionListenerParser
;
import
org.activiti.bpmn.converter.child.IOSpecificationParser
;
import
org.activiti.bpmn.converter.child.MultiInstanceParser
;
import
org.activiti.bpmn.converter.export.ActivitiListenerExport
;
...
...
@@ -51,6 +50,7 @@ import org.activiti.bpmn.converter.export.ProcessExport;
import
org.activiti.bpmn.converter.export.SignalAndMessageDefinitionExport
;
import
org.activiti.bpmn.converter.parser.BpmnEdgeParser
;
import
org.activiti.bpmn.converter.parser.BpmnShapeParser
;
import
org.activiti.bpmn.converter.parser.ExtensionElementsParser
;
import
org.activiti.bpmn.converter.parser.ImportParser
;
import
org.activiti.bpmn.converter.parser.InterfaceParser
;
import
org.activiti.bpmn.converter.parser.ItemDefinitionParser
;
...
...
@@ -60,6 +60,7 @@ import org.activiti.bpmn.converter.parser.PotentialStarterParser;
import
org.activiti.bpmn.converter.parser.ProcessParser
;
import
org.activiti.bpmn.converter.parser.SignalParser
;
import
org.activiti.bpmn.converter.parser.SubProcessParser
;
import
org.activiti.bpmn.converter.util.BpmnXMLUtil
;
import
org.activiti.bpmn.converter.util.InputStreamProvider
;
import
org.activiti.bpmn.exceptions.XMLException
;
import
org.activiti.bpmn.model.Activity
;
...
...
@@ -313,6 +314,7 @@ public class BpmnXMLConverter implements BpmnXMLConstants {
pool
.
setId
(
xtr
.
getAttributeValue
(
null
,
ATTRIBUTE_ID
));
pool
.
setName
(
xtr
.
getAttributeValue
(
null
,
ATTRIBUTE_NAME
));
pool
.
setProcessRef
(
xtr
.
getAttributeValue
(
null
,
ATTRIBUTE_PROCESS_REF
));
BpmnXMLUtil
.
parseChildElements
(
ELEMENT_PARTICIPANT
,
pool
,
xtr
,
model
);
model
.
getPools
().
add
(
pool
);
}
...
...
@@ -327,7 +329,7 @@ public class BpmnXMLConverter implements BpmnXMLConstants {
new
PotentialStarterParser
().
parse
(
xtr
,
activeProcess
);
}
else
if
(
ELEMENT_LANE
.
equals
(
xtr
.
getLocalName
()))
{
new
LaneParser
().
parse
(
xtr
,
activeProcess
);
new
LaneParser
().
parse
(
xtr
,
activeProcess
,
model
);
}
else
if
(
ELEMENT_DOCUMENTATION
.
equals
(
xtr
.
getLocalName
()))
{
...
...
@@ -339,32 +341,24 @@ public class BpmnXMLConverter implements BpmnXMLConstants {
}
new
DocumentationParser
().
parseChildElement
(
xtr
,
parentElement
,
model
);
}
else
if
(
ELEMENT_EXTENSIONS
.
equals
(
xtr
.
getLocalName
()))
{
new
ExtensionElementsParser
().
parse
(
xtr
,
activeSubProcessList
,
activeProcess
,
model
);
}
else
if
(
ELEMENT_SUBPROCESS
.
equals
(
xtr
.
getLocalName
()))
{
new
SubProcessParser
().
parse
(
xtr
,
activeSubProcessList
,
activeProcess
);
}
else
if
(
ELEMENT_TRANSACTION
.
equals
(
xtr
.
getLocalName
()))
{
new
SubProcessParser
().
parse
(
xtr
,
activeSubProcessList
,
activeProcess
);
}
else
if
(
ELEMENT_DI_SHAPE
.
equals
(
xtr
.
getLocalName
()))
{
new
BpmnShapeParser
().
parse
(
xtr
,
model
);
}
else
if
(
ELEMENT_DI_EDGE
.
equals
(
xtr
.
getLocalName
()))
{
new
BpmnEdgeParser
().
parse
(
xtr
,
model
);
}
else
if
(
activeSubProcessList
.
size
()
==
0
&&
ELEMENT_EXECUTION_LISTENER
.
equals
(
xtr
.
getLocalName
()))
{
new
ExecutionListenerParser
().
parseChildElement
(
xtr
,
activeProcess
,
model
);
}
else
{
if
(
activeSubProcessList
.
size
()
>
0
&&
ELEMENT_EXECUTION_LISTENER
.
equalsIgnoreCase
(
xtr
.
getLocalName
()))
{
new
ExecutionListenerParser
().
parseChildElement
(
xtr
,
activeSubProcessList
.
get
(
activeSubProcessList
.
size
()
-
1
),
model
);
}
else
if
(
activeSubProcessList
.
size
()
>
0
&&
ELEMENT_MULTIINSTANCE
.
equalsIgnoreCase
(
xtr
.
getLocalName
()))
{
if
(
activeSubProcessList
.
size
()
>
0
&&
ELEMENT_MULTIINSTANCE
.
equalsIgnoreCase
(
xtr
.
getLocalName
()))
{
new
MultiInstanceParser
().
parseChildElement
(
xtr
,
activeSubProcessList
.
get
(
activeSubProcessList
.
size
()
-
1
),
model
);
...
...
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/CompensateEventDefinitionParser.java
浏览文件 @
ee2f460c
...
...
@@ -40,6 +40,8 @@ public class CompensateEventDefinitionParser extends BaseChildElementParser {
eventDefinition
.
setWaitForCompletion
(
Boolean
.
parseBoolean
(
xtr
.
getAttributeValue
(
null
,
ATTRIBUTE_COMPENSATE_WAITFORCOMPLETION
)));
}
BpmnXMLUtil
.
parseChildElements
(
ELEMENT_EVENT_COMPENSATEDEFINITION
,
eventDefinition
,
xtr
,
model
);
((
Event
)
parentElement
).
getEventDefinitions
().
add
(
eventDefinition
);
}
}
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/ErrorEventDefinitionParser.java
浏览文件 @
ee2f460c
...
...
@@ -41,6 +41,8 @@ public class ErrorEventDefinitionParser extends BaseChildElementParser {
model
.
addProblem
(
"errorRef is required for an error event"
,
xtr
);
}
BpmnXMLUtil
.
parseChildElements
(
ELEMENT_EVENT_ERRORDEFINITION
,
eventDefinition
,
xtr
,
model
);
((
Event
)
parentElement
).
getEventDefinitions
().
add
(
eventDefinition
);
}
}
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/FlowNodeRefParser.java
0 → 100644
浏览文件 @
ee2f460c
/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.activiti.bpmn.converter.child
;
import
javax.xml.stream.XMLStreamReader
;
import
org.activiti.bpmn.model.BaseElement
;
import
org.activiti.bpmn.model.BpmnModel
;
import
org.activiti.bpmn.model.Lane
;
/**
* @author Tijs Rademakers
*/
public
class
FlowNodeRefParser
extends
BaseChildElementParser
{
public
String
getElementName
()
{
return
ATTRIBUTE_FLOWNODE_REF
;
}
public
void
parseChildElement
(
XMLStreamReader
xtr
,
BaseElement
parentElement
,
BpmnModel
model
)
throws
Exception
{
if
(
parentElement
instanceof
Lane
==
false
)
return
;
Lane
lane
=
(
Lane
)
parentElement
;
lane
.
getFlowReferences
().
add
(
xtr
.
getElementText
());
}
}
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/MessageEventDefinitionParser.java
浏览文件 @
ee2f460c
...
...
@@ -54,6 +54,9 @@ public class MessageEventDefinitionParser extends BaseChildElementParser {
model
.
addProblem
(
"Invalid 'messageRef': no message with id '"
+
eventDefinition
.
getMessageRef
()
+
"' found."
,
xtr
);
}
}
BpmnXMLUtil
.
parseChildElements
(
ELEMENT_EVENT_MESSAGEDEFINITION
,
eventDefinition
,
xtr
,
model
);
((
Event
)
parentElement
).
getEventDefinitions
().
add
(
eventDefinition
);
}
}
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/SignalEventDefinitionParser.java
浏览文件 @
ee2f460c
...
...
@@ -44,6 +44,8 @@ public class SignalEventDefinitionParser extends BaseChildElementParser {
model
.
addProblem
(
"signalEventDefinition does not have required property 'signalRef'"
,
xtr
);
}
BpmnXMLUtil
.
parseChildElements
(
ELEMENT_EVENT_SIGNALDEFINITION
,
eventDefinition
,
xtr
,
model
);
((
Event
)
parentElement
).
getEventDefinitions
().
add
(
eventDefinition
);
}
}
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/TerminateEventDefinitionParser.java
浏览文件 @
ee2f460c
...
...
@@ -35,6 +35,9 @@ public class TerminateEventDefinitionParser extends BaseChildElementParser {
TerminateEventDefinition
eventDefinition
=
new
TerminateEventDefinition
();
BpmnXMLUtil
.
addXMLLocation
(
eventDefinition
,
xtr
);
BpmnXMLUtil
.
parseChildElements
(
ELEMENT_EVENT_TERMINATEDEFINITION
,
eventDefinition
,
xtr
,
model
);
((
Event
)
parentElement
).
getEventDefinitions
().
add
(
eventDefinition
);
}
}
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/TimeCycleParser.java
0 → 100644
浏览文件 @
ee2f460c
/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.activiti.bpmn.converter.child
;
import
javax.xml.stream.XMLStreamReader
;
import
org.activiti.bpmn.model.BaseElement
;
import
org.activiti.bpmn.model.BpmnModel
;
import
org.activiti.bpmn.model.TimerEventDefinition
;
/**
* @author Tijs Rademakers
*/
public
class
TimeCycleParser
extends
BaseChildElementParser
{
public
String
getElementName
()
{
return
ATTRIBUTE_TIMER_CYCLE
;
}
public
void
parseChildElement
(
XMLStreamReader
xtr
,
BaseElement
parentElement
,
BpmnModel
model
)
throws
Exception
{
if
(
parentElement
instanceof
TimerEventDefinition
==
false
)
return
;
TimerEventDefinition
eventDefinition
=
(
TimerEventDefinition
)
parentElement
;
eventDefinition
.
setTimeCycle
(
xtr
.
getElementText
());
}
}
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/TimeDateParser.java
0 → 100644
浏览文件 @
ee2f460c
/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.activiti.bpmn.converter.child
;
import
javax.xml.stream.XMLStreamReader
;
import
org.activiti.bpmn.model.BaseElement
;
import
org.activiti.bpmn.model.BpmnModel
;
import
org.activiti.bpmn.model.TimerEventDefinition
;
/**
* @author Tijs Rademakers
*/
public
class
TimeDateParser
extends
BaseChildElementParser
{
public
String
getElementName
()
{
return
ATTRIBUTE_TIMER_DATE
;
}
public
void
parseChildElement
(
XMLStreamReader
xtr
,
BaseElement
parentElement
,
BpmnModel
model
)
throws
Exception
{
if
(
parentElement
instanceof
TimerEventDefinition
==
false
)
return
;
TimerEventDefinition
eventDefinition
=
(
TimerEventDefinition
)
parentElement
;
eventDefinition
.
setTimeDate
(
xtr
.
getElementText
());
}
}
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/TimeDurationParser.java
0 → 100644
浏览文件 @
ee2f460c
/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.activiti.bpmn.converter.child
;
import
javax.xml.stream.XMLStreamReader
;
import
org.activiti.bpmn.model.BaseElement
;
import
org.activiti.bpmn.model.BpmnModel
;
import
org.activiti.bpmn.model.TimerEventDefinition
;
/**
* @author Tijs Rademakers
*/
public
class
TimeDurationParser
extends
BaseChildElementParser
{
public
String
getElementName
()
{
return
ATTRIBUTE_TIMER_DURATION
;
}
public
void
parseChildElement
(
XMLStreamReader
xtr
,
BaseElement
parentElement
,
BpmnModel
model
)
throws
Exception
{
if
(
parentElement
instanceof
TimerEventDefinition
==
false
)
return
;
TimerEventDefinition
eventDefinition
=
(
TimerEventDefinition
)
parentElement
;
eventDefinition
.
setTimeDuration
(
xtr
.
getElementText
());
}
}
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/child/TimerEventDefinitionParser.java
浏览文件 @
ee2f460c
...
...
@@ -34,28 +34,7 @@ public class TimerEventDefinitionParser extends BaseChildElementParser {
TimerEventDefinition
eventDefinition
=
new
TimerEventDefinition
();
BpmnXMLUtil
.
addXMLLocation
(
eventDefinition
,
xtr
);
try
{
while
(
xtr
.
hasNext
())
{
xtr
.
next
();
if
(
xtr
.
isStartElement
()
&&
ATTRIBUTE_TIMER_DURATION
.
equalsIgnoreCase
(
xtr
.
getLocalName
()))
{
eventDefinition
.
setTimeDuration
(
xtr
.
getElementText
());
break
;
}
else
if
(
xtr
.
isStartElement
()
&&
ATTRIBUTE_TIMER_DATE
.
equalsIgnoreCase
(
xtr
.
getLocalName
()))
{
eventDefinition
.
setTimeDate
(
xtr
.
getElementText
());
break
;
}
else
if
(
xtr
.
isStartElement
()
&&
ATTRIBUTE_TIMER_CYCLE
.
equalsIgnoreCase
(
xtr
.
getLocalName
()))
{
eventDefinition
.
setTimeCycle
(
xtr
.
getElementText
());
break
;
}
else
if
(
xtr
.
isEndElement
()
&&
ELEMENT_EVENT_TIMERDEFINITION
.
equalsIgnoreCase
(
xtr
.
getLocalName
()))
{
break
;
}
}
}
catch
(
Exception
e
)
{
LOGGER
.
warn
(
"Error parsing timer event definition"
,
e
);
}
BpmnXMLUtil
.
parseChildElements
(
ELEMENT_EVENT_TIMERDEFINITION
,
eventDefinition
,
xtr
,
model
);
((
Event
)
parentElement
).
getEventDefinitions
().
add
(
eventDefinition
);
}
...
...
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/export/ProcessExport.java
浏览文件 @
ee2f460c
...
...
@@ -49,8 +49,10 @@ public class ProcessExport implements BpmnXMLConstants {
xtw
.
writeEndElement
();
}
boolean
wroteListener
=
ActivitiListenerExport
.
writeListeners
(
process
,
false
,
xtw
);
if
(
wroteListener
)
{
boolean
didWriteExtensionStartElement
=
ActivitiListenerExport
.
writeListeners
(
process
,
false
,
xtw
);
didWriteExtensionStartElement
=
BpmnXMLUtil
.
writeExtensionElements
(
process
,
didWriteExtensionStartElement
,
xtw
);
if
(
didWriteExtensionStartElement
)
{
// closing extensions element
xtw
.
writeEndElement
();
}
...
...
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/parser/ExtensionElementsParser.java
0 → 100644
浏览文件 @
ee2f460c
/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.activiti.bpmn.converter.parser
;
import
java.util.List
;
import
javax.xml.stream.XMLStreamReader
;
import
org.activiti.bpmn.constants.BpmnXMLConstants
;
import
org.activiti.bpmn.converter.child.ExecutionListenerParser
;
import
org.activiti.bpmn.converter.util.BpmnXMLUtil
;
import
org.activiti.bpmn.model.BaseElement
;
import
org.activiti.bpmn.model.BpmnModel
;
import
org.activiti.bpmn.model.ExtensionElement
;
import
org.activiti.bpmn.model.Process
;
import
org.activiti.bpmn.model.SubProcess
;
/**
* @author Tijs Rademakers
*/
public
class
ExtensionElementsParser
implements
BpmnXMLConstants
{
public
void
parse
(
XMLStreamReader
xtr
,
List
<
SubProcess
>
activeSubProcessList
,
Process
activeProcess
,
BpmnModel
model
)
throws
Exception
{
BaseElement
parentElement
=
null
;
if
(
activeSubProcessList
.
size
()
>
0
)
{
parentElement
=
activeSubProcessList
.
get
(
activeSubProcessList
.
size
()
-
1
);
}
else
{
parentElement
=
activeProcess
;
}
boolean
readyWithChildElements
=
false
;
while
(
readyWithChildElements
==
false
&&
xtr
.
hasNext
())
{
xtr
.
next
();
if
(
xtr
.
isStartElement
())
{
if
(
ELEMENT_EXECUTION_LISTENER
.
equals
(
xtr
.
getLocalName
()))
{
new
ExecutionListenerParser
().
parseChildElement
(
xtr
,
activeProcess
,
model
);
}
else
{
ExtensionElement
extensionElement
=
BpmnXMLUtil
.
parseExtensionElement
(
xtr
);
parentElement
.
addExtensionElement
(
extensionElement
);
}
}
else
if
(
xtr
.
isEndElement
())
{
if
(
ELEMENT_EXTENSIONS
.
equals
(
xtr
.
getLocalName
()))
{
readyWithChildElements
=
true
;
}
}
}
}
}
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/parser/ItemDefinitionParser.java
浏览文件 @
ee2f460c
...
...
@@ -45,6 +45,7 @@ public class ItemDefinitionParser implements BpmnXMLConstants {
item
.
setStructureRef
(
structureRef
);
item
.
setItemKind
(
xtr
.
getAttributeValue
(
null
,
ATTRIBUTE_ITEM_KIND
));
BpmnXMLUtil
.
parseChildElements
(
ELEMENT_ITEM_DEFINITION
,
item
,
xtr
,
model
);
model
.
addItemDefinition
(
itemDefinitionId
,
item
);
}
}
...
...
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/parser/LaneParser.java
浏览文件 @
ee2f460c
...
...
@@ -16,6 +16,7 @@ import javax.xml.stream.XMLStreamReader;
import
org.activiti.bpmn.constants.BpmnXMLConstants
;
import
org.activiti.bpmn.converter.util.BpmnXMLUtil
;
import
org.activiti.bpmn.model.BpmnModel
;
import
org.activiti.bpmn.model.Lane
;
import
org.activiti.bpmn.model.Process
;
...
...
@@ -24,21 +25,13 @@ import org.activiti.bpmn.model.Process;
*/
public
class
LaneParser
implements
BpmnXMLConstants
{
public
void
parse
(
XMLStreamReader
xtr
,
Process
activeProcess
)
throws
Exception
{
public
void
parse
(
XMLStreamReader
xtr
,
Process
activeProcess
,
BpmnModel
model
)
throws
Exception
{
Lane
lane
=
new
Lane
();
BpmnXMLUtil
.
addXMLLocation
(
lane
,
xtr
);
lane
.
setId
(
xtr
.
getAttributeValue
(
null
,
ATTRIBUTE_ID
));
lane
.
setName
(
xtr
.
getAttributeValue
(
null
,
ATTRIBUTE_NAME
));
lane
.
setParentProcess
(
activeProcess
);
activeProcess
.
getLanes
().
add
(
lane
);
while
(
xtr
.
hasNext
())
{
xtr
.
next
();
if
(
xtr
.
isStartElement
()
&&
ATTRIBUTE_FLOWNODE_REF
.
equalsIgnoreCase
(
xtr
.
getLocalName
()))
{
lane
.
getFlowReferences
().
add
(
xtr
.
getElementText
());
}
else
if
(
xtr
.
isEndElement
()
&&
ELEMENT_LANE
.
equalsIgnoreCase
(
xtr
.
getLocalName
()))
{
break
;
}
}
BpmnXMLUtil
.
parseChildElements
(
ELEMENT_LANE
,
lane
,
xtr
,
model
);
}
}
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/parser/MessageParser.java
浏览文件 @
ee2f460c
...
...
@@ -32,6 +32,7 @@ public class MessageParser implements BpmnXMLConstants {
String
itemRef
=
parseItemRef
(
xtr
.
getAttributeValue
(
null
,
ATTRIBUTE_ITEM_REF
),
model
);
Message
message
=
new
Message
(
messageId
,
messageName
,
itemRef
);
BpmnXMLUtil
.
addXMLLocation
(
message
,
xtr
);
BpmnXMLUtil
.
parseChildElements
(
ELEMENT_MESSAGE
,
message
,
xtr
,
model
);
model
.
addMessage
(
message
);
}
}
...
...
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/parser/SignalParser.java
浏览文件 @
ee2f460c
...
...
@@ -52,6 +52,7 @@ public class SignalParser implements BpmnXMLConstants {
}
BpmnXMLUtil
.
addXMLLocation
(
signal
,
xtr
);
BpmnXMLUtil
.
parseChildElements
(
ELEMENT_SIGNAL
,
signal
,
xtr
,
model
);
model
.
addSignal
(
signal
);
}
}
...
...
modules/activiti-bpmn-converter/src/main/java/org/activiti/bpmn/converter/util/BpmnXMLUtil.java
浏览文件 @
ee2f460c
...
...
@@ -2,18 +2,75 @@ package org.activiti.bpmn.converter.util;
import
java.text.StringCharacterIterator
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
javax.xml.stream.Location
;
import
javax.xml.stream.XMLStreamReader
;
import
javax.xml.stream.XMLStreamWriter
;
import
org.activiti.bpmn.constants.BpmnXMLConstants
;
import
org.activiti.bpmn.converter.child.BaseChildElementParser
;
import
org.activiti.bpmn.converter.child.CancelEventDefinitionParser
;
import
org.activiti.bpmn.converter.child.CompensateEventDefinitionParser
;
import
org.activiti.bpmn.converter.child.ConditionExpressionParser
;
import
org.activiti.bpmn.converter.child.DataInputAssociationParser
;
import
org.activiti.bpmn.converter.child.DataOutputAssociationParser
;
import
org.activiti.bpmn.converter.child.DocumentationParser
;
import
org.activiti.bpmn.converter.child.ErrorEventDefinitionParser
;
import
org.activiti.bpmn.converter.child.ExecutionListenerParser
;
import
org.activiti.bpmn.converter.child.FieldExtensionParser
;
import
org.activiti.bpmn.converter.child.FlowNodeRefParser
;
import
org.activiti.bpmn.converter.child.FormPropertyParser
;
import
org.activiti.bpmn.converter.child.IOSpecificationParser
;
import
org.activiti.bpmn.converter.child.MessageEventDefinitionParser
;
import
org.activiti.bpmn.converter.child.MultiInstanceParser
;
import
org.activiti.bpmn.converter.child.SignalEventDefinitionParser
;
import
org.activiti.bpmn.converter.child.TaskListenerParser
;
import
org.activiti.bpmn.converter.child.TerminateEventDefinitionParser
;
import
org.activiti.bpmn.converter.child.TimeCycleParser
;
import
org.activiti.bpmn.converter.child.TimeDateParser
;
import
org.activiti.bpmn.converter.child.TimeDurationParser
;
import
org.activiti.bpmn.converter.child.TimerEventDefinitionParser
;
import
org.activiti.bpmn.model.BaseElement
;
import
org.activiti.bpmn.model.BpmnModel
;
import
org.activiti.bpmn.model.ExtensionAttribute
;
import
org.activiti.bpmn.model.ExtensionElement
;
import
org.activiti.bpmn.model.GraphicInfo
;
import
org.apache.commons.lang3.StringUtils
;
public
class
BpmnXMLUtil
implements
BpmnXMLConstants
{
private
static
Map
<
String
,
BaseChildElementParser
>
genericChildParserMap
=
new
HashMap
<
String
,
BaseChildElementParser
>();
static
{
addGenericParser
(
new
CancelEventDefinitionParser
());
addGenericParser
(
new
CompensateEventDefinitionParser
());
addGenericParser
(
new
ConditionExpressionParser
());
addGenericParser
(
new
DataInputAssociationParser
());
addGenericParser
(
new
DataOutputAssociationParser
());
addGenericParser
(
new
DocumentationParser
());
addGenericParser
(
new
ErrorEventDefinitionParser
());
addGenericParser
(
new
ExecutionListenerParser
());
addGenericParser
(
new
FieldExtensionParser
());
addGenericParser
(
new
FormPropertyParser
());
addGenericParser
(
new
IOSpecificationParser
());
addGenericParser
(
new
MessageEventDefinitionParser
());
addGenericParser
(
new
MultiInstanceParser
());
addGenericParser
(
new
SignalEventDefinitionParser
());
addGenericParser
(
new
TaskListenerParser
());
addGenericParser
(
new
TerminateEventDefinitionParser
());
addGenericParser
(
new
TimerEventDefinitionParser
());
addGenericParser
(
new
TimeDateParser
());
addGenericParser
(
new
TimeCycleParser
());
addGenericParser
(
new
TimeDurationParser
());
addGenericParser
(
new
FlowNodeRefParser
());
}
private
static
void
addGenericParser
(
BaseChildElementParser
parser
)
{
genericChildParserMap
.
put
(
parser
.
getElementName
(),
parser
);
}
public
static
void
addXMLLocation
(
BaseElement
element
,
XMLStreamReader
xtr
)
{
Location
location
=
xtr
.
getLocation
();
...
...
@@ -27,6 +84,80 @@ public class BpmnXMLUtil implements BpmnXMLConstants {
graphicInfo
.
setXmlColumnNumber
(
location
.
getColumnNumber
());
}
public
static
void
parseChildElements
(
String
elementName
,
BaseElement
parentElement
,
XMLStreamReader
xtr
,
BpmnModel
model
)
throws
Exception
{
parseChildElements
(
elementName
,
parentElement
,
xtr
,
null
,
model
);
}
public
static
void
parseChildElements
(
String
elementName
,
BaseElement
parentElement
,
XMLStreamReader
xtr
,
Map
<
String
,
BaseChildElementParser
>
childParsers
,
BpmnModel
model
)
throws
Exception
{
if
(
childParsers
==
null
)
{
childParsers
=
new
HashMap
<
String
,
BaseChildElementParser
>();
}
childParsers
.
putAll
(
genericChildParserMap
);
boolean
inExtensionElements
=
false
;
boolean
readyWithChildElements
=
false
;
while
(
readyWithChildElements
==
false
&&
xtr
.
hasNext
())
{
xtr
.
next
();
if
(
xtr
.
isStartElement
())
{
if
(
ELEMENT_EXTENSIONS
.
equals
(
xtr
.
getLocalName
()))
{
inExtensionElements
=
true
;
}
else
if
(
childParsers
.
containsKey
(
xtr
.
getLocalName
()))
{
childParsers
.
get
(
xtr
.
getLocalName
()).
parseChildElement
(
xtr
,
parentElement
,
model
);
}
else
if
(
inExtensionElements
)
{
ExtensionElement
extensionElement
=
BpmnXMLUtil
.
parseExtensionElement
(
xtr
);
parentElement
.
addExtensionElement
(
extensionElement
);
}
}
else
if
(
xtr
.
isEndElement
())
{
if
(
ELEMENT_EXTENSIONS
.
equals
(
xtr
.
getLocalName
()))
{
inExtensionElements
=
false
;
}
else
if
(
elementName
.
equalsIgnoreCase
(
xtr
.
getLocalName
()))
{
readyWithChildElements
=
true
;
}
}
}
}
public
static
ExtensionElement
parseExtensionElement
(
XMLStreamReader
xtr
)
throws
Exception
{
ExtensionElement
extensionElement
=
new
ExtensionElement
();
extensionElement
.
setName
(
xtr
.
getLocalName
());
if
(
StringUtils
.
isNotEmpty
(
xtr
.
getNamespaceURI
()))
{
extensionElement
.
setNamespace
(
xtr
.
getNamespaceURI
());
}
if
(
StringUtils
.
isNotEmpty
(
xtr
.
getPrefix
()))
{
extensionElement
.
setNamespacePrefix
(
xtr
.
getPrefix
());
}
for
(
int
i
=
0
;
i
<
xtr
.
getAttributeCount
();
i
++)
{
ExtensionAttribute
extensionAttribute
=
new
ExtensionAttribute
();
extensionAttribute
.
setName
(
xtr
.
getAttributeLocalName
(
i
));
extensionAttribute
.
setValue
(
xtr
.
getAttributeValue
(
i
));
extensionAttribute
.
setNamespace
(
xtr
.
getAttributeNamespace
(
i
));
if
(
StringUtils
.
isNotEmpty
(
xtr
.
getAttributePrefix
(
i
)))
{
extensionAttribute
.
setNamespacePrefix
(
xtr
.
getAttributePrefix
(
i
));
}
extensionElement
.
addAttribute
(
extensionAttribute
);
}
boolean
readyWithExtensionElement
=
false
;
while
(
readyWithExtensionElement
==
false
&&
xtr
.
hasNext
())
{
xtr
.
next
();
if
(
xtr
.
isCharacters
())
{
if
(
StringUtils
.
isNotEmpty
(
xtr
.
getText
().
trim
()))
{
extensionElement
.
setElementText
(
xtr
.
getText
().
trim
());
}
}
else
if
(
xtr
.
isStartElement
())
{
ExtensionElement
childExtensionElement
=
parseExtensionElement
(
xtr
);
extensionElement
.
addChildElement
(
childExtensionElement
);
}
else
if
(
xtr
.
isEndElement
()
&&
extensionElement
.
getName
().
equalsIgnoreCase
(
xtr
.
getLocalName
()))
{
readyWithExtensionElement
=
true
;
}
}
return
extensionElement
;
}
public
static
void
writeDefaultAttribute
(
String
attributeName
,
String
value
,
XMLStreamWriter
xtw
)
throws
Exception
{
if
(
StringUtils
.
isNotEmpty
(
value
)
&&
"null"
.
equalsIgnoreCase
(
value
)
==
false
)
{
xtw
.
writeAttribute
(
attributeName
,
value
);
...
...
@@ -39,6 +170,85 @@ public class BpmnXMLUtil implements BpmnXMLConstants {
}
}
public
static
boolean
writeExtensionElements
(
BaseElement
baseElement
,
boolean
didWriteExtensionStartElement
,
XMLStreamWriter
xtw
)
throws
Exception
{
if
(
baseElement
.
getExtensionElements
().
size
()
>
0
)
{
if
(
didWriteExtensionStartElement
==
false
)
{
xtw
.
writeStartElement
(
ELEMENT_EXTENSIONS
);
didWriteExtensionStartElement
=
true
;
}
Map
<
String
,
String
>
namespaceMap
=
new
HashMap
<
String
,
String
>();
for
(
List
<
ExtensionElement
>
extensionElements
:
baseElement
.
getExtensionElements
().
values
())
{
for
(
ExtensionElement
extensionElement
:
extensionElements
)
{
writeExtensionElement
(
extensionElement
,
namespaceMap
,
xtw
);
}
}
}
return
didWriteExtensionStartElement
;
}
protected
static
void
writeExtensionElement
(
ExtensionElement
extensionElement
,
Map
<
String
,
String
>
namespaceMap
,
XMLStreamWriter
xtw
)
throws
Exception
{
if
(
StringUtils
.
isNotEmpty
(
extensionElement
.
getName
()))
{
Map
<
String
,
String
>
localNamespaceMap
=
new
HashMap
<
String
,
String
>();
if
(
StringUtils
.
isNotEmpty
(
extensionElement
.
getNamespace
()))
{
if
(
StringUtils
.
isNotEmpty
(
extensionElement
.
getNamespacePrefix
()))
{
xtw
.
writeStartElement
(
extensionElement
.
getNamespacePrefix
(),
extensionElement
.
getName
(),
extensionElement
.
getNamespace
());
if
(
namespaceMap
.
containsKey
(
extensionElement
.
getNamespacePrefix
())
==
false
||
namespaceMap
.
get
(
extensionElement
.
getNamespacePrefix
()).
equals
(
extensionElement
.
getNamespace
())
==
false
)
{
xtw
.
writeNamespace
(
extensionElement
.
getNamespacePrefix
(),
extensionElement
.
getNamespace
());
namespaceMap
.
put
(
extensionElement
.
getNamespacePrefix
(),
extensionElement
.
getNamespace
());
localNamespaceMap
.
put
(
extensionElement
.
getNamespacePrefix
(),
extensionElement
.
getNamespace
());
}
}
else
{
xtw
.
writeStartElement
(
extensionElement
.
getNamespace
(),
extensionElement
.
getName
());
}
}
else
{
xtw
.
writeStartElement
(
extensionElement
.
getName
());
}
for
(
List
<
ExtensionAttribute
>
attributes
:
extensionElement
.
getAttributes
().
values
())
{
for
(
ExtensionAttribute
attribute
:
attributes
)
{
if
(
StringUtils
.
isNotEmpty
(
attribute
.
getName
())
&&
attribute
.
getValue
()
!=
null
)
{
if
(
StringUtils
.
isNotEmpty
(
attribute
.
getNamespace
()))
{
if
(
StringUtils
.
isNotEmpty
(
attribute
.
getNamespacePrefix
()))
{
if
(
namespaceMap
.
containsKey
(
attribute
.
getNamespacePrefix
())
==
false
||
namespaceMap
.
get
(
attribute
.
getNamespacePrefix
()).
equals
(
attribute
.
getNamespace
())
==
false
)
{
xtw
.
writeNamespace
(
attribute
.
getNamespacePrefix
(),
attribute
.
getNamespace
());
namespaceMap
.
put
(
attribute
.
getNamespacePrefix
(),
attribute
.
getNamespace
());
}
xtw
.
writeAttribute
(
attribute
.
getNamespacePrefix
(),
attribute
.
getNamespace
(),
attribute
.
getName
(),
attribute
.
getValue
());
}
else
{
xtw
.
writeAttribute
(
attribute
.
getNamespace
(),
attribute
.
getName
(),
attribute
.
getValue
());
}
}
else
{
xtw
.
writeAttribute
(
attribute
.
getName
(),
attribute
.
getValue
());
}
}
}
}
if
(
extensionElement
.
getElementText
()
!=
null
)
{
xtw
.
writeCharacters
(
extensionElement
.
getElementText
());
}
else
{
for
(
List
<
ExtensionElement
>
childElements
:
extensionElement
.
getChildElements
().
values
())
{
for
(
ExtensionElement
childElement
:
childElements
)
{
writeExtensionElement
(
childElement
,
namespaceMap
,
xtw
);
}
}
}
for
(
String
prefix
:
localNamespaceMap
.
keySet
())
{
namespaceMap
.
remove
(
prefix
);
}
xtw
.
writeEndElement
();
}
}
public
static
List
<
String
>
parseDelimitedList
(
String
s
)
{
List
<
String
>
result
=
new
ArrayList
<
String
>();
if
(
StringUtils
.
isNotEmpty
(
s
))
{
...
...
modules/activiti-bpmn-converter/src/test/java/org/activiti/editor/language/xml/CustomExtensionsConverterTest.java
浏览文件 @
ee2f460c
...
...
@@ -9,6 +9,7 @@ import java.util.List;
import
java.util.Map
;
import
org.activiti.bpmn.model.ActivitiListener
;
import
org.activiti.bpmn.model.BoundaryEvent
;
import
org.activiti.bpmn.model.BpmnModel
;
import
org.activiti.bpmn.model.ExtensionAttribute
;
import
org.activiti.bpmn.model.ExtensionElement
;
...
...
@@ -16,12 +17,13 @@ import org.activiti.bpmn.model.FieldExtension;
import
org.activiti.bpmn.model.FlowElement
;
import
org.activiti.bpmn.model.ImplementationType
;
import
org.activiti.bpmn.model.ServiceTask
;
import
org.activiti.bpmn.model.TimerEventDefinition
;
import
org.junit.Test
;
public
class
CustomExtensionsConverterTest
extends
AbstractConverterTest
{
@Test
public
void
con
n
vertXMLToModel
()
throws
Exception
{
public
void
convertXMLToModel
()
throws
Exception
{
BpmnModel
bpmnModel
=
readXMLFile
();
validateModel
(
bpmnModel
);
}
...
...
@@ -39,6 +41,11 @@ public class CustomExtensionsConverterTest extends AbstractConverterTest {
}
private
void
validateModel
(
BpmnModel
model
)
{
List
<
ActivitiListener
>
listeners
=
model
.
getMainProcess
().
getExecutionListeners
();
validateExecutionListeners
(
listeners
);
Map
<
String
,
List
<
ExtensionElement
>>
extensionElementMap
=
model
.
getMainProcess
().
getExtensionElements
();
validateExtensionElements
(
extensionElementMap
);
FlowElement
flowElement
=
model
.
getMainProcess
().
getFlowElement
(
"servicetask"
);
assertNotNull
(
flowElement
);
assertTrue
(
flowElement
instanceof
ServiceTask
);
...
...
@@ -56,7 +63,22 @@ public class CustomExtensionsConverterTest extends AbstractConverterTest {
assertEquals
(
"testField2"
,
field
.
getFieldName
());
assertEquals
(
"${test}"
,
field
.
getExpression
());
List
<
ActivitiListener
>
listeners
=
serviceTask
.
getExecutionListeners
();
listeners
=
serviceTask
.
getExecutionListeners
();
validateExecutionListeners
(
listeners
);
extensionElementMap
=
serviceTask
.
getExtensionElements
();
validateExtensionElements
(
extensionElementMap
);
assertEquals
(
1
,
serviceTask
.
getBoundaryEvents
().
size
());
BoundaryEvent
boundaryEvent
=
serviceTask
.
getBoundaryEvents
().
get
(
0
);
assertEquals
(
"timerEvent"
,
boundaryEvent
.
getId
());
assertEquals
(
1
,
boundaryEvent
.
getEventDefinitions
().
size
());
assertTrue
(
boundaryEvent
.
getEventDefinitions
().
get
(
0
)
instanceof
TimerEventDefinition
);
extensionElementMap
=
boundaryEvent
.
getEventDefinitions
().
get
(
0
).
getExtensionElements
();
validateExtensionElements
(
extensionElementMap
);
}
protected
void
validateExecutionListeners
(
List
<
ActivitiListener
>
listeners
)
{
assertEquals
(
3
,
listeners
.
size
());
ActivitiListener
listener
=
(
ActivitiListener
)
listeners
.
get
(
0
);
assertTrue
(
ImplementationType
.
IMPLEMENTATION_TYPE_CLASS
.
equals
(
listener
.
getImplementationType
()));
...
...
@@ -70,8 +92,9 @@ public class CustomExtensionsConverterTest extends AbstractConverterTest {
assertTrue
(
ImplementationType
.
IMPLEMENTATION_TYPE_DELEGATEEXPRESSION
.
equals
(
listener
.
getImplementationType
()));
assertEquals
(
"${delegateExpression}"
,
listener
.
getImplementation
());
assertEquals
(
"start"
,
listener
.
getEvent
());
Map
<
String
,
List
<
ExtensionElement
>>
extensionElementMap
=
serviceTask
.
getExtensionElements
();
}
protected
void
validateExtensionElements
(
Map
<
String
,
List
<
ExtensionElement
>>
extensionElementMap
)
{
assertEquals
(
1
,
extensionElementMap
.
size
());
List
<
ExtensionElement
>
extensionElements
=
extensionElementMap
.
get
(
"test"
);
...
...
modules/activiti-bpmn-converter/src/test/java/org/activiti/editor/language/xml/InCompleteSignalConverterTest.java
浏览文件 @
ee2f460c
...
...
@@ -33,6 +33,5 @@ public class InCompleteSignalConverterTest extends AbstractConverterTest {
List
<
Problem
>
problems
=
model
.
getProblems
();
assertNotNull
(
problems
);
assertEquals
(
1
,
problems
.
size
());
System
.
out
.
println
(
problems
.
get
(
0
));
}
}
modules/activiti-bpmn-converter/src/test/resources/customextensionsmodel.bpmn
浏览文件 @
ee2f460c
...
...
@@ -4,6 +4,19 @@
xmlns:omgdi=
"http://www.omg.org/spec/DD/20100524/DI"
typeLanguage=
"http://www.w3.org/2001/XMLSchema"
expressionLanguage=
"http://www.w3.org/1999/XPath"
targetNamespace=
"http://www.activiti.org/test"
>
<process
id=
"process"
name=
"process1"
isExecutable=
"true"
>
<extensionElements>
<activiti:executionListener
event=
"start"
class=
"org.test.TestClass"
></activiti:executionListener>
<activiti:executionListener
event=
"end"
expression=
"${testExpression}"
></activiti:executionListener>
<activiti:executionListener
event=
"start"
delegateExpression=
"${delegateExpression}"
></activiti:executionListener>
<custom:test
xmlns:custom=
"http://custom.org/bpmn"
id=
"test"
name=
"test"
>
<custom:name>
<custom:test>
test
</custom:test>
</custom:name>
<custom:name
id=
"customName"
/>
<custom:description
xmlns:custom2=
"http://custom2.org/bpmn"
custom2:id=
"test"
/>
</custom:test>
<custom:test
xmlns:custom=
"http://custom.org/bpmn"
id=
"test2"
name=
"test2"
/>
</extensionElements>
<endEvent
id=
"sid-F7795B38-72CD-41A4-9549-6CFB7D3E5FB5"
></endEvent>
<sequenceFlow
id=
"sid-C6C56AC3-9561-49E0-A58A-624F6CB8BB82"
sourceRef=
"sid-F62B554B-FF4F-475E-94FF-A3F44EDA6A6A"
targetRef=
"servicetask"
></sequenceFlow>
<serviceTask
id=
"servicetask"
name=
"Service task"
activiti:async=
"true"
activiti:exclusive=
"false"
activiti:class=
"org.test.TestClass"
>
...
...
@@ -23,6 +36,21 @@
<custom:test
xmlns:custom=
"http://custom.org/bpmn"
id=
"test2"
name=
"test2"
/>
</extensionElements>
</serviceTask>
<boundaryEvent
id=
"timerEvent"
attachedToRef=
"servicetask"
>
<timerEventDefinition>
<extensionElements>
<custom:test
xmlns:custom=
"http://custom.org/bpmn"
id=
"test"
name=
"test"
>
<custom:name>
<custom:test>
test
</custom:test>
</custom:name>
<custom:name
id=
"customName"
/>
<custom:description
xmlns:custom2=
"http://custom2.org/bpmn"
custom2:id=
"test"
/>
</custom:test>
<custom:test
xmlns:custom=
"http://custom.org/bpmn"
id=
"test2"
name=
"test2"
/>
</extensionElements>
<timeCycle>
${cronExpression}
</timeCycle>
</timerEventDefinition>
</boundaryEvent>
<startEvent
id=
"sid-F62B554B-FF4F-475E-94FF-A3F44EDA6A6A"
></startEvent>
<sequenceFlow
id=
"sid-91C0F3A0-649F-462E-A1C1-1CE499FEDE3E"
sourceRef=
"servicetask"
targetRef=
"sid-F7795B38-72CD-41A4-9549-6CFB7D3E5FB5"
></sequenceFlow>
</process>
...
...
modules/activiti-engine/src/test/java/org/activiti/examples/task/StandaloneTaskTest.java
浏览文件 @
ee2f460c
...
...
@@ -48,15 +48,21 @@ public class StandaloneTaskTest extends PluggableActivitiTestCase {
taskService
.
addCandidateUser
(
taskId
,
"kermit"
);
taskService
.
addCandidateUser
(
taskId
,
"gonzo"
);
// Retrieve task list for
jbarrez
// Retrieve task list for
kermit
List
<
Task
>
tasks
=
taskService
.
createTaskQuery
().
taskCandidateUser
(
"kermit"
).
list
();
assertEquals
(
1
,
tasks
.
size
());
assertEquals
(
"testTask"
,
tasks
.
get
(
0
).
getName
());
// Retrieve task list for
tbaeyens
// Retrieve task list for
gonzo
tasks
=
taskService
.
createTaskQuery
().
taskCandidateUser
(
"gonzo"
).
list
();
assertEquals
(
1
,
tasks
.
size
());
assertEquals
(
"testTask"
,
tasks
.
get
(
0
).
getName
());
task
.
setName
(
"Update name"
);
taskService
.
saveTask
(
task
);
tasks
=
taskService
.
createTaskQuery
().
taskCandidateUser
(
"kermit"
).
list
();
assertEquals
(
1
,
tasks
.
size
());
assertEquals
(
"Update name"
,
tasks
.
get
(
0
).
getName
());
// Claim task
taskService
.
claim
(
taskId
,
"kermit"
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录