protected internal virtual HistoryEvent CreateHistoricIdentityLinkEvt(IIdentityLink identityLink, HistoryEventTypes eventType)
        {
            // create historic identity link event
            HistoricIdentityLinkLogEventEntity evt = NewIdentityLinkEventEntity();

            // Mapping all the values of identity link to HistoricIdentityLinkEvent
            InitHistoricIdentityLinkEvent(evt, identityLink, eventType);
            return(evt);
        }
        protected internal virtual void InitHistoricIdentityLinkEvent(HistoricIdentityLinkLogEventEntity evt, IIdentityLink identityLink, HistoryEventTypes eventType)
        {
            if (!string.ReferenceEquals(identityLink.TaskId, null))
            {
                TaskEntity task = Context.CommandContext.TaskManager.FindTaskById(identityLink.TaskId);

                evt.ProcessDefinitionId = task.ProcessDefinitionId;

                if (task.ProcessDefinition != null)
                {
                    evt.ProcessDefinitionKey = task.ProcessDefinition.Key;
                }
            }

            if (!string.ReferenceEquals(identityLink.ProcessDefId, null))
            {
                evt.ProcessDefinitionId = identityLink.ProcessDefId;

                ProcessDefinitionEntity definition = Context.ProcessEngineConfiguration.DeploymentCache.FindProcessDefinitionFromCache(identityLink.ProcessDefId);
                evt.ProcessDefinitionKey = definition.Key;
            }

            evt.Time     = ClockUtil.CurrentTime;
            evt.Type     = identityLink.Type;
            evt.UserId   = identityLink.UserId;
            evt.GroupId  = identityLink.GroupId;
            evt.TaskId   = identityLink.TaskId;
            evt.TenantId = identityLink.TenantId;
            // There is a conflict in HistoryEventTypes for 'delete' keyword,
            // So HistoryEventTypes.IDENTITY_LINK_ADD /
            // HistoryEventTypes.IDENTITY_LINK_DELETE is provided with the event name
            // 'add-identity-link' /'delete-identity-link'
            // and changed to 'add'/'delete' (While inserting it into the database) on
            // Historic identity link add / delete event
            string operationType = "add";

            if (eventType.EventName.Equals(HistoryEventTypes.IdentityLinkDelete.EventName))
            {
                operationType = "delete";
            }

            evt.OperationType = operationType;
            evt.EventType     = eventType.EventName;
            evt.AssignerId    = Context.CommandContext.AuthenticatedUserId;
        }