public static bool WriteFieldExtensions(IList <FieldExtension> fieldExtensionList, bool didWriteExtensionStartElement, XMLStreamWriter xtw) { foreach (FieldExtension fieldExtension in fieldExtensionList) { if (!string.IsNullOrWhiteSpace(fieldExtension.FieldName)) { if (!string.IsNullOrWhiteSpace(fieldExtension.StringValue) || !string.IsNullOrWhiteSpace(fieldExtension.Expression)) { if (!didWriteExtensionStartElement) { xtw.WriteStartElement(BpmnXMLConstants.BPMN_PREFIX, BpmnXMLConstants.ELEMENT_EXTENSIONS, BpmnXMLConstants.BPMN2_NAMESPACE); didWriteExtensionStartElement = true; } xtw.WriteStartElement(BpmnXMLConstants.ACTIVITI_EXTENSIONS_PREFIX, BpmnXMLConstants.ELEMENT_FIELD, BpmnXMLConstants.ACTIVITI_EXTENSIONS_NAMESPACE); BpmnXMLUtil.WriteDefaultAttribute(BpmnXMLConstants.ATTRIBUTE_FIELD_NAME, fieldExtension.FieldName, xtw); if (!string.IsNullOrWhiteSpace(fieldExtension.StringValue)) { xtw.WriteStartElement(BpmnXMLConstants.ACTIVITI_EXTENSIONS_PREFIX, BpmnXMLConstants.ELEMENT_FIELD_STRING, BpmnXMLConstants.ACTIVITI_EXTENSIONS_NAMESPACE); xtw.WriteCData(fieldExtension.StringValue); } else { xtw.WriteStartElement(BpmnXMLConstants.ACTIVITI_EXTENSIONS_PREFIX, BpmnXMLConstants.ATTRIBUTE_FIELD_EXPRESSION, BpmnXMLConstants.ACTIVITI_EXTENSIONS_NAMESPACE); xtw.WriteCData(fieldExtension.Expression); } xtw.WriteEndElement(); xtw.WriteEndElement(); } } } return(didWriteExtensionStartElement); }
protected internal static void WriteExtensionElement(ExtensionElement extensionElement, IDictionary <string, string> namespaceMap, XMLStreamWriter xtw) { if (!string.IsNullOrWhiteSpace(extensionElement.Name)) { IDictionary <string, string> localNamespaceMap = new Dictionary <string, string>(); if (!string.IsNullOrWhiteSpace(extensionElement.Namespace)) { if (!string.IsNullOrWhiteSpace(extensionElement.NamespacePrefix)) { xtw.WriteStartElement(extensionElement.NamespacePrefix, extensionElement.Name, extensionElement.Namespace); if (!namespaceMap.ContainsKey(extensionElement.NamespacePrefix) || !namespaceMap[extensionElement.NamespacePrefix].Equals(extensionElement.Namespace)) { xtw.WriteNamespace(extensionElement.NamespacePrefix, extensionElement.Namespace); namespaceMap[extensionElement.NamespacePrefix] = extensionElement.Namespace; localNamespaceMap[extensionElement.NamespacePrefix] = extensionElement.Namespace; } } else { xtw.WriteStartElement(extensionElement.Namespace, extensionElement.Name); } } else { xtw.WriteStartElement(BpmnXMLConstants.BPMN_PREFIX, extensionElement.Name, BpmnXMLConstants.BPMN2_NAMESPACE); } foreach (IList <ExtensionAttribute> attributes in extensionElement.Attributes.Values) { foreach (ExtensionAttribute attribute in attributes) { if (!string.IsNullOrWhiteSpace(attribute.Name) && attribute.Value != null) { if (!string.IsNullOrWhiteSpace(attribute.Namespace)) { if (!string.IsNullOrWhiteSpace(attribute.NamespacePrefix)) { if (!namespaceMap.ContainsKey(attribute.NamespacePrefix) || !namespaceMap[attribute.NamespacePrefix].Equals(attribute.Namespace)) { xtw.WriteNamespace(attribute.NamespacePrefix, attribute.Namespace); namespaceMap[attribute.NamespacePrefix] = attribute.Namespace; } xtw.WriteAttribute(attribute.NamespacePrefix, attribute.Namespace, attribute.Name, attribute.Value); } else { xtw.WriteAttribute(attribute.Namespace, attribute.Name, attribute.Value); } } else { xtw.WriteAttribute(attribute.Name, attribute.Value); } } } } if (extensionElement.ElementText != null) { xtw.WriteCData(extensionElement.ElementText); } else { foreach (IList <ExtensionElement> childElements in extensionElement.ChildElements.Values) { foreach (ExtensionElement childElement in childElements) { WriteExtensionElement(childElement, namespaceMap, xtw); } } } foreach (string prefix in localNamespaceMap.Keys) { namespaceMap.Remove(prefix); } xtw.WriteEndElement(); } }