public override bool Equals(object o) { if (this == o as BaseElement) { return(true); } if (o == null || this.GetType() != o.GetType()) { return(false); } ValuedDataObject otherObject = (ValuedDataObject)o; if (!otherObject.ItemSubjectRef.StructureRef.Equals(this.itemSubjectRef.StructureRef)) { return(false); } if (!otherObject.Id.Equals(this.id)) { return(false); } if (!otherObject.Name.Equals(this.name)) { return(false); } if (!otherObject.Value.Equals(this.value.ToString())) { return(false); } return(true); }
protected internal override void WriteAdditionalAttributes(BaseElement element, BpmnModel model, XMLStreamWriter xtw) { ValuedDataObject dataObject = (ValuedDataObject)element; if (dataObject.ItemSubjectRef != null && !string.IsNullOrWhiteSpace(dataObject.ItemSubjectRef.StructureRef)) { WriteDefaultAttribute(BpmnXMLConstants.ATTRIBUTE_DATA_ITEM_REF, dataObject.ItemSubjectRef.StructureRef, xtw); } }
protected internal override bool WriteExtensionChildElements(BaseElement element, bool didWriteExtensionStartElement, XMLStreamWriter xtw) { ValuedDataObject dataObject = (ValuedDataObject)element; if (!string.IsNullOrWhiteSpace(dataObject.Id) && dataObject.Value != null) { if (!didWriteExtensionStartElement) { xtw.WriteStartElement(BpmnXMLConstants.BPMN_PREFIX, BpmnXMLConstants.ELEMENT_EXTENSIONS, BpmnXMLConstants.BPMN2_NAMESPACE); didWriteExtensionStartElement = true; } xtw.WriteStartElement(BpmnXMLConstants.ACTIVITI_EXTENSIONS_PREFIX, BpmnXMLConstants.ELEMENT_DATA_VALUE, BpmnXMLConstants.ACTIVITI_EXTENSIONS_NAMESPACE); if (dataObject.Value != null) { string value; if (dataObject is DateDataObject) { value = ((DateTime)dataObject.Value).ToString(sdf); } else { value = dataObject.Value.ToString(); } if (dataObject is StringDataObject && xmlChars.IsMatch(value)) { xtw.WriteCData(value); } else { xtw.WriteCharacters(value); } } xtw.WriteEndElement(); } return(didWriteExtensionStartElement); }
public virtual IDictionary <string, IDataObject> Execute(ICommandContext commandContext) { // Verify existance of execution if (executionId is null) { throw new ActivitiIllegalArgumentException("executionId is null"); } IExecutionEntity execution = commandContext.ExecutionEntityManager.FindById <IExecutionEntity>(executionId); if (execution == null) { throw new ActivitiObjectNotFoundException("execution " + executionId + " doesn't exist", typeof(IExecution)); } IDictionary <string, IVariableInstance> variables; if ((dataObjectNames?.Count()).GetValueOrDefault(0) == 0) { // Fetch all if (isLocal) { variables = execution.VariableInstancesLocal; } else { variables = execution.VariableInstances; } } else { // Fetch specific collection of variables if (isLocal) { variables = execution.GetVariableInstancesLocal(dataObjectNames, false); } else { variables = execution.GetVariableInstances(dataObjectNames, false); } } IDictionary <string, IDataObject> dataObjects = null; if (variables != null) { dataObjects = new Dictionary <string, IDataObject>(variables.Count); foreach (KeyValuePair <string, IVariableInstance> entry in variables.SetOfKeyValuePairs()) { string name = entry.Key; IVariableInstance variableEntity = entry.Value; IExecutionEntity executionEntity = commandContext.ExecutionEntityManager.FindById <IExecutionEntity>(variableEntity.ExecutionId); while (!executionEntity.IsScope) { executionEntity = executionEntity.Parent; } BpmnModel bpmnModel = ProcessDefinitionUtil.GetBpmnModel(execution.ProcessDefinitionId); ValuedDataObject foundDataObject = null; if (executionEntity.ParentId is null) { foreach (ValuedDataObject dataObject in bpmnModel.MainProcess.DataObjects) { if (dataObject.Name.Equals(variableEntity.Name)) { foundDataObject = dataObject; break; } } } else { SubProcess subProcess = (SubProcess)bpmnModel.GetFlowElement(execution.ActivityId); foreach (ValuedDataObject dataObject in subProcess.DataObjects) { if (dataObject.Name.Equals(variableEntity.Name)) { foundDataObject = dataObject; break; } } } string localizedName = null; string localizedDescription = null; if (locale is object && foundDataObject is object) { JToken languageNode = Context.GetLocalizationElementProperties(locale, foundDataObject.Id, execution.ProcessDefinitionId, withLocalizationFallback); if (languageNode != null) { JToken nameNode = languageNode[DynamicBpmnConstants.LOCALIZATION_NAME]; if (nameNode != null) { localizedName = nameNode.ToString(); } JToken descriptionNode = languageNode[DynamicBpmnConstants.LOCALIZATION_DESCRIPTION]; if (descriptionNode != null) { localizedDescription = descriptionNode.ToString(); } } } if (foundDataObject != null) { dataObjects[name] = new DataObjectImpl(variableEntity.Name, variableEntity.Value, foundDataObject.Documentation, foundDataObject.Type, localizedName, localizedDescription, foundDataObject.Id); } } } return(dataObjects); }
protected internal override BaseElement ConvertXMLToElement(XMLStreamReader xtr, BpmnModel model) { ValuedDataObject dataObject = null; ItemDefinition itemSubjectRef = new ItemDefinition(); string structureRef = xtr.GetAttributeValue(BpmnXMLConstants.ATTRIBUTE_DATA_ITEM_REF); if (!string.IsNullOrWhiteSpace(structureRef) && structureRef.Contains(":")) { string dataType = structureRef.Substring(structureRef.IndexOf(':') + 1); if (dataType.Equals("string")) { dataObject = new StringDataObject(); } else if (dataType.Equals("int")) { dataObject = new IntegerDataObject(); } else if (dataType.Equals("long")) { dataObject = new LongDataObject(); } else if (dataType.Equals("double")) { dataObject = new DoubleDataObject(); } else if (dataType.Equals("boolean")) { dataObject = new BooleanDataObject(); } else if (dataType.Equals("datetime")) { dataObject = new DateDataObject(); } else { logger.LogError($"Error converting {xtr.GetAttributeValue(BpmnXMLConstants.ATTRIBUTE_DATA_NAME)}, invalid data type: {dataType}"); } } else { // use String as default type dataObject = new StringDataObject(); structureRef = "xsd:string"; } if (dataObject != null) { dataObject.Id = xtr.GetAttributeValue(BpmnXMLConstants.ATTRIBUTE_DATA_ID); dataObject.Name = xtr.GetAttributeValue(BpmnXMLConstants.ATTRIBUTE_DATA_NAME); BpmnXMLUtil.AddXMLLocation(dataObject, xtr); itemSubjectRef.StructureRef = structureRef; dataObject.ItemSubjectRef = itemSubjectRef; ParseChildElements(XMLElementName, dataObject, model, xtr); dataObject.ExtensionElements.TryGetValue("value", out IList <ExtensionElement> valuesElement); if (valuesElement != null && valuesElement.Count > 0) { ExtensionElement valueElement = valuesElement[0]; if (!string.IsNullOrWhiteSpace(valueElement.ElementText)) { if (dataObject is DateDataObject) { try { dataObject.Value = DateTime.Parse(valueElement.ElementText, new DateTimeFormatInfo() { FullDateTimePattern = sdf }); } catch (Exception e) { logger.LogError(e, $"Error converting {dataObject.Name} \r\n {e.Message}"); } } else { dataObject.Value = valueElement.ElementText; } } // remove value element dataObject.ExtensionElements.Remove("value"); } } return(dataObject); }
public virtual IDataObject Execute(ICommandContext commandContext) { if (ReferenceEquals(taskId, null)) { throw new ActivitiIllegalArgumentException("taskId is null"); } if (ReferenceEquals(variableName, null)) { throw new ActivitiIllegalArgumentException("variableName is null"); } ITaskEntity task = commandContext.TaskEntityManager.FindById <ITaskEntity>(new KeyValuePair <string, object>("id", taskId)); if (task == null) { throw new ActivitiObjectNotFoundException("task " + taskId + " doesn't exist", typeof(TaskActivity)); } IDataObject dataObject = null; IVariableInstance variableEntity = task.GetVariableInstance(variableName, false); string localizedName = null; string localizedDescription = null; if (variableEntity != null) { IExecutionEntity executionEntity = commandContext.ExecutionEntityManager.FindById <IExecutionEntity>(variableEntity.ExecutionId); while (!executionEntity.IsScope) { executionEntity = executionEntity.Parent; } BpmnModel bpmnModel = ProcessDefinitionUtil.GetBpmnModel(executionEntity.ProcessDefinitionId); ValuedDataObject foundDataObject = null; if (ReferenceEquals(executionEntity.ParentId, null)) { foreach (ValuedDataObject dataObjectDefinition in bpmnModel.MainProcess.DataObjects) { if (dataObjectDefinition.Name.Equals(variableEntity.Name)) { foundDataObject = dataObjectDefinition; break; } } } else { SubProcess subProcess = (SubProcess)bpmnModel.GetFlowElement(executionEntity.ActivityId); foreach (ValuedDataObject dataObjectDefinition in subProcess.DataObjects) { if (dataObjectDefinition.Name.Equals(variableEntity.Name)) { foundDataObject = dataObjectDefinition; break; } } } if (!ReferenceEquals(locale, null) && foundDataObject != null) { JToken languageNode = Context.GetLocalizationElementProperties(locale, foundDataObject.Id, task.ProcessDefinitionId, withLocalizationFallback); if (languageNode != null) { JToken nameNode = languageNode[DynamicBpmnConstants.LOCALIZATION_NAME]; if (nameNode != null) { localizedName = nameNode.ToString(); } JToken descriptionNode = languageNode[DynamicBpmnConstants.LOCALIZATION_DESCRIPTION]; if (descriptionNode != null) { localizedDescription = descriptionNode.ToString(); } } } if (foundDataObject != null) { dataObject = new DataObjectImpl(variableEntity.Name, variableEntity.Value, foundDataObject.Documentation, foundDataObject.Type, localizedName, localizedDescription, foundDataObject.Id); } } return(dataObject); }