def set_time_stamp(self, time_stamp): """Sets the timestamp of the event, as defined by the Time extension. :param time_stamp: Timestamp, as Date or as long value in milliseconds, to be set. :type time_stamp: datetime.datetime or int """ XTimeExtension().assign_timestamp(self.__original, time_stamp)
def get_time_stamp(self): """Retrieves the timestamp of the event, as defined by the Time extension. :return: Timestamp as Date object, or null if not defined. :rtype: datetime.datetime """ return XTimeExtension().extract_timestamp(self.__original)
def register_standard_extensions(self): """Registers all defined standard extensions with the extension manager before caching. """ self.register(XConceptExtension()) self.register(XCostExtension()) self.register(XIdentityExtension()) self.register(XLifecycleExtension()) self.register(XMicroExtension()) self.register(XOrganizationalExtension()) self.register(XSemanticExtension()) self.register(XTimeExtension())
def register(self, element): """Registers the given timestamp boundaries. These timestamp boundaries will be potentially adjusted to accomodate for inclusion of the given boundaries. :param element: Timestamp boundaries to be registered. :type element: `XTimeBounds` or `XEvent` or datetime """ if isinstance(element, XTimeBounds): self.register(element.get_start_date()) self.register(element.get_end_date()) elif isinstance(element, XEvent): date = XTimeExtension().extract_timestamp(element) if date is not None: self.register(date) elif isinstance(element, datetime): if element is not None: if self.__first is None: self.__first = element self.__last = element elif element < self.__first: self.__first = element elif element > self.__last: self.__last = element
def endElement(self, local_name): """ Overrides endElement in class ContentHandler :param local_name: The name of the element type, just as with the startElement event :type local_name: str """ tag_name = local_name if tag_name == "WorkflowLog": if self.__numUnorderedEntries > 0: XLogging().log( "LogData: Log contains " + str(self.__numUnorderedEntries) + " audit trail entries in non-natural order!", XLogging.Importance.ERROR) XLogging().log( "LogData: The log file you have loaded is not MXML compliant! (error compensated transparently)", XLogging.Importance.ERROR) elif tag_name == "Process": self.__currentProcess.get_classifiers().extend( XMxmlParser.MXML_CLASSIFIERS) self.__currentProcess.get_global_trace_attributes().append( XConceptExtension().ATTR_NAME.clone()) self.__currentProcess.get_global_event_attributes().append( XConceptExtension().ATTR_NAME.clone()) self.__currentProcess.get_global_event_attributes().append( XLifecycleExtension().ATTR_TRANSITION.clone()) self.__logs.append(self.__currentProcess) self.__currentProcess = None elif tag_name == "Process": self.__sourceOpen = False elif tag_name == "ProcessInstance": if len(self.__currentInstance) > 0: self.__currentProcess.append(self.__currentInstance) self.__currentInstance = None self.__lastTimestamp = None elif tag_name == "AuditTrailEntry": if self.__timestamp is None: self.__currentInstance.append(self.__entry) elif self.__lastTimestamp is None: self.__currentInstance.append(self.__entry) self.__lastTimestamp = self.__timestamp elif self.__timestamp > self.__lastTimestamp: self.__currentInstance.append(self.__entry) self.__lastTimestamp = self.__timestamp else: self.__currentInstance.append(self.__entry) self.__entry = None else: if tag_name == "Attribute": originator = "".join(self.__buffer).strip() if len(originator) > 0: self.__genericAttribute.set_value("".join( self.__buffer).strip()) if self.__entry: self.__entry.get_attributes()[ self.__genericAttribute.get_key( )] = self.__genericAttribute elif self.__currentInstance: self.__currentInstance.get_attributes()[ self.__genericAttribute.get_key( )] = self.__genericAttribute elif self.__currentProcess: self.__currentProcess.get_attributes()[ self.__genericAttribute.get_key( )] = self.__genericAttribute elif self.__sourceOpen: self.__sourceAttribute.get_attributes()[ self.__genericAttribute.get_key( )] = self.__genericAttribute self.__genericAttribute = None elif tag_name == "EventType": if self.__eventTypeAttribute.get_value() == "UNKNOWN": originator = "".join(self.__buffer).strip() if len(originator) > 0: self.__eventTypeAttribute.set_value(originator) self.__entry.get_attributes()[ self.__eventTypeAttribute.get_key( )] = self.__eventTypeAttribute else: self.__entry.get_attributes()[ self.__eventTypeAttribute.get_key( )] = self.__eventTypeAttribute self.__eventTypeAttribute = None elif tag_name == "WorkflowModelElement": XConceptExtension().assign_name( self.__entry, "".join(self.__buffer).strip()) elif tag_name == "Timestamp": originator = "".join(self.__buffer).strip() self.__timestamp = parse_date_time(originator) if self.__timestamp: timestamp_attribute = XTimeExtension( ).ATTR_TIMESTAMP.clone() timestamp_attribute.set_value(self.__timestamp) self.__entry.get_attributes( )[timestamp_attribute.get_key()] = timestamp_attribute elif tag_name == "Originator": originator = "".join(self.__buffer).strip() if len(originator) > 0: self.__originatorAttribute.set_value(originator) self.__entry.get_attributes()[ self.__originatorAttribute.get_key( )] = self.__originatorAttribute self.__originatorAttribute = None self.__buffer.clear()
def startElement(self, element_name, attributes): """ Overrides startElement in class ContentHandler :param element_name: Contains the raw XML 1.0 name of the element type. :type element_name: str :param attributes: An instance of the Attributes class containing the attributes of the element :type attributes: xml.sax.xmlreader.AttributesImpl """ tag_name = element_name if tag_name != "WorkflowLog": if tag_name == "Source": self.__sourceOpen = True description_string = attributes.get("program") self.__sourceAttribute = XMxmlParser( ).factory.create_attribute_literal("source", description_string, None) self.__add_model_reference__(attributes, self.__sourceAttribute) elif tag_name == "Process": description_string = attributes.get("id") description = attributes.get("description") self.__currentProcess = XMxmlParser().factory.create_log() self.__currentProcess.get_extensions().add( XConceptExtension()) self.__currentProcess.get_extensions().add( XOrganizationalExtension()) self.__currentProcess.get_extensions().add( XLifecycleExtension()) self.__currentProcess.get_extensions().add( XSemanticExtension()) self.__currentProcess.get_extensions().add( XTimeExtension()) if self.__sourceAttribute: self.__currentProcess.get_attributes()[ self.__sourceAttribute.get_key( )] = self.__sourceAttribute XConceptExtension().assign_name(self.__currentProcess, description_string) XLifecycleExtension().assign_model(self.__currentProcess, "standard") if description and len(description.lower()) > 0: description1 = XMxmlParser( ).factory.create_attribute_literal( "description", description, None) self.__currentProcess.get_attributes()[ description1.get_key()] = description1 self.__add_model_reference__(attributes, self.__currentProcess) elif tag_name == "ProcessInstance": self.__currentInstance = XMxmlParser( ).factory.create_trace() name = attributes.get("id") if name is None: name = "None" XConceptExtension().assign_name(self.__currentInstance, name) description_string = attributes.get("description") if description_string and len( description_string.strip()) > 0: description2 = XMxmlParser( ).factory.create_attribute_literal( "description", description_string, None) self.__currentInstance.get_attributes()[ description2.get_key()] = description2 self.__add_model_reference__(attributes, self.__currentInstance) elif tag_name == "AuditTrailEntry": self.__entry = XMxmlParser().factory.create_event() elif tag_name == "Attribute": self.__genericAttribute = XMxmlParser( ).factory.create_attribute_literal( attributes.get("name").strip(), "DEFAULT_VALUE", None) self.__add_model_reference__(attributes, self.__genericAttribute) elif tag_name == "EventType": self.__eventTypeAttribute = XLifecycleExtension( ).ATTR_TRANSITION.clone() unknown_type = attributes.get("unknowntype") if unknown_type: self.__eventTypeAttribute.set_value(unknown_type) else: self.__eventTypeAttribute.set_value("UNKNOWN") self.__add_model_reference__(attributes, self.__eventTypeAttribute) elif tag_name == "WorkflowModelElement": self.__add_model_reference__(attributes, self.__entry) elif tag_name == "Originator": self.__originatorAttribute = XOrganizationalExtension( ).ATTR_RESOURCE.clone() self.__add_model_reference__(attributes, self.__originatorAttribute)