/machinelearning/5.0.x/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/WorkItemWrapper.java

https://github.com/droolsjbpm/droolsjbpm-contributed-experiments · Java · 176 lines · 138 code · 18 blank · 20 comment · 41 complexity · 567bdc32a4de6bdde07655d81871e330 MD5 · raw file

  1. package org.drools.eclipse.flow.ruleflow.core;
  2. /*
  3. * Copyright 2005 JBoss Inc
  4. *
  5. * Licensed under the Apache License, Version 2.0 (the "License");
  6. * you may not use this file except in compliance with the License.
  7. * You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. import java.util.HashMap;
  18. import java.util.Map;
  19. import java.util.Set;
  20. import org.drools.eclipse.flow.common.editor.core.ElementConnection;
  21. import org.drools.eclipse.flow.common.editor.core.ElementWrapper;
  22. import org.drools.eclipse.flow.ruleflow.view.property.workitem.WorkItemParameterMappingPropertyDescriptor;
  23. import org.drools.eclipse.flow.ruleflow.view.property.workitem.WorkItemResultMappingPropertyDescriptor;
  24. import org.drools.process.core.ParameterDefinition;
  25. import org.drools.process.core.Work;
  26. import org.drools.process.core.WorkDefinition;
  27. import org.drools.process.core.datatype.DataType;
  28. import org.drools.process.core.impl.WorkImpl;
  29. import org.drools.workflow.core.Node;
  30. import org.drools.workflow.core.node.WorkItemNode;
  31. import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;
  32. import org.eclipse.ui.views.properties.IPropertyDescriptor;
  33. import org.eclipse.ui.views.properties.TextPropertyDescriptor;
  34. /**
  35. * Wrapper for a work item node.
  36. *
  37. * @author <a href="mailto:kris_verlaenen@hotmail.com">Kris Verlaenen</a>
  38. */
  39. public class WorkItemWrapper extends EventBasedNodeWrapper {
  40. public static final String WAIT_FOR_COMPLETION = "WaitForCompletion";
  41. public static final String RESULT_MAPPING = "ResultMapping";
  42. public static final String PARAMETER_MAPPING = "ParameterMapping";
  43. private static final long serialVersionUID = 400L;
  44. private WorkDefinition workDefinition;
  45. public WorkItemWrapper() {
  46. setNode(new WorkItemNode());
  47. }
  48. public WorkItemNode getWorkItemNode() {
  49. return (WorkItemNode) getNode();
  50. }
  51. public void setNode(Node node) {
  52. super.setNode(node);
  53. if (this.workDefinition != null) {
  54. Work work = getWorkItemNode().getWork();
  55. if (work == null) {
  56. work = new WorkImpl();
  57. work.setName(workDefinition.getName());
  58. getWorkItemNode().setWork(work);
  59. }
  60. work.setParameterDefinitions(workDefinition.getParameters());
  61. }
  62. }
  63. public void setWorkDefinition(WorkDefinition workDefinition) {
  64. this.workDefinition = workDefinition;
  65. Work work = getWorkItemNode().getWork();
  66. if (work == null) {
  67. work = new WorkImpl();
  68. work.setName(workDefinition.getName());
  69. getWorkItemNode().setWork(work);
  70. }
  71. work.setParameterDefinitions(workDefinition.getParameters());
  72. }
  73. public WorkDefinition getWorkDefinition() {
  74. return this.workDefinition;
  75. }
  76. private boolean workParameterExists(String parameterName) {
  77. if (workDefinition != null) {
  78. return workDefinition.getParameter(parameterName) != null;
  79. }
  80. return false;
  81. }
  82. protected void initDescriptors() {
  83. super.initDescriptors();
  84. Set<ParameterDefinition> parameters = workDefinition.getParameters();
  85. IPropertyDescriptor[] oldDescriptors = descriptors;
  86. descriptors = new IPropertyDescriptor[oldDescriptors.length + parameters.size() + 5];
  87. System.arraycopy(oldDescriptors, 0, descriptors, 0, oldDescriptors.length);
  88. int i = 0;
  89. for (ParameterDefinition def: parameters) {
  90. descriptors[oldDescriptors.length + (i++)] =
  91. new TextPropertyDescriptor(def.getName(), def.getName());
  92. }
  93. descriptors[descriptors.length - 5] = getOnEntryPropertyDescriptor();
  94. descriptors[descriptors.length - 4] = getOnExitPropertyDescriptor();
  95. descriptors[descriptors.length - 3] =
  96. new ComboBoxPropertyDescriptor(WAIT_FOR_COMPLETION, "Wait for completion", new String[] {"true", "false"});
  97. descriptors[descriptors.length - 2] =
  98. new WorkItemParameterMappingPropertyDescriptor(PARAMETER_MAPPING, "Parameter Mapping", getWorkItemNode());
  99. descriptors[descriptors.length - 1] =
  100. new WorkItemResultMappingPropertyDescriptor(RESULT_MAPPING, "Result Mapping", getWorkItemNode());
  101. }
  102. public boolean acceptsIncomingConnection(ElementConnection connection, ElementWrapper source) {
  103. return super.acceptsIncomingConnection(connection, source)
  104. && getIncomingConnections().isEmpty();
  105. }
  106. public boolean acceptsOutgoingConnection(ElementConnection connection, ElementWrapper target) {
  107. return super.acceptsOutgoingConnection(connection, target)
  108. && getOutgoingConnections().isEmpty();
  109. }
  110. public Object getPropertyValue(Object id) {
  111. if (WAIT_FOR_COMPLETION.equals(id)) {
  112. return getWorkItemNode().isWaitForCompletion() ? new Integer(0) : new Integer(1);
  113. } else if (PARAMETER_MAPPING.equals(id)) {
  114. return getWorkItemNode().getInMappings();
  115. } else if (RESULT_MAPPING.equals(id)) {
  116. return getWorkItemNode().getOutMappings();
  117. } else if (id instanceof String) {
  118. String name = (String) id;
  119. if (workParameterExists(name)) {
  120. DataType type = getWorkItemNode().getWork().getParameterDefinition(name).getType();
  121. Object value = getWorkItemNode().getWork().getParameter(name);
  122. if (value == null) {
  123. return "";
  124. }
  125. return type.writeValue(value);
  126. }
  127. }
  128. return super.getPropertyValue(id);
  129. }
  130. public void resetPropertyValue(Object id) {
  131. if (WAIT_FOR_COMPLETION.equals(id)) {
  132. getWorkItemNode().setWaitForCompletion(true);
  133. } else if (PARAMETER_MAPPING.equals(id)) {
  134. getWorkItemNode().setInMappings(new HashMap<String, String>());
  135. } else if (RESULT_MAPPING.equals(id)) {
  136. getWorkItemNode().setOutMappings(new HashMap<String, String>());
  137. } else if (id instanceof String && workParameterExists((String) id)) {
  138. getWorkItemNode().getWork().setParameter((String) id, null);
  139. } else {
  140. super.resetPropertyValue(id);
  141. }
  142. }
  143. @SuppressWarnings("unchecked")
  144. public void setPropertyValue(Object id, Object value) {
  145. if (WAIT_FOR_COMPLETION.equals(id)) {
  146. getWorkItemNode().setWaitForCompletion(((Integer) value).intValue() == 0);
  147. } else if (PARAMETER_MAPPING.equals(id)) {
  148. getWorkItemNode().setInMappings((Map<String, String>) value);
  149. } else if (RESULT_MAPPING.equals(id)) {
  150. getWorkItemNode().setOutMappings((Map<String, String>) value);
  151. } else if (id instanceof String && workParameterExists((String) id)) {
  152. DataType type = getWorkItemNode().getWork().getParameterDefinition((String) id).getType();
  153. getWorkItemNode().getWork().setParameter((String) id, type.readValue((String) value));
  154. } else {
  155. super.setPropertyValue(id, value);
  156. }
  157. }
  158. }