private void InitializeEventListenerProcesser(IJobExecutionContext context) { if (eventListenerProcessor == null) { eventListenerProcessor = (EventListenerProcessor)context.JobDetail.JobDataMap[JOB_DATA_EVENT_LISTENER_PROCESSER]; } if (eventListenerProcessor == null) { var attributeLoader = new ADAttributeLoader(); var adUtils = new ADUtils(attributeLoader); var eventEnricher = new EventEnricher(attributeLoader, adUtils); var eventMapper = new EventMapper(); var eventBuilder = new ADEventBuilder(); var orgUnitDao = new Organisation.SchedulingLayer.OrgUnitDao(); var userDao = new Organisation.SchedulingLayer.UserDao(); var filter = new Filter(adUtils); eventListenerProcessor = new EventListenerProcessor(eventEnricher, eventMapper, eventBuilder, orgUnitDao, userDao, filter, adUtils); context.JobDetail.JobDataMap.Put(JOB_DATA_EVENT_LISTENER_PROCESSER, eventListenerProcessor); } }
// ----------------------------------------------------------------------------- async Task DoOUStuff(ADX.DTO.ADEvent adEvent, CancellationToken cancellationToken) { string operation = null; switch (adEvent.ADEventType) { case ADX.DTO.ADEventType.Create: case ADX.DTO.ADEventType.Raw: operation = "UPDATE"; break; case ADX.DTO.ADEventType.Ping: operation = "UPDATE"; break; case ADX.DTO.ADEventType.Update: operation = "UPDATE"; break; case ADX.DTO.ADEventType.Delete: operation = "DELETE"; break; } if (operation != null) { var ouDTO = adEvent.GetADObject() as ADX.DTO.OU; if (ouDTO != null) { var serverName = adEvent.Sender.ServerName; var uuid = ouDTO.objectGuid.ToString().ToLower(); var ou = _adObjectFactory.TryGetOU(ouDTO.objectGuid, serverName); if (ou != null) { var sdb = new SDBService(Configuration.GetValue <string>("SDBUrl")); var stsOu = sdb.InspectOrgUnit(uuid, ou.dn); if (stsOu == null || stsOu._objectID.Equals(Guid.Empty)) { throw new Exception("OU did not exists in SDB: " + uuid); } if (!stsOu.WithinScope) { operation = "DELETE"; } Organisation.BusinessLayer.DTO.Registration.OrgUnitRegistration ouReg = new Organisation.BusinessLayer.DTO.Registration.OrgUnitRegistration(); ouReg.Name = stsOu.Name; ouReg.ParentOrgUnitUuid = stsOu._parentID?.ToString()?.ToLower(); ouReg.PayoutUnitUuid = stsOu._payoutUnitID?.ToString()?.ToLower(); ouReg.ShortKey = stsOu.ShortKey; ouReg.Timestamp = DateTime.Now; ouReg.Type = Organisation.BusinessLayer.DTO.Registration.OrgUnitRegistration.OrgUnitType.DEPARTMENT; ouReg.Uuid = uuid; foreach (var address in stsOu.Addresses) { switch (address.Type) { case SDBServices.STS.DTO.AddressType.Email: ouReg.Email = address._text; break; case SDBServices.STS.DTO.AddressType.EmailBemaerkning: ouReg.EmailRemarks = address._text; break; case SDBServices.STS.DTO.AddressType.Telefon: ouReg.PhoneNumber = address._text; break; case SDBServices.STS.DTO.AddressType.TelefonAabningstid: ouReg.PhoneOpenHours = address._text; break; case SDBServices.STS.DTO.AddressType.Placering: ouReg.Location = address._text; break; case SDBServices.STS.DTO.AddressType.EAN: ouReg.Ean = address._text; break; case SDBServices.STS.DTO.AddressType.HenvendelseAabningstid: ouReg.ContactOpenHours = address._text; break; case SDBServices.STS.DTO.AddressType.HenvendelsesAdresse: ouReg.Contact = address._text; break; case SDBServices.STS.DTO.AddressType.LOSKaldenavnKort: ouReg.LOSShortName = address._text; break; case SDBServices.STS.DTO.AddressType.PostAdresse: ouReg.Post = address._text; break; case SDBServices.STS.DTO.AddressType.PostReturAdresse: ouReg.PostReturn = address._text; break; } } var orgUnitDao = new Organisation.SchedulingLayer.OrgUnitDao(); orgUnitDao.Save(ouReg, "DELETE".Equals(operation) ? Organisation.SchedulingLayer.OperationType.DELETE : Organisation.SchedulingLayer.OperationType.UPDATE, Configuration.GetValue <string>("Municipality")); } } } await Task.Yield(); }