JBoss JBPM SVN: r2459 - in jbpm3/trunk/modules/core/src: main/java/org/jbpm/db and 2 other directories.
by do-not-reply@jboss.org
Author: tom.baeyens(a)jboss.com
Date: 2008-10-02 05:14:53 -0400 (Thu, 02 Oct 2008)
New Revision: 2459
Modified:
jbpm3/trunk/modules/core/src/main/java/org/jbpm/command/CancelProcessInstanceCommand.java
jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/GraphSession.java
jbpm3/trunk/modules/core/src/main/resources/org/jbpm/db/hibernate.queries.hbm.xml
jbpm3/trunk/modules/core/src/test/java/org/jbpm/graph/node/ProcessStateDbTest.java
Log:
[JBPM-1735] Cleanup ProcessStateDbTest
Modified: jbpm3/trunk/modules/core/src/main/java/org/jbpm/command/CancelProcessInstanceCommand.java
===================================================================
--- jbpm3/trunk/modules/core/src/main/java/org/jbpm/command/CancelProcessInstanceCommand.java 2008-10-02 08:47:31 UTC (rev 2458)
+++ jbpm3/trunk/modules/core/src/main/java/org/jbpm/command/CancelProcessInstanceCommand.java 2008-10-02 09:14:53 UTC (rev 2459)
@@ -18,11 +18,6 @@
private long processId;
- /**
- * recursivly cancel subprocesses?
- */
- boolean cancelSubProcesses = false;
-
public CancelProcessInstanceCommand() {
}
@@ -57,9 +52,6 @@
pi.end();
- if (cancelSubProcesses)
- cancelSubProcesses(processIdToCancel);
-
log.info("finished process cancellation");
} catch (RuntimeException ex) {
log.error("problems while cancel process", ex);
@@ -67,32 +59,6 @@
}
}
- /**
- * cancel all sub processes of the process with the given id calls
- * "cancelProcess" recursivly until all processes are ended
- *
- * @param processId
- */
- protected void cancelSubProcesses(long processId) {
- Query q = jbpmContext.getSession().getNamedQuery(
- "GraphSession.findSubProcessInstances");
- q.setLong("instanceId", processId);
- Iterator iter = q.list().iterator();
- while (iter.hasNext()) {
- ProcessInstance pi = (ProcessInstance) iter.next();
- log.info("cancel sub process instance #" + pi.getId());
- cancelProcess(pi.getId());
- }
- }
-
- public boolean isCancelSubProcesses() {
- return cancelSubProcesses;
- }
-
- public void setCancelSubProcesses(boolean cancelSubProcesses) {
- this.cancelSubProcesses = cancelSubProcesses;
- }
-
public long getProcessId() {
return processId;
}
Modified: jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/GraphSession.java
===================================================================
--- jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/GraphSession.java 2008-10-02 08:47:31 UTC (rev 2458)
+++ jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/GraphSession.java 2008-10-02 09:14:53 UTC (rev 2459)
@@ -37,6 +37,7 @@
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
+import org.jbpm.graph.node.ProcessState;
/**
* are the graph related database operations.
@@ -233,6 +234,13 @@
}
}
+ List referencingProcessStates = findReferencingProcessStates(processDefinition);
+ Iterator iter = referencingProcessStates.iterator();
+ while (iter.hasNext()) {
+ ProcessState processState = (ProcessState) iter.next();
+ processState.setSubProcessDefinition(null);
+ }
+
// then delete the process definition
session.delete(processDefinition);
@@ -243,6 +251,12 @@
}
}
+ protected List findReferencingProcessStates(ProcessDefinition subProcessDefinition) {
+ Query query = session.getNamedQuery("GraphSession.findReferencingProcessStates");
+ query.setEntity("subProcessDefinition", subProcessDefinition);
+ return query.list();
+ }
+
// process instances ////////////////////////////////////////////////////////
/**
@@ -370,12 +384,14 @@
Query query = session.getNamedQuery("GraphSession.findTokensForProcessInstance");
query.setEntity("processInstance", processInstance);
List tokens = query.list();
-
- // deleteSubProcesses
- Iterator iter = tokens.iterator();
- while (iter.hasNext()) {
- Token token = (Token) iter.next();
- deleteSubProcesses(token);
+
+ if (!tokens.isEmpty()) {
+ // deleteSubProcesses
+ Iterator iter = tokens.iterator();
+ while (iter.hasNext()) {
+ Token token = (Token) iter.next();
+ deleteSubProcesses(token);
+ }
}
// jobs
@@ -395,13 +411,15 @@
query.setParameterList("taskInstanceIds", taskInstanceIds);
}
- // delete the logs for all the process instance's tokens
- query = session.getNamedQuery("GraphSession.selectLogsForTokens");
- query.setParameterList("tokens", tokens);
- List logs = query.list();
- iter = logs.iterator();
- while (iter.hasNext()) {
- session.delete(iter.next());
+ if (!tokens.isEmpty()) {
+ // delete the logs for all the process instance's tokens
+ query = session.getNamedQuery("GraphSession.selectLogsForTokens");
+ query.setParameterList("tokens", tokens);
+ List logs = query.list();
+ Iterator iter = logs.iterator();
+ while (iter.hasNext()) {
+ session.delete(iter.next());
+ }
}
// then delete the process instance
@@ -429,6 +447,7 @@
subProcessInstance.setSuperProcessToken(null);
token.setSubProcessInstance(null);
deleteProcessInstance(subProcessInstance);
+ session.flush();
}
if (token.getChildren()!=null) {
Modified: jbpm3/trunk/modules/core/src/main/resources/org/jbpm/db/hibernate.queries.hbm.xml
===================================================================
--- jbpm3/trunk/modules/core/src/main/resources/org/jbpm/db/hibernate.queries.hbm.xml 2008-10-02 08:47:31 UTC (rev 2458)
+++ jbpm3/trunk/modules/core/src/main/resources/org/jbpm/db/hibernate.queries.hbm.xml 2008-10-02 09:14:53 UTC (rev 2459)
@@ -74,6 +74,14 @@
order by pi.start desc
]]>
</query>
+
+ <query name="GraphSession.findReferencingProcessStates">
+ <![CDATA[
+ select processState
+ from org.jbpm.graph.node.ProcessState as processState
+ where processState.subProcessDefinition = :subProcessDefinition
+ ]]>
+ </query>
<!-- related to ProcessInstance -->
<!-- ########################## -->
@@ -124,7 +132,6 @@
order by pi.start desc
]]>
</query>
-
<query name="GraphSession.findTokensForProcessInstance">
<![CDATA[
Modified: jbpm3/trunk/modules/core/src/test/java/org/jbpm/graph/node/ProcessStateDbTest.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/graph/node/ProcessStateDbTest.java 2008-10-02 08:47:31 UTC (rev 2458)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/graph/node/ProcessStateDbTest.java 2008-10-02 09:14:53 UTC (rev 2459)
@@ -49,6 +49,7 @@
}
finally
{
+ newTransaction();
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
}
}
@@ -78,6 +79,7 @@
}
finally
{
+ newTransaction();
jbpmContext.getGraphSession().deleteProcessDefinition(superProcessDefinition.getId());
jbpmContext.getGraphSession().deleteProcessDefinition(subProcessDefinition.getId());
}
@@ -101,6 +103,7 @@
}
finally
{
+ newTransaction();
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
}
}
@@ -185,6 +188,7 @@
}
finally
{
+ newTransaction();
jbpmContext.getGraphSession().deleteProcessDefinition(superProcessDefinition.getId());
jbpmContext.getGraphSession().deleteProcessDefinition(subProcessDefinition.getId());
}
@@ -213,6 +217,7 @@
}
finally
{
+ newTransaction();
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinitionOne.getId());
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinitionTwo.getId());
}
@@ -243,6 +248,7 @@
}
finally
{
+ newTransaction();
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinitionOne.getId());
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinitionTwo.getId());
}
@@ -250,12 +256,6 @@
public void testRecursiveProcessDefinition()
{
- if (true)
- {
- System.out.println("FIXME [JBPM-1735]: Cleanup ProcessStateDbTest");
- return;
- }
-
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
"<process-definition name='recursive process'>" +
" <start-state>" +
@@ -298,10 +298,12 @@
superProcessInstance = graphSession.loadProcessInstance(superProcessInstance.getId());
assertTrue(subProcessInstance.hasEnded());
- assertTrue(superProcessInstance.hasEnded());
+ assertTrue(superProcessInstance.hasEnded());
+
}
finally
{
+ newTransaction();
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
}
}
@@ -331,17 +333,21 @@
" <state name='wait' />" +
"</process-definition>");
jbpmContext.deployProcessDefinition(superProcessDefinition);
+
+ ProcessInstance superProcessInstance = null;
+ ProcessInstance subProcessInstance = null;
+
try
{
newTransaction();
- ProcessInstance processInstance = jbpmContext.newProcessInstanceForUpdate("superprocess");
- processInstance.signal();
+ superProcessInstance = jbpmContext.newProcessInstanceForUpdate("superprocess");
+ superProcessInstance.signal();
newTransaction();
- long subProcessInstanceId = processInstance.getRootToken().getSubProcessInstance().getId();
- ProcessInstance subProcessInstance = jbpmContext.loadProcessInstance(subProcessInstanceId);
+ long subProcessInstanceId = superProcessInstance.getRootToken().getSubProcessInstance().getId();
+ subProcessInstance = jbpmContext.loadProcessInstance(subProcessInstanceId);
subProcessInstance.signal();
jbpmContext.save(subProcessInstance);
@@ -356,12 +362,13 @@
ProcessStateLog processStateLog = (ProcessStateLog) processStateLogs.get(0);
assertEquals(subProcessInstanceId, processStateLog.getSubProcessInstance().getId());
- assertEquals(processInstance.getId(), processStateLog.getToken().getProcessInstance().getId());
+ assertEquals(superProcessInstance.getId(), processStateLog.getToken().getProcessInstance().getId());
}
finally
{
- jbpmContext.getGraphSession().deleteProcessDefinition(superProcessDefinition.getId());
- jbpmContext.getGraphSession().deleteProcessDefinition(subProcessDefinition.getId());
+ newTransaction();
+ graphSession.deleteProcessDefinition(subProcessDefinition.getId());
+ graphSession.deleteProcessDefinition(superProcessDefinition.getId());
}
}
@@ -474,6 +481,7 @@
}
finally
{
+ newTransaction();
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinitionOne.getId());
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinitionTwo.getId());
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinitionThree.getId());
@@ -482,12 +490,6 @@
public void testUnboundSubProcess()
{
- if (true)
- {
- System.out.println("FIXME [JBPM-1735]: Cleanup ProcessStateDbTest");
- return;
- }
-
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
"<process-definition name='superprocess'>" +
" <start-state name='start'>" +
@@ -519,6 +521,7 @@
}
finally
{
+ newTransaction();
jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
}
}
15 years, 7 months
JBoss JBPM SVN: r2458 - in jbpm4/trunk: modules/pvm/src/main/docs and 1 other directory.
by do-not-reply@jboss.org
Author: tom.baeyens(a)jboss.com
Date: 2008-10-02 04:47:31 -0400 (Thu, 02 Oct 2008)
New Revision: 2458
Added:
jbpm4/trunk/eclipse/jbpm.code.templates.xml
jbpm4/trunk/eclipse/jbpm.profile.xml
jbpm4/trunk/eclipse/readme.txt
jbpm4/trunk/modules/pvm/src/main/docs/arrow.png
jbpm4/trunk/modules/pvm/src/main/docs/bpmn.activity.classes.png
jbpm4/trunk/modules/pvm/src/main/docs/bpmn.event.classes.png
jbpm4/trunk/modules/pvm/src/main/docs/bpmn.gateway.classes.png
Removed:
jbpm4/trunk/eclipse/jBPMCodeStyle.xml
jbpm4/trunk/eclipse/readme-commiters.txt
Modified:
jbpm4/trunk/modules/pvm/src/main/docs/glossary.html
Log:
code style updates and bpmn docs
Deleted: jbpm4/trunk/eclipse/jBPMCodeStyle.xml
===================================================================
--- jbpm4/trunk/eclipse/jBPMCodeStyle.xml 2008-10-01 13:18:18 UTC (rev 2457)
+++ jbpm4/trunk/eclipse/jBPMCodeStyle.xml 2008-10-02 08:47:31 UTC (rev 2458)
@@ -1,267 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<profiles version="11">
-<profile kind="CodeFormatterProfile" name="jBPMCodeStyle" version="11">
-<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
-<setting id="org.eclipse.jdt.core.compiler.source" value="1.5"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="140"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="2"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
-<setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
-<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="2"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
-<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.5"/>
-<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" value="enabled"/>
-<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="120"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.5"/>
-<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
-</profile>
-</profiles>
Added: jbpm4/trunk/eclipse/jbpm.code.templates.xml
===================================================================
--- jbpm4/trunk/eclipse/jbpm.code.templates.xml (rev 0)
+++ jbpm4/trunk/eclipse/jbpm.code.templates.xml 2008-10-02 08:47:31 UTC (rev 2458)
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?><templates><template autoinsert="false" context="gettercomment_context" deleted="false" description="Comment for getter method" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name="gettercomment"></template><template autoinsert="false" context="settercomment_context" deleted="false" description="Comment for setter method" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.settercomment" name="settercomment"></template><template autoinsert="false" context="constructorcomment_context" deleted="false" description="Comment for created constructors" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name="constructorcomment"></template><template autoinsert="false" context="filecomment_context" deleted="false" description="Comment for created Java files" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.filecomment" name="filecomment">/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */</template><template autoinsert="false" context="typecomment_context" deleted="false" description="Comment for created types" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.typecomment" name="typecomment">/**
+ * @author Tom Baeyens
+ */</template><template autoinsert="false" context="fieldcomment_context" deleted="false" description="Comment for fields" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name="fieldcomment"></template><template autoinsert="false" context="methodcomment_context" deleted="false" description="Comment for non-overriding methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name="methodcomment"></template><template autoinsert="false" context="overridecomment_context" deleted="false" description="Comment for overriding methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name="overridecomment"></template><template autoinsert="false" context="delegatecomment_context" deleted="false" description="Comment for delegate methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name="delegatecomment"></template><template autoinsert="false" context="newtype_context" deleted="false" !
description="Newly created files" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.newtype" name="newtype">${filecomment}
+${package_declaration}
+
+${typecomment}
+${type_declaration}</template><template autoinsert="true" context="classbody_context" deleted="false" description="Code in new class type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.classbody" name="classbody">
+</template><template autoinsert="true" context="interfacebody_context" deleted="false" description="Code in new interface type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name="interfacebody">
+</template><template autoinsert="true" context="enumbody_context" deleted="false" description="Code in new enum type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.enumbody" name="enumbody">
+</template><template autoinsert="true" context="annotationbody_context" deleted="false" description="Code in new annotation type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name="annotationbody">
+</template><template autoinsert="true" context="catchblock_context" deleted="false" description="Code in new catch blocks" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.catchblock" name="catchblock">// ${todo} Auto-generated catch block
+${exception_var}.printStackTrace();</template><template autoinsert="true" context="methodbody_context" deleted="false" description="Code in created method stubs" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.methodbody" name="methodbody">// ${todo} Auto-generated method stub
+${body_statement}</template><template autoinsert="true" context="constructorbody_context" deleted="false" description="Code in created constructor stubs" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name="constructorbody">${body_statement}
+// ${todo} Auto-generated constructor stub</template><template autoinsert="true" context="getterbody_context" deleted="false" description="Code in created getters" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.getterbody" name="getterbody">return ${field};</template><template autoinsert="true" context="setterbody_context" deleted="false" description="Code in created setters" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.setterbody" name="setterbody">${field} = ${param};</template><template autoinsert="true" context="gettercomment_context" deleted="false" description="Comment for getter function" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.gettercomment" name="gettercomment">/**
+ * @return the ${bare_field_name}
+ */</template><template autoinsert="true" context="settercomment_context" deleted="false" description="Comment for setter function" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.settercomment" name="settercomment">/**
+ * @param ${param} the ${bare_field_name} to set
+ */</template><template autoinsert="true" context="constructorcomment_context" deleted="false" description="Comment for created constructors" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.constructorcomment" name="constructorcomment">/**
+ * ${tags}
+ */</template><template autoinsert="true" context="filecomment_context" deleted="false" description="Comment for created JavaScript files" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.filecomment" name="filecomment">/**
+ *
+ */</template><template autoinsert="true" context="typecomment_context" deleted="false" description="Comment for created types" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.typecomment" name="typecomment">/**
+ * @author ${user}
+ *
+ * ${tags}
+ */</template><template autoinsert="true" context="fieldcomment_context" deleted="false" description="Comment for vars" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.fieldcomment" name="fieldcomment">/**
+ *
+ */</template><template autoinsert="true" context="methodcomment_context" deleted="false" description="Comment for non-overriding function" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.methodcomment" name="methodcomment">/**
+ * ${tags}
+ */</template><template autoinsert="true" context="overridecomment_context" deleted="false" description="Comment for overriding functions" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.overridecomment" name="overridecomment">/* (non-Jsdoc)
+ * ${see_to_overridden}
+ */</template><template autoinsert="true" context="delegatecomment_context" deleted="false" description="Comment for delegate functions" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.delegatecomment" name="delegatecomment">/**
+ * ${tags}
+ * ${see_to_target}
+ */</template><template autoinsert="true" context="newtype_context" deleted="false" description="Newly created files" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.newtype" name="newtype">${filecomment}
+${package_declaration}
+
+${typecomment}
+${type_declaration}</template><template autoinsert="true" context="classbody_context" deleted="false" description="Code in new class type bodies" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.classbody" name="classbody">
+</template><template autoinsert="true" context="catchblock_context" deleted="false" description="Code in new catch blocks" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.catchblock" name="catchblock">// ${todo} Auto-generated catch block
+${exception_var}.printStackTrace();</template><template autoinsert="true" context="methodbody_context" deleted="false" description="Code in created function stubs" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.methodbody" name="methodbody">// ${todo} Auto-generated function stub
+${body_statement}</template><template autoinsert="true" context="constructorbody_context" deleted="false" description="Code in created constructor stubs" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.constructorbody" name="constructorbody">${body_statement}
+// ${todo} Auto-generated constructor stub</template><template autoinsert="true" context="getterbody_context" deleted="false" description="Code in created getters" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.getterbody" name="getterbody">return ${field};</template><template autoinsert="true" context="setterbody_context" deleted="false" description="Code in created setters" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.setterbody" name="setterbody">${field} = ${param};</template></templates>
\ No newline at end of file
Property changes on: jbpm4/trunk/eclipse/jbpm.code.templates.xml
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added: jbpm4/trunk/eclipse/jbpm.profile.xml
===================================================================
--- jbpm4/trunk/eclipse/jbpm.profile.xml (rev 0)
+++ jbpm4/trunk/eclipse/jbpm.profile.xml 2008-10-02 08:47:31 UTC (rev 2458)
@@ -0,0 +1,267 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<profiles version="11">
+<profile kind="CodeFormatterProfile" name="jbpm profile" version="11">
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="2"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="4"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="160"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" value="enabled"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.compiler.source" value="1.5"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="80"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.5"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.5"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
+</profile>
+</profiles>
Property changes on: jbpm4/trunk/eclipse/jbpm.profile.xml
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Deleted: jbpm4/trunk/eclipse/readme-commiters.txt
===================================================================
--- jbpm4/trunk/eclipse/readme-commiters.txt 2008-10-01 13:18:18 UTC (rev 2457)
+++ jbpm4/trunk/eclipse/readme-commiters.txt 2008-10-02 08:47:31 UTC (rev 2458)
@@ -1,25 +0,0 @@
-#
-# $Id: $
-#
-
-1. Edit your subversion config ~/.subversion/config and set the following in each section:
-
-[miscellany]
-enable-auto-props = yes
-
-[auto-props]
-*.bat = svn:keywords=Id Revision;svn:eol-style=LF
-*.java = svn:keywords=Id Revision;svn:eol-style=LF
-*.sh = svn:keywords=Id Revision;svn:eol-style=LF
-*.txt = svn:keywords=Id Revision;svn:eol-style=LF
-*.wsdl = svn:keywords=Id Revision;svn:eol-style=LF
-*.xml = svn:keywords=Id Revision;svn:eol-style=LF
-*.xsd = svn:keywords=Id Revision;svn:eol-style=LF
-
-2. If you are using an IDE, make sure that it refers to the same config. So,
-for example, if you are using Eclipse with Subclipse on windows, you need to
-set Team->SVN->Configuration Location to:
-
-/home/<your user name>/.subversion
-
-3. If you are using Eclipse, set your code style to jBPMCodeStyle.xml
Copied: jbpm4/trunk/eclipse/readme.txt (from rev 2375, jbpm4/trunk/eclipse/readme-commiters.txt)
===================================================================
--- jbpm4/trunk/eclipse/readme.txt (rev 0)
+++ jbpm4/trunk/eclipse/readme.txt 2008-10-02 08:47:31 UTC (rev 2458)
@@ -0,0 +1,26 @@
+#
+# $Id: $
+#
+
+1. Edit your subversion config ~/.subversion/config and set the following in each section:
+
+[miscellany]
+enable-auto-props = yes
+
+[auto-props]
+*.bat = svn:keywords=Id Revision;svn:eol-style=LF
+*.java = svn:keywords=Id Revision;svn:eol-style=LF
+*.sh = svn:keywords=Id Revision;svn:eol-style=LF
+*.txt = svn:keywords=Id Revision;svn:eol-style=LF
+*.wsdl = svn:keywords=Id Revision;svn:eol-style=LF
+*.xml = svn:keywords=Id Revision;svn:eol-style=LF
+*.xsd = svn:keywords=Id Revision;svn:eol-style=LF
+
+2. If you are using an IDE, make sure that it refers to the same config. So,
+for example, if you are using Eclipse with Subclipse on windows, you need to
+set Team->SVN->Configuration Location to:
+
+/home/<your user name>/.subversion
+
+3. If you are using Eclipse, set your code style to jbpm.code.templates.xml with
+Window --> Preferences --> Java --> Code Style --> Formatter --> Import
Property changes on: jbpm4/trunk/eclipse/readme.txt
___________________________________________________________________
Name: svn:mergeinfo
+
Added: jbpm4/trunk/modules/pvm/src/main/docs/arrow.png
===================================================================
(Binary files differ)
Property changes on: jbpm4/trunk/modules/pvm/src/main/docs/arrow.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: jbpm4/trunk/modules/pvm/src/main/docs/bpmn.activity.classes.png
===================================================================
(Binary files differ)
Property changes on: jbpm4/trunk/modules/pvm/src/main/docs/bpmn.activity.classes.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: jbpm4/trunk/modules/pvm/src/main/docs/bpmn.event.classes.png
===================================================================
(Binary files differ)
Property changes on: jbpm4/trunk/modules/pvm/src/main/docs/bpmn.event.classes.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: jbpm4/trunk/modules/pvm/src/main/docs/bpmn.gateway.classes.png
===================================================================
(Binary files differ)
Property changes on: jbpm4/trunk/modules/pvm/src/main/docs/bpmn.gateway.classes.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: jbpm4/trunk/modules/pvm/src/main/docs/glossary.html
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/docs/glossary.html 2008-10-01 13:18:18 UTC (rev 2457)
+++ jbpm4/trunk/modules/pvm/src/main/docs/glossary.html 2008-10-02 08:47:31 UTC (rev 2458)
@@ -1,8 +1,11 @@
<html>
<head>
<style type="text/css">
+body {
+ font-family: verdana;
+}
td {
- border-width: 1 0 0 0;
+ border-width: 0 0 1 0;
border-style: solid;
border-color: gray;
padding: 3 0 3 0;
@@ -12,17 +15,24 @@
font-weight: bold;
padding-right: 10px;
vertical-align: top;
- text-align: right;
}
+td.subterm {
+ padding-right
+ white-space: nowrap;
+ padding-right: 10px;
+ vertical-align: top;
+}
th {
+ padding: 5 10 5 10;
+ white-space: nowrap;
color: white;
background-color: gray;
}
</style>
</head>
<body>
-<h1>Process Virtual Machine Terminology</h1>
-<table cellspacing="0">
+<h1>jBPMs Terminology</h1>
+<table cellspacing="1">
<tr>
<th>Term</th>
<th>Description</th>
@@ -91,5 +101,355 @@
</tr>
-->
</table>
+
+
+<h1>BPMN Terminology</h1>
+<table cellspacing="1">
+ <tr>
+ <th>BPMN Term</th>
+ <th>BPMN Description</th>
+ <th>jPDL/PVM Mapping</th>
+ </tr>
+ <tr>
+ <td class="term">Process</td>
+ <td>A Process describes a sequence or flow of Activities in an enterprise with the objective of carrying work. In
+ BPMN a Process is depicted as a graph of Flow Elements, which are a set of Activities, events, gateways and
+ sequence flows that define finite execution semantics. Processes may be defined at any level
+ from enterprise-wide processes to processes performed by a single person. Low-level processes may be grouped
+ together to achieve a common business goal.
+ </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td class="term">Sequence flow</td>
+ <td>A Sequence Flow is used to model the transition of control from one Flow Element (the source) to another
+ (the target). It determines the sequencing of Flow Elements within a Process flow.
+ A Sequence Flow can optionally define a condition expression, indicating that the �transfer of control� will
+ only be available if the expression evaluates to true. This expression is typically used when the source of the
+ Sequence Flow is a Gateway or an Activity.</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td class="term">Flow element</td>
+ <td>Generic name for activity, event, gateway and sequence flow</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td class="term">Activity</td>
+ <td>Generic term for Task, Sub process and Call activity.
+ </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td class="term">Event</td>
+ <td>An Event is something that �happens� during the course of a Process. These Events affect the flow of the
+ Process and usually have a cause or an impact. The term �event� is general enough to cover many things in a
+ Process. The start of an Activity, the end of an Activity, the change of state of a document, a message that
+ arrives, etc., all could be considered events. However, BPMN has restricted the use of Events to include only
+ those types of Events that will affect the sequence or timing of Activities of a Process.
+ </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td class="term">Gateway</td>
+ <td><p>Gateways are used to control how Sequence Flows interact as they converge and diverge within a
+ Process. If the flow does not need to be controlled, then a Gateway is not needed. The term �Gateway� implies
+ that there is a gating mechanism that either allows or disallows passage through the Gateway--that is, as Tokens
+ arrive at a Gateway, they can be merged together on input and/or split apart on output as the Gateway
+ mechanisms are invoked.
+ </p>
+ <p>Gateways, like Activities, are capable of consuming or generating additional control Tokens, effectively
+ controlling the execution semantics of a given Process. The main difference is that gateways do not represent
+ �work� being done and they are considered to have zero effect on the operational measures of the Process being
+ executed (cost, time, etc.).
+ </p>
+ <p>The Gateway controls the flow of both diverging and converging Sequence Flow. That is, a single Gateway
+ could have multiple input and multiple output flows. Modelers and modeling tools may want to enforce a best
+ practice of a Gateway only performing one of these functions. Thus, it would take two sequential Gateways to
+ first converge and then to diverge the Sequence Flow.
+ </p>
+ </td>
+ <td> </td>
+ </tr>
+</table>
+
+<h1>BPMN Activities</h1>
+<center><img src="bpmn.activity.classes.png"/></center>
+<table cellspacing="1">
+ <tr>
+ <th>BPMN Term</th>
+ <th>BPMN Description</th>
+ <th>jPDL/PVM Mapping</th>
+ </tr>
+ <tr>
+ <td class="term">Activity</td>
+ <td>Generic term for Task, Sub process and Call activity.
+ </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td class="term"><img src="arrow.png" />Task</td>
+ <td>A Task is an atomic Activity within a Process flow. A Task is used when the work in the Process cannot
+ be broken down to a finer level of detail. Generally, an end-user and/or applications are used to perform the
+ Task when it is executed.
+ </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td class="term"> <img src="arrow.png" />Service task</td>
+ <td>A Service Task is a Task that uses some sort of service, which could be a Web service or an automated
+ application.
+ </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td class="term"> <img src="arrow.png" />Receive task</td>
+ <td><p>A Receive Task is a simple Task that is designed to wait for a Message to arrive from an external
+ Participant (relative to the Process). Once the Message has been received, the Task is completed.
+ A Receive Task is often used to start a Process. In a sense, the Process is bootstrapped by the receipt of the
+ message. In order for the Task to Instantiate the Process it must meet one of the following conditions:
+ </p>
+ <ul>
+ <li>The Process does not have a Start Event and the Receive Task has no incoming Sequence Flow.</li>
+ <li>The incoming Sequence Flow for the Receive Task has a source of a Start Event.
+ <ul>
+ <li>Note that no other incoming Sequence Flow are allowed for the Receive Task (in particular,
+ a loop connection from a downstream object).
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td class="term"> <img src="arrow.png" />Send task</td>
+ <td>A Send Task is a simple Task that is designed to send a Message to an external Participant (relative to
+ the Process). Once the Message has been sent, the Task is completed.
+ </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td class="term"> <img src="arrow.png" />User task</td>
+ <td>A User Task is a typical �workflow� Task where a human performer performs the Task with the assistance
+ of a software application and is scheduled through a task list manager of some sort.
+ </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td class="term"> <img src="arrow.png" />Script task</td>
+ <td>A Script Task is executed by a business process engine. The modeler or implementer defines a script in a
+ language that the engine can interpret. When the Task is ready to start, the engine will execute the script. When
+ the script is completed, the Task will also be completed.
+ </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td class="term"> <img src="arrow.png" />Manual task</td>
+ <td>A Manual Task is a Task that is expected to be performed without the aid of any business process execution
+ engine or any application. An example of this could be a telephone technician installing a telephone at a
+ customer location.
+ </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td class="term"> <img src="arrow.png" />Business rule</td>
+ <td> </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td class="term"> <img src="arrow.png" />None task</td>
+ <td>A None Task is often considered a �dummy� Task, which may be added to a Process to simplify or organize
+ the modeling configuration. No Activity will occur during for the None Task, which will immediately be
+ completed once it is enabled.
+ </td>
+ <td> </td>
+ </tr>
+
+ <tr>
+ <td class="term"><img src="arrow.png" />Sub process</td>
+ <td>A Sub-Process is an Activity whose internal details have been modeled using Activities, Gateways,
+ Events, and Sequence Flows. A Sub-Process is a graphical object within a Process, but it also can be
+ �opened up� to show a lower-level Process. Sub-Processes define a contextual scope that can be used for
+ attribute visibility, transactional scope as well as for the handing of �boundary� events.</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td class="term"><img src="arrow.png" />Call activity</td>
+ <td>A Call Activity identifies a point in the Process where a global Process or a Global Task is used. The
+ Call Activity acts as a �wrapper� for the invocation of a global Process or Global Task within the
+ execution. The activation of a call Activity results in the transfer of control to the called global Process or
+ Global Task.
+ </td>
+ <td> </td>
+ </tr>
+<!--
+ <tr>
+ <td class="term"></td>
+ <td></td>
+ <td></td>
+ </tr>
+-->
+</table>
+
+<h1>BPMN Events</h1>
+<i>
+<p>An Event is something that �happens� during the course of a Process. These Events affect the flow of the
+Process and usually have a cause or an impact and in general require or allow for a reaction. The term �event�
+is general enough to cover many things in a Process. The start of an Activity, the end of an Activity, the
+change of state of a document, a message that arrives, etc., all could be considered Events.
+</p>
+<p>Events allow for the description of Event driven Processes. In these Processes Events come in two
+flavors: Events, which throw a trigger, which may eventually be caught by another Event. Typically the
+trigger carries information out of the scope where the throw Event occurred into the scope of the catching
+Events. The throwing of a trigger may be either implicit as defined by this standard or an extension to it or
+explicit by a throw Event.
+</p>
+<p>Depending on the type of the Event there are different strategies to forward the trigger to catching Events:
+publication, direct resolution, propagation, cancellations and compensations.
+</p>
+<p>With publication a trigger may be received by any catching Events in any scope of the system where the trigger
+is published. Events for which publication is used are grouped to conversations. Published Events may
+participate in several conversations. Messages are triggers, which are generated outside of the pool they are
+published in. They typically describe B2B communication. When messages need to reach a specific process
+instance, correlation is used to identify the particular instance. Signals are triggers generated in the pool they
+are published.
+</p>
+<p>Timer and Conditional triggers are implicitly thrown. When they are activated they wait for a time based or
+status based condition respectively to trigger the catch Event.
+</p>
+<p>A trigger which is propagated, is forwarded from the location where the Event has been thrown to the
+innermost enclosing scope instance which has an attached Event being able to catch the trigger. Error triggers
+are critical and suspend execution at the location of throwing. Escalations are non critical and execution
+continues at the location of throwing. If no catching Event is found for an error or escalation trigger, this
+trigger is unresolved.
+</p>
+<p>Termination, Compensation and Cancellation are directed towards a Process or a specific Activity
+instance. Termination indicates that all Activities in the Process or Activity should be immediately ended.
+This includes all instances of Multi-Instances. It is ended without compensation or Event Handling.
+</p>
+<p>Compensation of a successfully completed Activity triggers its compensation handler. The compensation
+handler is either user defined or implicit. The implicit compensation handler of a Sub Process calls all
+compensation handlers of its enclosed Activities in the reverse order of control flow dependencies. If
+compensation is invoked for an activity that has not yet completed, or has not completed successfully, nothing
+happens (in particular, no error is raised).
+</p>
+<p>Cancellation will terminate all running Activities and compensate all successfully completed Activities in
+the Sub-Process it is applied to. If the Sub-Process is a transaction, the transaction is rolled back.
+</p>
+</i>
+
+<center><img src="bpmn.event.classes.png"/></center>
+<table cellspacing="1">
+ <tr>
+ <th>BPMN Term</th>
+ <th>BPMN Description</th>
+ <th>jPDL/PVM Mapping</th>
+ </tr>
+ <tr>
+ <td class="term">Event</td>
+ <td> </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td class="term">Trigger</td>
+ <td> </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td class="term">Signal</td>
+ <td> </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td class="term">Catch event</td>
+ <td> </td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td class="term">Throw event</td>
+ <td> </td>
+ <td> </td>
+ </tr>
+</table>
+
+<h1>BPMN mapping notes</h1>
+
+
+<h1>Out of scope for jPDL - BPMN mapping</h1>
+
+<ul>
+ <li>Properties</li>
+ <li>Expressions</li>
+ <li>Definitions</li>
+ <li>Imports</li>
+ <li>Auditing</li>
+ <li>Monitoring</li>
+ <li>Compensation</li>
+ <li>Collaboration
+ <ul>
+ <li>Pool</li>
+ <li>Message</li>
+ <li>Participant</li>
+ <li>Choreography</li>
+ <li>Conversation</li>
+ <li>Correlation</li>
+ </ul>
+ </li>
+ <li>Service
+ <ul>
+ <li>ServiceReference</li>
+ <li>Interface</li>
+ <li>Operation</li>
+ </ul>
+ </li>
+</ul>
+
+<h3>Abstract (Public) Processes</h3>
+<i>An Abstract Process represents the interactions between a private business process and another process or
+participant (see Figure 7-2). Only those Activities that are used to communicate outside the private business
+process, plus the order of these Activities, are included in the abstract process. All other �internal� Activities
+of the private business process are not shown in the abstract process. Thus, the abstract process shows to the
+outside world the messages and the order of these messages that are required to interact with that business
+process. Abstract processes are contained within a Pool and can be modeled separately or within a larger BPMN
+Diagram to show the flow of messages between the abstract process Activities and other entities. If the abstract
+process is in the same Diagram as its corresponding private business process, then the Activities that are
+common to both processes can be associated.
+</i>
+
+<h3>Choreographies</h3>
+<i>A self-contained Choreography (no Pools or Orchestration) is a definition of the expected behavior,
+basically a procedural contract, between interacting Participants. While a normal Process exists within a Pool,
+a Choreography exists between Pools (or Participants).
+The Choreography Process looks similar to a private Business Process since it consists of a network of
+Activities, events, and gateways (see Figure 7-3). However, a Choreography is different in that the
+Activities is an interaction that represents a set (1 or more) of message exchanges, which involves two (2) or
+more Participants. In addition, unlike a normal Process, there is no central controller, responsible entity or
+observer of the Process.
+</i>
+
+<h3>Collaboration (Global) Processes</h3>
+<i>A Collaboration process depicts the interactions between two or more business entities. These interactions are
+defined as an order of Activities that represent the message exchange patterns between the entities involved.
+The Collaboration Process can be shown as two or more abstract processes communicating with each other (see
+Figure 7-4). With an abstract process, the Activities for the Collaboration participants can be considered the
+�touch-points� between the participants. The corresponding internal (executable) processes are likely to have
+much more Activity and detail than what is shown in the abstract processes.
+</i>
+
+<h1>Meeting topics</h1>
+<h3>Unifying events</h3>
+<p>Can we unify the pvm signal, event and processlog into one single event
+concept ?</p>
+
+<h3>Activity instances</h3>
+<p>Activity instances, execution scopes and external entities</p>
+
+<h3>Reusing parts of SEAM</h3>
+<p>Email templates, identity, other ?</p>
+
+<h3>Should jPDL process and node be unified</h3>
+<p>Similar to BPMN callable element ?</p>
+
</body>
</html>
\ No newline at end of file
15 years, 7 months
JBoss JBPM SVN: r2457 - in projects/spec/trunk/modules: cts and 4 other directories.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-10-01 09:18:18 -0400 (Wed, 01 Oct 2008)
New Revision: 2457
Added:
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ComplexGatewayImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ExclusiveGatewayImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/InclusiveGatewayImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ParallelGatewayImpl.java
Modified:
projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/ProcessBuilder.java
projects/spec/trunk/modules/cts/pom.xml
projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewayMergeTest.java
projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewaySplitTest.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ExpressionImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/GatewayImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/NodeImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/GatewayBuilderImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java
projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml
Log:
Gateway split tests - pass
Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/ProcessBuilder.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/ProcessBuilder.java 2008-10-01 03:42:57 UTC (rev 2456)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/ProcessBuilder.java 2008-10-01 13:18:18 UTC (rev 2457)
@@ -24,7 +24,9 @@
//$Id$
import org.jbpm.api.model.Message;
+import org.jbpm.api.model.Node;
import org.jbpm.api.model.Process;
+import org.jbpm.api.model.Property;
import org.jbpm.api.model.Assignment.AssignTime;
import org.jbpm.api.model.Event.EventDetailType;
import org.jbpm.api.model.Expression.ExpressionLanguage;
Modified: projects/spec/trunk/modules/cts/pom.xml
===================================================================
--- projects/spec/trunk/modules/cts/pom.xml 2008-10-01 03:42:57 UTC (rev 2456)
+++ projects/spec/trunk/modules/cts/pom.xml 2008-10-01 13:18:18 UTC (rev 2457)
@@ -71,15 +71,10 @@
<configuration>
<excludes>
<exclude>org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewayMergeTest.java</exclude>
- <exclude>org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewaySplitTest.java</exclude>
<exclude>org/jbpm/test/cts/gateway/inclusive/InclusiveGatewayMergeTest.java</exclude>
- <exclude>org/jbpm/test/cts/gateway/inclusive/InclusiveGatewaySplitTest.java</exclude>
<exclude>org/jbpm/test/cts/gateway/parallel/ParallelGatewayMergeTest.java</exclude>
- <exclude>org/jbpm/test/cts/gateway/parallel/ParallelGatewaySplitTest.java</exclude>
<exclude>org/jbpm/test/cts/node/NodeInputSetTest.java</exclude>
<exclude>org/jbpm/test/cts/node/NodeOutputSetTest.java</exclude>
- <exclude>org/jbpm/test/pattern/control/exclusivechoice/ExclusiveChoiceTest.java</exclude>
- <exclude>org/jbpm/test/pattern/control/multichoice/MultiChoiceTest.java</exclude>
<exclude>org/jbpm/test/pattern/control/parallelsplit/ParallelSplitTest.java</exclude>
<exclude>org/jbpm/test/pattern/control/simplemerge/SimpleMergeTest.java</exclude>
<exclude>org/jbpm/test/pattern/control/synchronization/SynchronizationTest.java</exclude>
Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewayMergeTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewayMergeTest.java 2008-10-01 03:42:57 UTC (rev 2456)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewayMergeTest.java 2008-10-01 13:18:18 UTC (rev 2457)
@@ -29,7 +29,9 @@
import org.jbpm.api.model.Message;
import org.jbpm.api.model.Process;
import org.jbpm.api.model.Signal;
+import org.jbpm.api.model.Assignment.AssignTime;
import org.jbpm.api.model.Event.EventDetailType;
+import org.jbpm.api.model.Expression.ExpressionLanguage;
import org.jbpm.api.model.Gateway.GatewayType;
import org.jbpm.api.model.Signal.SignalType;
import org.jbpm.api.model.builder.EventBuilder;
@@ -168,12 +170,12 @@
EventBuilder eventBuilder = procBuilder.addProcess(getName()).addStartEvent("StartA", EventDetailType.Signal);
eventBuilder.addSignalRef(SignalType.SYSTEM_START_TRIGGER, "A");
TaskBuilder taskBuilder = procBuilder.addSequenceFlow("TaskA").addTask("TaskA");
- //taskBuilder.addAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "'TaskA'", "taskValue");
+ taskBuilder.addNodeAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "'TaskA'", "taskValue");
taskBuilder.addSequenceFlow("Merge");
eventBuilder = procBuilder.addStartEvent("StartB", EventDetailType.Signal);
eventBuilder.addSignalRef(SignalType.SYSTEM_START_TRIGGER, "B");
taskBuilder = procBuilder.addSequenceFlow("TaskB").addTask("TaskB");
- //taskBuilder.addAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "'TaskB'", "taskValue");
+ taskBuilder.addNodeAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "'TaskB'", "taskValue");
taskBuilder.addSequenceFlow("Merge");
procBuilder.addGateway("Merge", GatewayType.Exclusive).addSequenceFlow("End");
procBuilder.addEndEvent("End", EventDetailType.Message).addMessageRef("EndMessage");
Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewaySplitTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewaySplitTest.java 2008-10-01 03:42:57 UTC (rev 2456)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewaySplitTest.java 2008-10-01 13:18:18 UTC (rev 2457)
@@ -83,7 +83,7 @@
try
{
proc.waitForEnd();
- fail("No gate defained for foo==10");
+ fail("No gate defined for foo==10");
}
catch (RuntimeException rte)
{
Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ComplexGatewayImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ComplexGatewayImpl.java (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ComplexGatewayImpl.java 2008-10-01 13:18:18 UTC (rev 2457)
@@ -0,0 +1,68 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.model;
+
+//$Id$
+
+import javax.persistence.Entity;
+
+import org.jbpm.api.NotImplementedException;
+import org.jbpm.api.model.Expression;
+
+/**
+ * A Complex Gateway handles situations that are not easily handled through the other types of Gateways. Complex
+ * Gateways can also be used to combine a set of linked simple Gateways into a single, more compact situation. Modelers
+ * can provide complex expressions that determine the merging and/or splitting behavior of the
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 08-Jul-2008
+ */
+@Entity(name = "ComplexGateway")
+public class ComplexGatewayImpl extends GatewayImpl
+{
+ private static final long serialVersionUID = 1L;
+
+ public ComplexGatewayImpl(String name)
+ {
+ super(name, GatewayType.Complex);
+ }
+
+ public GatewayType getGatewayType()
+ {
+ return GatewayType.Complex;
+ }
+
+ public Expression getIncommingCondition()
+ {
+ throw new NotImplementedException("JBPM-1636", "ComplexGateway incomming condition");
+ }
+
+ public Expression getOutgoingCondition()
+ {
+ throw new NotImplementedException("JBPM-1637", "ComplexGateway outgoing condition");
+ }
+
+ public String toString()
+ {
+ return "ComplexGateway[" + getName() + "]";
+ }
+}
\ No newline at end of file
Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ComplexGatewayImpl.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ExclusiveGatewayImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ExclusiveGatewayImpl.java (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ExclusiveGatewayImpl.java 2008-10-01 13:18:18 UTC (rev 2457)
@@ -0,0 +1,213 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.model;
+
+//$Id$
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.persistence.Entity;
+import javax.persistence.Transient;
+
+import org.jbpm.api.model.Expression;
+import org.jbpm.api.model.Node;
+import org.jbpm.api.model.SequenceFlow;
+import org.jbpm.api.model.SequenceFlow.ConditionType;
+import org.jbpm.api.runtime.ExecutionHandler;
+import org.jbpm.api.runtime.FlowHandler;
+import org.jbpm.api.runtime.Token;
+import org.jbpm.api.runtime.TokenExecutor;
+import org.jbpm.ri.runtime.ExpressionEvaluator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * A point in the workflow process where, based on a decision or workflow control data, one of several branches is
+ * chosen.
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 08-Jul-2008
+ */
+@Entity(name = "ExclusiveGateway")
+public class ExclusiveGatewayImpl extends GatewayImpl
+{
+ private static final long serialVersionUID = 1L;
+
+ // provide logging
+ final static Logger log = LoggerFactory.getLogger(ExclusiveGatewayImpl.class);
+
+ @Transient
+ private Set<SequenceFlow> outstandingFlows;
+
+ public ExclusiveGatewayImpl(String name)
+ {
+ super(name, GatewayType.Exclusive);
+ }
+
+ @Override
+ protected ExecutionHandler getDefaultExecutionHandler()
+ {
+ final Node thisNode = this;
+ final ExecutionHandler superExecHandler = super.getDefaultExecutionHandler();
+
+ return new ExecutionHandler()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void execute(Token token)
+ {
+ // Call the super default handler
+ superExecHandler.execute(token);
+
+ // Multiple incomingFlows must be synchronized
+ if (outstandingFlows == null)
+ outstandingFlows = new HashSet<SequenceFlow>(inFlows);
+
+ SequenceFlow flow = token.getFlow();
+ outstandingFlows.remove(flow);
+ }
+
+ @Override
+ public Node getNode()
+ {
+ return thisNode;
+ }
+
+ @Override
+ public void setNode(Node node)
+ {
+ }
+ };
+ }
+
+ @Override
+ protected FlowHandler getDefaultFlowHandler()
+ {
+ final Node thisNode = this;
+ return new FlowHandler()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void execute(TokenExecutor tokenExecutor, Token token)
+ {
+ Node sourceRef = token.getFlow().getSourceRef();
+
+ // Schedule the first token that arrives
+ if (token == receivedTokens.get(0))
+ {
+ log.debug("Propagate token comming from: " + sourceRef);
+ SequenceFlow selectedGate = getSelectedGate(token);
+ tokenExecutor.move(token, selectedGate);
+ }
+ // Ignore all other tokens
+ else
+ {
+ log.debug("Ignore token comming from: " + sourceRef);
+ tokenExecutor.destroy(token);
+ }
+
+ // Reset the gateway
+ if (outstandingFlows.size() == 0)
+ {
+ reset();
+ }
+ }
+
+ @Override
+ public Node getNode()
+ {
+ return thisNode;
+ }
+
+ @Override
+ public void setNode(Node node)
+ {
+ }
+ };
+ }
+
+ @Override
+ protected void reset()
+ {
+ super.reset();
+ outstandingFlows = null;
+ }
+
+ // Get a single selected gate which' condition evaluates to TRUE
+ // Fall back to the default gate if there is one
+ // Choke if there is no selected gate
+ private SequenceFlow getSelectedGate(Token token)
+ {
+ SequenceFlow selectedGate = null;
+ for (SequenceFlow auxGate : getGates())
+ {
+ SequenceFlow seqFlow = auxGate;
+ if (seqFlow.getConditionType() == ConditionType.Expression)
+ {
+ Expression expr = seqFlow.getConditionExpression();
+ ExpressionEvaluator exprEvaluator = new ExpressionEvaluator(expr);
+ if ((Boolean)exprEvaluator.evaluateExpression(token))
+ {
+ selectedGate = auxGate;
+ break;
+ }
+ }
+ }
+
+ // Use to the default gate if there is one
+ if (selectedGate == null)
+ {
+ for (SequenceFlow auxGate : getGates())
+ {
+ SequenceFlow seqFlow = auxGate;
+ if (seqFlow.getConditionType() == ConditionType.Default)
+ {
+ selectedGate = auxGate;
+ break;
+ }
+ }
+ }
+
+ // Fallback to the single outgoing gate that is not conditional
+ if (selectedGate == null && getGates().size() == 1)
+ {
+ SequenceFlow auxGate = getGates().get(0);
+ SequenceFlow seqFlow = auxGate;
+ if (seqFlow.getConditionType() == ConditionType.None)
+ {
+ selectedGate = auxGate;
+ }
+ }
+
+ if (selectedGate == null)
+ throw new IllegalStateException("Cannot select applicable gate in: " + this);
+
+ return selectedGate;
+ }
+
+ public String toString()
+ {
+ return "ExclusiveGateway[" + getName() + "]";
+ }
+}
\ No newline at end of file
Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ExclusiveGatewayImpl.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ExpressionImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ExpressionImpl.java 2008-10-01 03:42:57 UTC (rev 2456)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ExpressionImpl.java 2008-10-01 13:18:18 UTC (rev 2457)
@@ -58,6 +58,10 @@
this.lang = lang;
}
+ // Persistence ctor
+ protected ExpressionImpl()
+ {
+ }
public ExpressionLanguage getExpressionLanguage()
{
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/GatewayImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/GatewayImpl.java 2008-10-01 03:42:57 UTC (rev 2456)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/GatewayImpl.java 2008-10-01 13:18:18 UTC (rev 2457)
@@ -23,16 +23,28 @@
//$Id$
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.management.ObjectName;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Transient;
import org.jbpm.api.Constants;
+import org.jbpm.api.client.ProcessEngine;
import org.jbpm.api.model.Gateway;
+import org.jbpm.api.model.Node;
import org.jbpm.api.model.SequenceFlow;
+import org.jbpm.api.model.Signal;
import org.jbpm.api.model.SequenceFlow.ConditionType;
import org.jbpm.api.model.builder.ObjectNameFactory;
+import org.jbpm.api.runtime.ExecutionHandler;
+import org.jbpm.api.runtime.SignalHandler;
+import org.jbpm.api.runtime.Token;
+import org.jbpm.api.service.SignalService;
import org.jbpm.ri.model.builder.MultipleInFlowSupport;
import org.jbpm.ri.model.builder.MultipleOutFlowSupport;
@@ -43,14 +55,27 @@
* @author thomas.diesler(a)jboss.com
* @since 08-Jul-2008
*/
+@MappedSuperclass
public abstract class GatewayImpl extends NodeImpl implements Gateway, MultipleOutFlowSupport, MultipleInFlowSupport
{
// provide serial version UID
private static final long serialVersionUID = 1L;
- public GatewayImpl(String name)
+ @Enumerated(EnumType.STRING)
+ protected GatewayType gatewayType;
+
+ // The list of flows from which a token is expected
+ @Transient
+ protected List<SequenceFlow> expectedFlows;
+
+ // The list of received tokens
+ @Transient
+ protected List<Token> receivedTokens;
+
+ public GatewayImpl(String name, GatewayType gatewayType)
{
super(name);
+ this.gatewayType = gatewayType;
}
@Override
@@ -62,6 +87,24 @@
return oname;
}
+ @Override
+ public GatewayType getGatewayType()
+ {
+ return gatewayType;
+ }
+
+ @Override
+ public void addOutFlow(SequenceFlowImpl outFlow)
+ {
+ outFlows.add(outFlow);
+ }
+
+ @Override
+ public void addInFlow(SequenceFlowImpl inFlow)
+ {
+ inFlows.add(inFlow);
+ }
+
public List<SequenceFlow> getGates()
{
return Collections.unmodifiableList(outFlows);
@@ -94,4 +137,92 @@
}
return gate;
}
+
+ protected void reset()
+ {
+ expectedFlows = null;
+ receivedTokens = null;
+ }
+
+ @Override
+ protected ExecutionHandler getDefaultExecutionHandler()
+ {
+ final Node thisNode = this;
+ return new ExecutionHandler()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void execute(Token token)
+ {
+ // Initialize the gateway
+ if (expectedFlows == null)
+ {
+ expectedFlows = new ArrayList<SequenceFlow>(inFlows);
+ receivedTokens = new ArrayList<Token>();
+ }
+
+ // Check that token from flow is valid
+ SequenceFlow flow = token.getFlow();
+ if (expectedFlows.contains(flow) == false)
+ throw new IllegalStateException("Unexpected token from: " + flow);
+
+ // Call custom execution handler
+ ExecutionHandler exHandler = getExecutionHandler(false);
+ if (exHandler != null)
+ exHandler.execute(token);
+
+ // Remove the flow from the expected list
+ expectedFlows.remove(flow);
+
+ // Store the received token for processing in the FlowHandler
+ receivedTokens.add(token);
+ }
+
+ @Override
+ public Node getNode()
+ {
+ return thisNode;
+ }
+
+ @Override
+ public void setNode(Node node)
+ {
+ }
+ };
+ }
+
+ @Override
+ protected SignalHandler getDefaultSignalHandler()
+ {
+ final Node thisNode = this;
+ return new SignalHandler()
+ {
+ private static final long serialVersionUID = 1L;
+
+ ProcessEngine engine = getProcess().getProcessEngine();
+ SignalService sigService = engine.getService(SignalService.class);
+
+ public void throwEnterSignal(Token token)
+ {
+ Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_GATEWAY_ENTER);
+ sigService.throwSignal(signal);
+ }
+
+ public void throwExitSignal(Token token)
+ {
+ Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_GATEWAY_EXIT);
+ sigService.throwSignal(signal);
+ }
+
+ @Override
+ public Node getNode()
+ {
+ return thisNode;
+ }
+ @Override
+ public void setNode(Node node)
+ {
+ }
+ };
+ }
}
\ No newline at end of file
Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/InclusiveGatewayImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/InclusiveGatewayImpl.java (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/InclusiveGatewayImpl.java 2008-10-01 13:18:18 UTC (rev 2457)
@@ -0,0 +1,195 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.model;
+
+//$Id$
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.persistence.Entity;
+
+import org.jbpm.api.model.Expression;
+import org.jbpm.api.model.Expression.ExpressionLanguage;
+import org.jbpm.api.model.Node;
+import org.jbpm.api.model.SequenceFlow;
+import org.jbpm.api.model.SequenceFlow.ConditionType;
+import org.jbpm.api.runtime.ExecutionContext;
+import org.jbpm.api.runtime.FlowHandler;
+import org.jbpm.api.runtime.Token;
+import org.jbpm.api.runtime.TokenExecutor;
+import org.jbpm.api.runtime.Attachments.Key;
+import org.mvel.MVEL;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This Decision represents a branching point where Alternatives are based on conditional expressions contained within
+ * outgoing Sequence Flow. However, in this case, the True evaluation of one condition expression does not exclude the
+ * evaluation of other condition expressions. All Sequence Flow with a True evaluation will be traversed by a Token.
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 08-Jul-2008
+ */
+@Entity(name = "InclusiveGateway")
+public class InclusiveGatewayImpl extends GatewayImpl
+{
+ private static final long serialVersionUID = 1L;
+
+ // provide logging
+ final static Logger log = LoggerFactory.getLogger(InclusiveGatewayImpl.class);
+
+ public InclusiveGatewayImpl(String name)
+ {
+ super(name, GatewayType.Inclusive);
+ }
+
+ @Override
+ protected FlowHandler getDefaultFlowHandler()
+ {
+ final Node thisNode = this;
+ return new FlowHandler()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void execute(TokenExecutor tokenExecutor, Token token)
+ {
+ Node sourceRef = token.getFlow().getSourceRef();
+ log.debug("Propagate token comming from: " + sourceRef);
+
+ // Get the applicable gates
+ List<SequenceFlow> applicableGates = getApplicableGates(token);
+ log.debug("applicableGates: " + applicableGates);
+
+ if (applicableGates.size() == 1)
+ {
+ SequenceFlow outFlow = applicableGates.get(0);
+ tokenExecutor.move(token, outFlow);
+ }
+ else
+ {
+ List<Token> outTokens = new ArrayList<Token>();
+ for (SequenceFlow auxGate : applicableGates)
+ {
+ SequenceFlow outFlow = auxGate;
+ Token outToken = token.copyToken();
+ tokenExecutor.create(outToken, outFlow);
+ outTokens.add(outToken);
+ }
+ for (Token outToken : outTokens)
+ {
+ tokenExecutor.start(outToken);
+ }
+ }
+
+ // Destroy the incomming token if there are
+ // more than one applicable gates
+ if (applicableGates.size() > 1)
+ tokenExecutor.destroy(token);
+ }
+
+ @Override
+ public Node getNode()
+ {
+ return thisNode;
+ }
+
+ @Override
+ public void setNode(Node node)
+ {
+ }
+ };
+ }
+
+ // Get applicable gates which' condition evaluates to TRUE
+ // Fall back to the default gate if there is one
+ // Choke if there is no applicable gate
+ private List<SequenceFlow> getApplicableGates(Token token)
+ {
+ List<SequenceFlow> applicableGates = new ArrayList<SequenceFlow>();
+ for (SequenceFlow auxGate : getGates())
+ {
+ SequenceFlow seqFlow = auxGate;
+ if (seqFlow.getConditionType() == ConditionType.Expression)
+ {
+ Expression expr = seqFlow.getConditionExpression();
+ if (expr.getExpressionLanguage() == ExpressionLanguage.MVEL)
+ {
+ String mvel = expr.getExpressionBody();
+ ExecutionContext exContext = token.getExecutionContext();
+ Map<String, Object> vars = new HashMap<String, Object>();
+ for (Key key : exContext.getAttachmentKeys())
+ {
+ String name = key.getNamePart();
+ Object value = exContext.getAttachment(name);
+ vars.put(name, value);
+ }
+ Boolean result = (Boolean)MVEL.eval(mvel, vars);
+ if (result == true)
+ {
+ applicableGates.add(auxGate);
+ }
+ }
+ else
+ {
+ throw new IllegalStateException("Unsupported expression language: " + expr.getExpressionLanguage());
+ }
+ }
+ }
+
+ // Use to the default gate if there is one
+ if (applicableGates.size() == 0)
+ {
+ for (SequenceFlow auxGate : getGates())
+ {
+ SequenceFlow seqFlow = auxGate;
+ if (seqFlow.getConditionType() == ConditionType.Default)
+ {
+ applicableGates.add(auxGate);
+ }
+ }
+ }
+
+ // Fallback to the single outgoing gate that is not conditional
+ if (applicableGates.size() == 0 && getGates().size() == 1)
+ {
+ SequenceFlow auxGate = getGates().get(0);
+ SequenceFlow seqFlow = auxGate;
+ if (seqFlow.getConditionType() == ConditionType.None)
+ {
+ applicableGates.add(auxGate);
+ }
+ }
+
+ if (applicableGates.size() == 0)
+ throw new IllegalStateException("Cannot select applicable gate in: " + this);
+
+ return applicableGates;
+ }
+
+ public String toString()
+ {
+ return "InclusiveGateway[" + getName() + "]";
+ }
+}
\ No newline at end of file
Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/InclusiveGatewayImpl.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/NodeImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/NodeImpl.java 2008-10-01 03:42:57 UTC (rev 2456)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/NodeImpl.java 2008-10-01 13:18:18 UTC (rev 2457)
@@ -392,14 +392,6 @@
throw new InvalidProcessException("Dead end node: " + this);
}
- /**
- * Reset the Node's state
- */
- public void reset()
- {
- // noting to do
- }
-
private void initFlow(Process proc, SequenceFlowImpl flow)
{
if (flow != null)
Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ParallelGatewayImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ParallelGatewayImpl.java (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ParallelGatewayImpl.java 2008-10-01 13:18:18 UTC (rev 2457)
@@ -0,0 +1,207 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.model;
+
+//$Id$
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.persistence.Entity;
+import javax.persistence.Transient;
+
+import org.jbpm.api.model.Node;
+import org.jbpm.api.model.SequenceFlow;
+import org.jbpm.api.runtime.ExecutionHandler;
+import org.jbpm.api.runtime.FlowHandler;
+import org.jbpm.api.runtime.Token;
+import org.jbpm.api.runtime.TokenExecutor;
+import org.jbpm.ri.runtime.TokenImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * Parallel Gateway is required when two or more Activities need to be executed in parallel.
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 08-Jul-2008
+ */
+@Entity(name = "ParallelGateway")
+public class ParallelGatewayImpl extends GatewayImpl
+{
+ private static final long serialVersionUID = 1L;
+
+ // provide logging
+ final static Logger log = LoggerFactory.getLogger(ParallelGatewayImpl.class);
+
+ @Transient
+ private Set<SequenceFlow> outstandingFlows;
+
+ @Transient
+ private Set<Token> mergeTokens;
+
+ public ParallelGatewayImpl(String name)
+ {
+ super(name, GatewayType.Parallel);
+ }
+
+ @Override
+ protected ExecutionHandler getDefaultExecutionHandler()
+ {
+ final Node thisNode = this;
+ final ExecutionHandler superExecHandler = super.getDefaultExecutionHandler();
+
+ return new ExecutionHandler()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void execute(Token token)
+ {
+ // Call the super default handler
+ superExecHandler.execute(token);
+
+ // Multiple incomingFlows must be synchronized
+ if (outstandingFlows == null)
+ {
+ outstandingFlows = new HashSet<SequenceFlow>(inFlows);
+ mergeTokens = new HashSet<Token>();
+ }
+
+ SequenceFlow flow = token.getFlow();
+ outstandingFlows.remove(flow);
+ mergeTokens.add(token);
+ }
+
+ @Override
+ public Node getNode()
+ {
+ return thisNode;
+ }
+
+ @Override
+ public void setNode(Node node)
+ {
+ }
+ };
+ }
+
+ @Override
+ protected FlowHandler getDefaultFlowHandler()
+ {
+ final Node thisNode = this;
+ return new FlowHandler()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void execute(TokenExecutor tokenExecutor, Token token)
+ {
+ // In any case, the incomming token is not propagated
+ tokenExecutor.suspend(token);
+
+ // If the gateway has a single incomming flow the outgoing token is the incomming token
+ Token outToken = (getInFlows().size() == 1 ? token : null);
+
+ // The outgoing token is the merge of all incomming tokens
+ if (outToken == null)
+ {
+ // If there are no more outstanding flows
+ if (outstandingFlows.size() == 0)
+ {
+ // Merge the tokens together and submit the merged tokens
+ outToken = getMergedTokens();
+ }
+
+ // There are outstanding flows
+ else if (outstandingFlows.size() > 0)
+ {
+ log.debug("Waiting for " + outstandingFlows + " in gateway: " + this);
+ }
+ }
+
+ // Schedule the outgoing token
+ if (outToken != null)
+ {
+ // Start a copy of the outgoing token for every gate
+ List<Token> outTokens = new ArrayList<Token>();
+ for(SequenceFlow auxGate : getGates())
+ {
+ SequenceFlow outFlow = auxGate;
+ outToken = outToken.copyToken();
+ tokenExecutor.create(outToken, outFlow);
+ outTokens.add(outToken);
+ }
+ for (Token auxToken : outTokens)
+ {
+ tokenExecutor.start(auxToken);
+ }
+
+ // Destroy the received tokens
+ for (Token auxToken : receivedTokens)
+ {
+ tokenExecutor.destroy(auxToken);
+ }
+
+ // Reset the gateway
+ reset();
+ }
+ }
+
+ @Override
+ public Node getNode()
+ {
+ return thisNode;
+ }
+
+ @Override
+ public void setNode(Node node)
+ {
+ }
+ };
+ }
+
+ @Override
+ public void reset()
+ {
+ super.reset();
+ outstandingFlows = null;
+ mergeTokens = null;
+ }
+
+ private Token getMergedTokens()
+ {
+ TokenImpl mergedToken = new TokenImpl(null);
+ for (Token auxToken : mergeTokens)
+ {
+ log.debug("mergeToken: " + auxToken);
+ mergedToken.mergeToken(auxToken);
+ }
+ return mergedToken;
+ }
+
+ public String toString()
+ {
+ return "ParallelGateway[" + getName() + "]";
+ }
+}
\ No newline at end of file
Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ParallelGatewayImpl.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/GatewayBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/GatewayBuilderImpl.java 2008-10-01 03:42:57 UTC (rev 2456)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/GatewayBuilderImpl.java 2008-10-01 13:18:18 UTC (rev 2457)
@@ -23,10 +23,13 @@
//$Id$
-import org.jbpm.api.NotImplementedException;
import org.jbpm.api.model.Gateway;
import org.jbpm.api.model.Expression.ExpressionLanguage;
+import org.jbpm.api.model.SequenceFlow.ConditionType;
import org.jbpm.api.model.builder.GatewayBuilder;
+import org.jbpm.ri.model.ExpressionImpl;
+import org.jbpm.ri.model.GatewayImpl;
+import org.jbpm.ri.model.SequenceFlowImpl;
/**
* The GatewayBuilder can be used to build a {@link Gateway} dynamically.
@@ -43,16 +46,32 @@
public GatewayBuilder addConditionalGate(String targetName, ExpressionLanguage exprLang, String exprBody)
{
- throw new NotImplementedException();
+ GatewayImpl gatewayImpl = getGateway();
+ SequenceFlowImpl outFlow = new SequenceFlowImpl(targetName, ConditionType.Expression, new ExpressionImpl(exprLang, exprBody));
+ gatewayImpl.addOutFlow(outFlow);
+ return this;
}
public GatewayBuilder addDefaultGate(String targetName)
{
- throw new NotImplementedException();
+ GatewayImpl gatewayImpl = getGateway();
+ SequenceFlowImpl outFlow = new SequenceFlowImpl(targetName, ConditionType.Default, null);
+ gatewayImpl.addOutFlow(outFlow);
+ return this;
}
public GatewayBuilder addGate(String targetName)
{
- throw new NotImplementedException();
+ GatewayImpl gatewayImpl = getGateway();
+ SequenceFlowImpl outFlow = new SequenceFlowImpl(targetName);
+ gatewayImpl.addOutFlow(outFlow);
+ return this;
}
+
+ private GatewayImpl getGateway()
+ {
+ if (node instanceof GatewayImpl == false)
+ throw new IllegalStateException("Last added flow object is not an Gateway: " + node);
+ return (GatewayImpl)node;
+ }
}
\ No newline at end of file
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java 2008-10-01 03:42:57 UTC (rev 2456)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java 2008-10-01 13:18:18 UTC (rev 2457)
@@ -40,10 +40,14 @@
import org.jbpm.api.runtime.FlowHandler;
import org.jbpm.api.runtime.SignalHandler;
import org.jbpm.ri.model.AssignmentImpl;
+import org.jbpm.ri.model.ComplexGatewayImpl;
import org.jbpm.ri.model.EndEventImpl;
import org.jbpm.ri.model.EventImpl;
+import org.jbpm.ri.model.ExclusiveGatewayImpl;
import org.jbpm.ri.model.ExpressionImpl;
+import org.jbpm.ri.model.InclusiveGatewayImpl;
import org.jbpm.ri.model.NodeImpl;
+import org.jbpm.ri.model.ParallelGatewayImpl;
import org.jbpm.ri.model.ProcessImpl;
import org.jbpm.ri.model.PropertyImpl;
import org.jbpm.ri.model.ReceiveTaskImpl;
@@ -194,19 +198,19 @@
{
if (GatewayType.Exclusive == type)
{
- throw new NotImplementedException();
+ node = new ExclusiveGatewayImpl(name);
}
else if (GatewayType.Inclusive == type)
{
- throw new NotImplementedException();
+ node = new InclusiveGatewayImpl(name);
}
else if (GatewayType.Parallel == type)
{
- throw new NotImplementedException();
+ node = new ParallelGatewayImpl(name);
}
else if (GatewayType.Complex == type)
{
- throw new NotImplementedException();
+ node = new ComplexGatewayImpl(name);
}
addNode(node);
return new GatewayBuilderImpl(this);
Modified: projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml
===================================================================
--- projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml 2008-10-01 03:42:57 UTC (rev 2456)
+++ projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml 2008-10-01 13:18:18 UTC (rev 2457)
@@ -24,9 +24,14 @@
<property name="annotatedClasses">
<set elementClass="java.lang.String">
<value>org.jbpm.ri.model.AbstractElementImpl</value>
+ <value>org.jbpm.ri.model.ComplexGatewayImpl</value>
<value>org.jbpm.ri.model.EndEventImpl</value>
+ <value>org.jbpm.ri.model.ExclusiveGatewayImpl</value>
+ <value>org.jbpm.ri.model.GatewayImpl</value>
+ <value>org.jbpm.ri.model.InclusiveGatewayImpl</value>
<value>org.jbpm.ri.model.MessageImpl</value>
<value>org.jbpm.ri.model.NodeImpl</value>
+ <value>org.jbpm.ri.model.ParallelGatewayImpl</value>
<value>org.jbpm.ri.model.ParticipantImpl</value>
<value>org.jbpm.ri.model.ProcessImpl</value>
<value>org.jbpm.ri.model.PropertyImpl</value>
15 years, 7 months
JBoss JBPM SVN: r2456 - in projects/spec/trunk/modules: api/src/main/java/org/jbpm/api/service and 7 other directories.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-09-30 23:42:57 -0400 (Tue, 30 Sep 2008)
New Revision: 2456
Added:
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/MessageBuilderServiceImpl.java
Removed:
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskExecutionHandler.java
Modified:
projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/client/MessageListener.java
projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/MessageService.java
projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessService.java
projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java
projects/spec/trunk/modules/cts/pom.xml
projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/ReceiveTaskTest.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/MessageImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/TaskImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java
projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/TaskBuilderImpl.java
projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml
Log:
ReceiveTaskTest - pass
Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/client/MessageListener.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/client/MessageListener.java 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/client/MessageListener.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -38,7 +38,7 @@
/**
* Get the id for this listener
*/
- ObjectName getID();
+ ObjectName getKey();
/**
* Catch a message from the process that this listener is registered with
Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/MessageService.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/MessageService.java 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/MessageService.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -75,11 +75,11 @@
{
synchronized (listeners)
{
- if (hasMessageListener(listener.getID()))
- throw new IllegalStateException("Listener already registered: " + listener.getID());
+ if (hasMessageListener(listener.getKey()))
+ throw new IllegalStateException("Listener already registered: " + listener.getKey());
- log.debug("addMessageListener: " + listener.getID());
- listeners.put(listener.getID(), listener);
+ log.debug("addMessageListener: " + listener.getKey());
+ listeners.put(listener.getKey(), listener);
}
}
Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessService.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessService.java 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessService.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -103,13 +103,19 @@
*/
public boolean unregisterProcess(Process proc)
{
- log.debug("unregisterProcess: " + proc);
-
- // Delete the process through the PersistenceService
- PersistenceService dbService = getProcessEngine().getService(PersistenceService.class);
- dbService.deleteProcess(proc);
-
- return registeredProcs.remove(proc.getKey()) != null;
+ boolean removed = false;
+ if (registeredProcs.containsKey(proc.getKey()))
+ {
+ log.debug("unregisterProcess: " + proc);
+
+ // Delete the process through the PersistenceService
+ PersistenceService dbService = getProcessEngine().getService(PersistenceService.class);
+ dbService.deleteProcess(proc);
+
+ registeredProcs.remove(proc.getKey());
+ removed = true;
+ }
+ return removed;
}
/**
Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -67,8 +67,6 @@
private MessageListener messageListener;
// The messages caught by this test case
private List<Message> messages = new ArrayList<Message>();
- // The last fatal tear down error
- private static String fatalTearDownError;
protected ProcessEngine getProcessEngine()
{
@@ -83,10 +81,6 @@
ProcessEngine engine = getProcessEngine();
- // Stop the test run if there are fatal tear down errors
- if (fatalTearDownError != null)
- System.exit(1);
-
// Setup the SignalListener
clearAllSignalListeners();
SignalService sigService = engine.getService(SignalService.class);
@@ -120,27 +114,27 @@
Set<Process> procs = procManager.getProcesses();
if (procs.size() > 0)
{
- fatalTearDownError = "Registered processes on tear down of " + getName() + ": " + procs;
- System.out.println(fatalTearDownError);
- log.error(fatalTearDownError);
+ String logMsg = "Registered processes on tear down of " + getName() + ": " + procs;
+ System.out.println(logMsg);
+ log.error(logMsg);
}
// Check that there are no registered signal listeners left
Set<SignalListener> sigListeners = sigService.getSignalListeners();
if (sigListeners.size() > 0)
{
- fatalTearDownError = "Registered signal listeners on tear down of " + getName() + ": " + sigListeners;
- System.out.println(fatalTearDownError);
- log.error(fatalTearDownError);
+ String logMsg = "Registered signal listeners on tear down of " + getName() + ": " + sigListeners;
+ System.out.println(logMsg);
+ log.error(logMsg);
}
// Check that there are no registered message listeners left
Set<MessageListener> msgListeners = msgService.getMessageListeners();
if (msgListeners.size() > 0)
{
- fatalTearDownError = "Registered message listeners on tear down of " + getName() + ": " + msgListeners;
- System.out.println(fatalTearDownError);
- log.error(fatalTearDownError);
+ String logMsg = "Registered message listeners on tear down of " + getName() + ": " + msgListeners;
+ System.out.println(logMsg);
+ log.error(logMsg);
}
super.tearDown();
@@ -223,7 +217,7 @@
Set<MessageListener> msgListeners = msgService.getMessageListeners();
for (MessageListener msgListener : msgListeners)
{
- msgService.removeMessageListener(msgListener.getID());
+ msgService.removeMessageListener(msgListener.getKey());
}
}
@@ -261,7 +255,7 @@
{
messageListener = new MessageListener()
{
- public ObjectName getID()
+ public ObjectName getKey()
{
return getTestID();
}
Modified: projects/spec/trunk/modules/cts/pom.xml
===================================================================
--- projects/spec/trunk/modules/cts/pom.xml 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/cts/pom.xml 2008-10-01 03:42:57 UTC (rev 2456)
@@ -78,7 +78,6 @@
<exclude>org/jbpm/test/cts/gateway/parallel/ParallelGatewaySplitTest.java</exclude>
<exclude>org/jbpm/test/cts/node/NodeInputSetTest.java</exclude>
<exclude>org/jbpm/test/cts/node/NodeOutputSetTest.java</exclude>
- <exclude>org/jbpm/test/cts/task/ReceiveTaskTest.java</exclude>
<exclude>org/jbpm/test/pattern/control/exclusivechoice/ExclusiveChoiceTest.java</exclude>
<exclude>org/jbpm/test/pattern/control/multichoice/MultiChoiceTest.java</exclude>
<exclude>org/jbpm/test/pattern/control/parallelsplit/ParallelSplitTest.java</exclude>
Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/ReceiveTaskTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/ReceiveTaskTest.java 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/ReceiveTaskTest.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -25,6 +25,8 @@
import java.io.IOException;
+import javax.management.ObjectName;
+
import org.jbpm.api.InvalidProcessException;
import org.jbpm.api.client.SignalListener;
import org.jbpm.api.model.Message;
@@ -87,15 +89,22 @@
{
Process proc = getProcess();
ProcessService procService = ProcessService.locateProcessService();
- procService.registerProcess(proc);
+
+ ObjectName procID = procService.registerProcess(proc);
+ try
+ {
+ // Send the message before the process is started
+ MessageService msgManager = MessageService.locateMessageService();
+ msgManager.sendMessage(procID, "TaskA", getMessage());
- // Send the message before the process is started
- MessageService msgManager = MessageService.locateMessageService();
- msgManager.sendMessage(proc.getKey(), "TaskA", getMessage());
+ proc.startProcess();
+ proc.waitForEnd(1000);
+ }
+ finally
+ {
+ procService.unregisterProcess(proc);
+ }
- proc.startProcess();
- proc.waitForEnd();
-
Message endMsg = getMessages().get(0);
assertNotNull("End message expected", endMsg);
assertEquals("bar", endMsg.getProperty("foo").getValue());
@@ -130,7 +139,7 @@
try
{
proc.startProcess();
- proc.waitForEnd();
+ proc.waitForEnd(1000);
}
finally
{
@@ -152,10 +161,9 @@
protected Process getProcess() throws IOException
{
ProcessBuilder procBuilder = ProcessBuilderService.locateProcessBuilder();
- MessageBuilder msgBuilder = procBuilder.addProcess("ReceiveTaskTest").addProcessMessage("ReceiveTaskMessage");
- msgBuilder.addProperty("foo", null, true);
- msgBuilder = procBuilder.addProcessMessage("EndEventMessage");
- msgBuilder.addToRef(getTestID()).addProperty("foo", null, true);
+ procBuilder.addProcess("ReceiveTaskTest");
+ procBuilder.addProcessMessage("ReceiveTaskMessage").addProperty("foo", null, true);
+ procBuilder.addProcessMessage("EndEventMessage").addToRef(getTestID()).addProperty("foo", null, true);
procBuilder.addStartEvent("Start").addSequenceFlow("TaskA");
procBuilder.addTask("TaskA", TaskType.Receive).addMessageRef("ReceiveTaskMessage");
EventBuilder eventBuilder = procBuilder.addSequenceFlow("End").addEndEvent("End", EventDetailType.Message);
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/MessageImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/MessageImpl.java 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/MessageImpl.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -27,8 +27,13 @@
import java.util.Set;
import javax.persistence.Basic;
+import javax.persistence.CascadeType;
import javax.persistence.Entity;
-import javax.persistence.Transient;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
import org.jbpm.api.model.Message;
import org.jbpm.api.model.Participant;
@@ -47,13 +52,20 @@
{
private static final long serialVersionUID = 1L;
+ @Id @GeneratedValue
+ @SuppressWarnings("unused")
+ private int id;
+
@Basic
private String name;
- @Transient
+
+ @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = ParticipantImpl.class)
private Participant fromRef;
- @Transient
+
+ @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = ParticipantImpl.class)
private Participant toRef;
- @Transient
+
+ @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = PropertyImpl.class)
private Set<Property> props = new HashSet<Property>();
public MessageImpl(String name)
@@ -64,7 +76,7 @@
this.name = name;
}
- public MessageImpl(String name, Participant targetID, Participant sourceID)
+ public MessageImpl(String name, ParticipantImpl targetID, ParticipantImpl sourceID)
{
this(name);
this.toRef = targetID;
Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -0,0 +1,211 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.model;
+
+//$Id$
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.Entity;
+import javax.persistence.Transient;
+
+import org.jbpm.api.InvalidProcessException;
+import org.jbpm.api.NotImplementedException;
+import org.jbpm.api.client.MessageListener;
+import org.jbpm.api.model.Message;
+import org.jbpm.api.model.Node;
+import org.jbpm.api.model.Process;
+import org.jbpm.api.runtime.ExecutionContext;
+import org.jbpm.api.runtime.ExecutionHandler;
+import org.jbpm.api.runtime.FlowHandler;
+import org.jbpm.api.runtime.Token;
+import org.jbpm.api.runtime.TokenExecutor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Task that corresponds to the TaskType.None
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 08-Jul-2008
+ */
+@Entity(name = "ReceiveTask")
+public class ReceiveTaskImpl extends TaskImpl implements MessageListener
+{
+ private static final long serialVersionUID = 1L;
+
+ // provide logging
+ final static Logger log = LoggerFactory.getLogger(ReceiveTaskImpl.class);
+
+ @Transient
+ protected MessageImpl messageRef;
+
+ @Transient
+ private List<Message> receivedMessages = new ArrayList<Message>();
+
+ @Transient
+ private List<Token> suspendedTokens = new ArrayList<Token>();
+
+ public ReceiveTaskImpl(String name)
+ {
+ super(name, TaskType.Receive);
+ }
+
+ // Persistence ctor
+ protected ReceiveTaskImpl()
+ {
+ }
+
+ @Transient
+ public boolean isInstantiate()
+ {
+ throw new NotImplementedException("JBPM-1648", "ReceiveTask Instantiate");
+ }
+
+ public Message getMessageRef()
+ {
+ return messageRef;
+ }
+
+ public void setMessageRef(MessageImpl message)
+ {
+ this.messageRef = message;
+ }
+
+ public synchronized void catchMessage(Message message)
+ {
+ String msgName = message.getName();
+ if (messageRef.getName().equals(msgName))
+ {
+ log.debug("catchMessage in " + this + " => " + message);
+ for (String propName : messageRef.getPropertyNames())
+ {
+ if (message.getProperty(propName) == null)
+ throw new IllegalArgumentException("Received message does not contain expected property: " + propName);
+ }
+ receivedMessages.add(message);
+
+ if (suspendedTokens.size() == 0)
+ {
+ log.debug("Suspend message: " + message);
+ }
+ else
+ {
+ Token token = suspendedTokens.remove(0);
+ ExecutionContext exContext = token.getExecutionContext();
+ TokenExecutor tokenExecutor = exContext.removeAttachment(TokenExecutor.class);
+ tokenExecutor.activate(token.getTokenID());
+ }
+ }
+ else
+ {
+ log.debug("Ignore unexpected message: " + message);
+ }
+ }
+
+ @Override
+ protected ExecutionHandler getDefaultExecutionHandler()
+ {
+ final Node thisNode = this;
+ return new ExecutionHandler()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void execute(Token token)
+ {
+ if (receivedMessages.size() > 0)
+ {
+ // Copy the expected properties from the
+ // received message to the execution context
+ Message msg = receivedMessages.get(0);
+ ExecutionContext exContext = token.getExecutionContext();
+ for (String key : messageRef.getPropertyNames())
+ {
+ Object value = msg.getProperty(key).getValue();
+ exContext.addAttachment(key, value);
+ }
+ }
+ }
+
+ @Override
+ public Node getNode()
+ {
+ return thisNode;
+ }
+
+ @Override
+ public void setNode(Node node)
+ {
+ }
+ };
+ }
+
+ @Override
+ protected FlowHandler getDefaultFlowHandler()
+ {
+ final Node thisNode = this;
+ return new FlowHandler()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void execute(TokenExecutor tokenExecutor, Token token)
+ {
+ if (receivedMessages.size() > 0)
+ {
+ receivedMessages.remove(0);
+ tokenExecutor.move(token, getOutFlow());
+ }
+ else
+ {
+ tokenExecutor.suspend(token);
+ ExecutionContext exContext = token.getExecutionContext();
+ exContext.addAttachment(TokenExecutor.class, tokenExecutor);
+ suspendedTokens.add(token);
+ }
+ }
+
+ @Override
+ public Node getNode()
+ {
+ return thisNode;
+ }
+
+ @Override
+ public void setNode(Node node)
+ {
+ }
+ };
+ }
+
+ @Override
+ protected void create(Process proc)
+ {
+ super.create(proc);
+
+ if (messageRef == null)
+ throw new InvalidProcessException("A message for the message ref attribute MUST be entered");
+
+ ProcessImpl procImpl = (ProcessImpl)proc;
+ procImpl.initializeMessageRef(messageRef);
+ }
+}
\ No newline at end of file
Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Deleted: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskExecutionHandler.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskExecutionHandler.java 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskExecutionHandler.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -1,56 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jbpm.ri.model;
-
-//$Id$
-
-import org.jbpm.api.model.Message;
-import org.jbpm.api.runtime.BasicNodeHandler;
-import org.jbpm.api.runtime.ExecutionHandler;
-import org.jbpm.api.runtime.Token;
-import org.jbpm.ri.runtime.MessageSender;
-
-/**
- * An ExecutionHandler that sends a Message
- *
- * @author thomas.diesler(a)jboss.com
- * @since 30-Sep-2008
- */
-public class SendTaskExecutionHandler extends BasicNodeHandler implements ExecutionHandler
-{
- private static final long serialVersionUID = 1L;
-
- public SendTaskExecutionHandler(TaskImpl taskImpl)
- {
- setNode(taskImpl);
- }
-
- @Override
- public void execute(Token token)
- {
- TaskImpl taskImpl = (TaskImpl)getNode();
- Message messageRef = taskImpl.getMessageRef();
- MessageSender messageSender = new MessageSender(taskImpl, messageRef);
- messageSender.sendMessage(token);
- }
-
-}
\ No newline at end of file
Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskImpl.java (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskImpl.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -0,0 +1,117 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.model;
+
+//$Id$
+
+import javax.persistence.Entity;
+import javax.persistence.Transient;
+
+import org.jbpm.api.InvalidProcessException;
+import org.jbpm.api.model.Message;
+import org.jbpm.api.model.Node;
+import org.jbpm.api.model.Process;
+import org.jbpm.api.runtime.ExecutionHandler;
+import org.jbpm.api.runtime.Token;
+import org.jbpm.ri.runtime.MessageSender;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Task that corresponds to the TaskType.None
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 08-Jul-2008
+ */
+@Entity(name = "SendTask")
+public class SendTaskImpl extends TaskImpl
+{
+ private static final long serialVersionUID = 1L;
+
+ // provide logging
+ final static Logger log = LoggerFactory.getLogger(SendTaskImpl.class);
+
+ @Transient
+ protected MessageImpl messageRef;
+
+ public SendTaskImpl(String name)
+ {
+ super(name, TaskType.Send);
+ }
+
+ // Persistence ctor
+ protected SendTaskImpl()
+ {
+ }
+
+ public Message getMessageRef()
+ {
+ return messageRef;
+ }
+
+ public void setMessageRef(MessageImpl message)
+ {
+ this.messageRef = message;
+ }
+
+ protected ExecutionHandler getDefaultExecutionHandler()
+ {
+ final SendTaskImpl thisNode = this;
+ return new ExecutionHandler()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void execute(Token token)
+ {
+ Message messageRef = thisNode.getMessageRef();
+ MessageSender messageSender = new MessageSender(thisNode, messageRef);
+ messageSender.sendMessage(token);
+ }
+
+ @Override
+ public Node getNode()
+ {
+ return thisNode;
+ }
+
+ @Override
+ public void setNode(Node node)
+ {
+ }
+ };
+ }
+
+ @Override
+ protected void create(Process proc)
+ {
+ super.create(proc);
+
+ if (messageRef == null)
+ throw new InvalidProcessException("A message for the message ref attribute MUST be entered");
+
+ ProcessImpl procImpl = (ProcessImpl)proc;
+ procImpl.initializeMessageRef(messageRef);
+
+ if (messageRef.getToRef() == null)
+ throw new IllegalArgumentException("Message target cannot be null for: " + this);
+ }
+}
\ No newline at end of file
Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskImpl.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/TaskImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/TaskImpl.java 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/TaskImpl.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -32,14 +32,11 @@
import org.jbpm.api.Constants;
import org.jbpm.api.InvalidProcessException;
import org.jbpm.api.client.ProcessEngine;
-import org.jbpm.api.model.Message;
import org.jbpm.api.model.Node;
-import org.jbpm.api.model.Process;
import org.jbpm.api.model.SequenceFlow;
import org.jbpm.api.model.Signal;
import org.jbpm.api.model.Task;
import org.jbpm.api.model.builder.ObjectNameFactory;
-import org.jbpm.api.runtime.ExecutionHandler;
import org.jbpm.api.runtime.SignalHandler;
import org.jbpm.api.runtime.Token;
import org.jbpm.api.service.SignalService;
@@ -62,11 +59,8 @@
private static final long serialVersionUID = 1L;
@Enumerated(EnumType.STRING)
- private TaskType taskType = TaskType.None;
+ protected TaskType taskType;
- @Transient
- private MessageImpl messageRef;
-
public TaskImpl(String name, TaskType taskType)
{
super(name);
@@ -121,36 +115,7 @@
outFlows.add(outFlow);
}
- public Message getMessageRef()
- {
- return messageRef;
- }
-
- public void setMessageRef(MessageImpl message)
- {
- this.messageRef = message;
- }
-
@Override
- protected ExecutionHandler getDefaultExecutionHandler()
- {
- ExecutionHandler execHandler;
- if (taskType == TaskType.Send)
- {
- execHandler = new SendTaskExecutionHandler(this);
- }
- else if (taskType == TaskType.Receive)
- {
- execHandler = super.getDefaultExecutionHandler();
- }
- else
- {
- execHandler = super.getDefaultExecutionHandler();
- }
- return execHandler;
- }
-
- @Override
protected SignalHandler getDefaultSignalHandler()
{
final Node thisNode = this;
@@ -185,26 +150,6 @@
};
}
- @Override
- protected void create(Process proc)
- {
- super.create(proc);
-
- if ((taskType == TaskType.Send || taskType == TaskType.Receive) && messageRef == null)
- throw new InvalidProcessException("A message for the message ref attribute MUST be entered");
- if (messageRef != null && taskType != TaskType.Send && taskType != TaskType.Receive)
- throw new InvalidProcessException("A task with a message ref must be of type 'Send' or 'Receive'");
-
- if (messageRef != null)
- {
- ProcessImpl procImpl = (ProcessImpl)proc;
- procImpl.initializeMessageRef(messageRef);
-
- if (messageRef.getToRef() == null)
- throw new IllegalArgumentException("Message target cannot be null for: " + this);
- }
- }
-
public String toString()
{
return "Task[" + getTaskType() + "," + getName() + "]";
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -46,6 +46,8 @@
import org.jbpm.ri.model.NodeImpl;
import org.jbpm.ri.model.ProcessImpl;
import org.jbpm.ri.model.PropertyImpl;
+import org.jbpm.ri.model.ReceiveTaskImpl;
+import org.jbpm.ri.model.SendTaskImpl;
import org.jbpm.ri.model.SequenceFlowImpl;
import org.jbpm.ri.model.StartEventImpl;
import org.jbpm.ri.model.TaskImpl;
@@ -158,11 +160,11 @@
}
else if (type == TaskType.Receive)
{
- node = new TaskImpl(name, TaskType.Receive);
+ node = new ReceiveTaskImpl(name);
}
else if (type == TaskType.Send)
{
- node = new TaskImpl(name, TaskType.Send);
+ node = new SendTaskImpl(name);
}
else if (type == TaskType.User)
{
Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/TaskBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/TaskBuilderImpl.java 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/TaskBuilderImpl.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -26,6 +26,8 @@
import org.jbpm.api.model.Task;
import org.jbpm.api.model.builder.TaskBuilder;
import org.jbpm.ri.model.MessageImpl;
+import org.jbpm.ri.model.ReceiveTaskImpl;
+import org.jbpm.ri.model.SendTaskImpl;
import org.jbpm.ri.model.TaskImpl;
/**
@@ -44,7 +46,20 @@
public TaskBuilder addMessageRef(String msgName)
{
TaskImpl taskImpl = getTask();
- taskImpl.setMessageRef(new MessageImpl(msgName));
+ if (taskImpl instanceof ReceiveTaskImpl)
+ {
+ ReceiveTaskImpl receiveTaskImpl = (ReceiveTaskImpl)taskImpl;
+ receiveTaskImpl.setMessageRef(new MessageImpl(msgName));
+ }
+ else if (taskImpl instanceof SendTaskImpl)
+ {
+ SendTaskImpl sendTaskImpl = (SendTaskImpl)taskImpl;
+ sendTaskImpl.setMessageRef(new MessageImpl(msgName));
+ }
+ else
+ {
+ throw new IllegalStateException("Cannot set a message ref on task: " + taskImpl);
+ }
return this;
}
Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/MessageBuilderServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/MessageBuilderServiceImpl.java (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/MessageBuilderServiceImpl.java 2008-10-01 03:42:57 UTC (rev 2456)
@@ -0,0 +1,51 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.service;
+
+// $Id$
+
+import org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.model.Message;
+import org.jbpm.api.model.builder.MessageBuilder;
+import org.jbpm.api.model.builder.MessageBuilderService;
+import org.jbpm.ri.model.builder.MessageBuilderImpl;
+
+/**
+ * The MessageBuilder can be used to build a {@link Message} dynamically.
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 17-Sep-2008
+ */
+public class MessageBuilderServiceImpl extends MessageBuilderService implements MutableService
+{
+ @Override
+ public void setProcessEngine(ProcessEngine engine)
+ {
+ super.setProcessEngine(engine);
+ }
+
+ @Override
+ public MessageBuilder getMessageBuilder()
+ {
+ return new MessageBuilderImpl();
+ }
+}
Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/MessageBuilderServiceImpl.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml
===================================================================
--- projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml 2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml 2008-10-01 03:42:57 UTC (rev 2456)
@@ -10,6 +10,7 @@
<set elementClass="org.jbpm.api.service.Service">
<inject bean="jBPMExecutionService" />
<inject bean="jBPMMessageService" />
+ <inject bean="jBPMMessageBuilderService" />
<inject bean="jBPMPersistenceService" />
<inject bean="jBPMProcessBuilderService" />
<inject bean="jBPMProcessService" />
@@ -24,9 +25,13 @@
<set elementClass="java.lang.String">
<value>org.jbpm.ri.model.AbstractElementImpl</value>
<value>org.jbpm.ri.model.EndEventImpl</value>
+ <value>org.jbpm.ri.model.MessageImpl</value>
<value>org.jbpm.ri.model.NodeImpl</value>
+ <value>org.jbpm.ri.model.ParticipantImpl</value>
<value>org.jbpm.ri.model.ProcessImpl</value>
<value>org.jbpm.ri.model.PropertyImpl</value>
+ <value>org.jbpm.ri.model.ReceiveTaskImpl</value>
+ <value>org.jbpm.ri.model.SendTaskImpl</value>
<value>org.jbpm.ri.model.SequenceFlowImpl</value>
<value>org.jbpm.ri.model.StartEventImpl</value>
<value>org.jbpm.ri.model.TaskImpl</value>
@@ -37,6 +42,7 @@
<!-- Other Services -->
<bean name="jBPMExecutionService" class="org.jbpm.ri.service.ExecutionServiceImpl" />
<bean name="jBPMMessageService" class="org.jbpm.ri.service.MessageServiceImpl" />
+ <bean name="jBPMMessageBuilderService" class="org.jbpm.ri.service.MessageBuilderServiceImpl" />
<bean name="jBPMProcessBuilderService" class="org.jbpm.ri.service.ProcessBuilderServiceImpl" />
<bean name="jBPMProcessService" class="org.jbpm.ri.service.ProcessServiceImpl" />
<bean name="jBPMSignalService" class="org.jbpm.ri.service.SignalServiceImpl" />
15 years, 7 months