Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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())
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
        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()
Ejemplo n.º 6
0
        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)