public CentralConnectCode RegisterDevice(string environment, string deviceName, string domain, string createBy)
        {
            List<RegisterDeviceMessage> registerDeviceMessages = this.RetrieveRegisterDeviceMessageByEnvironmentAndDeviceNameAndDomain(environment, deviceName, domain);
            if (registerDeviceMessages.Count > 0)
            {
                return CentralConnectCode.RegisterDeviceMessageExist;
            }
            DictionaryAction dictionaryAction = new DictionaryAction(this.ConnectString);
            string serviceUrl = string.Format("{0}/{1}", dictionaryAction.RetrieveServiceUrl(environment), "OOSRegistration/OOSRegistrationService.svc");
            Logger.Write(string.Format("ServiceUrl={0},DeviceName={1},Domain={2}", serviceUrl, deviceName, domain));
            //Device
            List<Device> devices = this.RetrieveDeviceByDeviceNameAndDomain(deviceName, domain);
            if (devices.Count != 1)
            {
                return CentralConnectCode.DeviceNotFound;
            }
            Logger.Write("Retrieve Device", devices[0]);
            Device device = devices[0];
            //RegisterClientMessage
            ClientAction clientAction = new ClientAction(this.ConnectString);
            List<RegisterClientMessage> registerClientMessages = clientAction.RetrieveRegisterClientMessageByEnvironmentAndClientNameAndDomain(environment, device.ClientName, device.ClientDomain);
            if (registerClientMessages.Count != 1)
            {
                return CentralConnectCode.ClientNotRegister;
            }
            Logger.Write("RegisterClientMessage", registerClientMessages[0]);
            RegisterClientMessage registerClientMessage = registerClientMessages[0];
            //Client
            List<Client> clients = clientAction.RetrieveClientByClientNameAndDomain(device.ClientName, device.ClientDomain);
            if (clients.Count != 1)
            {
                return CentralConnectCode.ClientNotFound;
            }
            Logger.Write("Client", clients[0]);
            Client client = clients[0];
            //Contact
            ContactAction contactAction = new ContactAction(this.ConnectString);
            List<Contact> primaryContacts = contactAction.RetrieveContactByFullName(client.PrimaryContact);
            if (primaryContacts.Count != 1)
            {
                return CentralConnectCode.PrimaryContactNotFound;
            }
            Logger.Write("Retrieve PrimaryContacts", primaryContacts[0]);
            Contact primaryContact = primaryContacts[0];
            List<Contact> secondaryContacts = contactAction.RetrieveContactByFullName(client.SecondaryContact);
            if (secondaryContacts.Count != 1)
            {
                return CentralConnectCode.SecondaryContactNotFound;
            }
            Logger.Write("Retrieve SecondaryContact", secondaryContacts[0]);
            Contact secondaryContact = secondaryContacts[0];
            //Company
            CompanyAction companyAction = new CompanyAction(this.ConnectString);
            List<Company> companys = companyAction.RetrieveCompanyByCompanyName(client.CompanyName);
            if (companys.Count != 1)
            {
                return CentralConnectCode.CompanyNotFound;
            }
            Logger.Write("Retrieve Company", companys[0]);
            Company company = companys[0];
            //Request
            HP.TS.Devops.CentralConnect.OOSRegistration.RequestBody requestBody = new HP.TS.Devops.CentralConnect.OOSRegistration.RequestBody()
            {
                AutoDetectedSystemSerialNumber = device.SerialNumber,
                ProductId = device.ProductNumber,
                SystemModel = device.CoreSystemModel,
                CoreSystemModel = device.CoreSystemModel,
                Hostname = device.DeviceName,
                FQDN = string.Format("{0}.{1}", device.DeviceName, device.Domain),
                IPAddress = device.IPAddress,
                Client_HPPID = registerClientMessage.HPPID,
                MacAddress = device.MAC,
                OSNameAndVersionString = string.Format("{0},{1}", device.OSName, device.OSVersion),
                //--prs--
                PRSAddress1 = company.Street,
                PRSCity = company.City,
                PRSRegion = company.StateProvince,
                PRSPostalCode = company.PostalCode,
                PRSCountry = company.CountryCode,
                //--ISEEEnt---
                ISEEEntSerialNumber = client.SerialNumber,
                ISEEEntProductNumber = client.ProductNumber,
                ISEEEntProductId = client.ProductNumber,
                //--iseecus--
                ISEECusName = client.CompanyName,
                //--iseeperson--
                ISEEFirstPersonFirstName = primaryContact.FirstName,
                ISEEFirstPersonLastName = primaryContact.LastName,
                ISEEFirstPersonEmailAddress = primaryContact.EmailAddress,
                ISEEFirstPersonTelephoneNumber = primaryContact.Phone,

                ISEESecondPersonFirstName = secondaryContact.FirstName,
                ISEESecondPersonLastName = secondaryContact.LastName,
                ISEESecondPersonEmailAddress = secondaryContact.EmailAddress,
                ISEESecondPersonTelephoneNumber = secondaryContact.Phone,
            };
            Logger.Write("requestBody", requestBody);
            HP.TS.Devops.CentralConnect.OOSRegistration.OOSRegistrationServiceResult oosRegistrationServiceResult = this.RegisterDeviceRequest(serviceUrl, requestBody, registerClientMessage.CSID, registerClientMessage.OSGDID, registerClientMessage.RegistrationToken);
            if (!oosRegistrationServiceResult.IsSuccess)
            {
                Logger.Write("OOSRegistrationServiceResult Fail", oosRegistrationServiceResult);
                if (oosRegistrationServiceResult.Error.IsClientError)
                {
                    return CentralConnectCode.RegisterDeviceClientError;
                }
                else if (oosRegistrationServiceResult.Error.IsReRegisterError)
                {
                    return CentralConnectCode.RegisterDeviceReRegisterError;
                }
                else if (oosRegistrationServiceResult.Error.IsTransientError)
                {
                    return CentralConnectCode.RegisterDeviceTransientError;
                }
            }
            RegisterDeviceMessage registerDeviceMessage = new RegisterDeviceMessage();
            registerDeviceMessage.Environment = environment;
            registerDeviceMessage.DeviceName = deviceName;
            registerDeviceMessage.Domain = domain;
            registerDeviceMessage.OSGDID = oosRegistrationServiceResult.Gdid;
            registerDeviceMessage.OSGDIDUsn = oosRegistrationServiceResult.OSGdidUsn.ToString();
            registerDeviceMessage.HWGDID = oosRegistrationServiceResult.HWGdid;
            registerDeviceMessage.HWGDIDUsn = oosRegistrationServiceResult.HWGdidUsn.ToString();
            registerDeviceMessage.CreateBy = createBy;

            if (this.AddRegisterDeviceMessage(registerDeviceMessage) != 1)
            {
                return CentralConnectCode.AddRegisterDeviceMessageFail;
            }
            return CentralConnectCode.Success;
        }
        public CentralConnectCode RegisterDevice(string environment, string deviceName, string domain, string createBy)
        {
            List <RegisterDeviceMessage> registerDeviceMessages = this.RetrieveRegisterDeviceMessageByEnvironmentAndDeviceNameAndDomain(environment, deviceName, domain);

            if (registerDeviceMessages.Count > 0)
            {
                return(CentralConnectCode.RegisterDeviceMessageExist);
            }
            DictionaryAction dictionaryAction = new DictionaryAction(this.ConnectString);
            string           serviceUrl       = string.Format("{0}/{1}", dictionaryAction.RetrieveServiceUrl(environment), "OOSRegistration/OOSRegistrationService.svc");

            Logger.Write(string.Format("ServiceUrl={0},DeviceName={1},Domain={2}", serviceUrl, deviceName, domain));
            //Device
            List <Device> devices = this.RetrieveDeviceByDeviceNameAndDomain(deviceName, domain);

            if (devices.Count != 1)
            {
                return(CentralConnectCode.DeviceNotFound);
            }
            Logger.Write("Retrieve Device", devices[0]);
            Device device = devices[0];
            //RegisterClientMessage
            ClientAction clientAction = new ClientAction(this.ConnectString);
            List <RegisterClientMessage> registerClientMessages = clientAction.RetrieveRegisterClientMessageByEnvironmentAndClientNameAndDomain(environment, device.ClientName, device.ClientDomain);

            if (registerClientMessages.Count != 1)
            {
                return(CentralConnectCode.ClientNotRegister);
            }
            Logger.Write("RegisterClientMessage", registerClientMessages[0]);
            RegisterClientMessage registerClientMessage = registerClientMessages[0];
            //Client
            List <Client> clients = clientAction.RetrieveClientByClientNameAndDomain(device.ClientName, device.ClientDomain);

            if (clients.Count != 1)
            {
                return(CentralConnectCode.ClientNotFound);
            }
            Logger.Write("Client", clients[0]);
            Client client = clients[0];
            //Contact
            ContactAction  contactAction   = new ContactAction(this.ConnectString);
            List <Contact> primaryContacts = contactAction.RetrieveContactByFullName(client.PrimaryContact);

            if (primaryContacts.Count != 1)
            {
                return(CentralConnectCode.PrimaryContactNotFound);
            }
            Logger.Write("Retrieve PrimaryContacts", primaryContacts[0]);
            Contact        primaryContact    = primaryContacts[0];
            List <Contact> secondaryContacts = contactAction.RetrieveContactByFullName(client.SecondaryContact);

            if (secondaryContacts.Count != 1)
            {
                return(CentralConnectCode.SecondaryContactNotFound);
            }
            Logger.Write("Retrieve SecondaryContact", secondaryContacts[0]);
            Contact secondaryContact = secondaryContacts[0];
            //Company
            CompanyAction  companyAction = new CompanyAction(this.ConnectString);
            List <Company> companys      = companyAction.RetrieveCompanyByCompanyName(client.CompanyName);

            if (companys.Count != 1)
            {
                return(CentralConnectCode.CompanyNotFound);
            }
            Logger.Write("Retrieve Company", companys[0]);
            Company company = companys[0];

            //Request
            HP.TS.Devops.CentralConnect.OOSRegistration.RequestBody requestBody = new HP.TS.Devops.CentralConnect.OOSRegistration.RequestBody()
            {
                AutoDetectedSystemSerialNumber = device.SerialNumber,
                ProductId              = device.ProductNumber,
                SystemModel            = device.CoreSystemModel,
                CoreSystemModel        = device.CoreSystemModel,
                Hostname               = device.DeviceName,
                FQDN                   = string.Format("{0}.{1}", device.DeviceName, device.Domain),
                IPAddress              = device.IPAddress,
                Client_HPPID           = registerClientMessage.HPPID,
                MacAddress             = device.MAC,
                OSNameAndVersionString = string.Format("{0},{1}", device.OSName, device.OSVersion),
                //--prs--
                PRSAddress1   = company.Street,
                PRSCity       = company.City,
                PRSRegion     = company.StateProvince,
                PRSPostalCode = company.PostalCode,
                PRSCountry    = company.CountryCode,
                //--ISEEEnt---
                ISEEEntSerialNumber  = client.SerialNumber,
                ISEEEntProductNumber = client.ProductNumber,
                ISEEEntProductId     = client.ProductNumber,
                //--iseecus--
                ISEECusName = client.CompanyName,
                //--iseeperson--
                ISEEFirstPersonFirstName       = primaryContact.FirstName,
                ISEEFirstPersonLastName        = primaryContact.LastName,
                ISEEFirstPersonEmailAddress    = primaryContact.EmailAddress,
                ISEEFirstPersonTelephoneNumber = primaryContact.Phone,

                ISEESecondPersonFirstName       = secondaryContact.FirstName,
                ISEESecondPersonLastName        = secondaryContact.LastName,
                ISEESecondPersonEmailAddress    = secondaryContact.EmailAddress,
                ISEESecondPersonTelephoneNumber = secondaryContact.Phone,
            };
            Logger.Write("requestBody", requestBody);
            HP.TS.Devops.CentralConnect.OOSRegistration.OOSRegistrationServiceResult oosRegistrationServiceResult = this.RegisterDeviceRequest(serviceUrl, requestBody, registerClientMessage.CSID, registerClientMessage.OSGDID, registerClientMessage.RegistrationToken);
            if (!oosRegistrationServiceResult.IsSuccess)
            {
                Logger.Write("OOSRegistrationServiceResult Fail", oosRegistrationServiceResult);
                if (oosRegistrationServiceResult.Error.IsClientError)
                {
                    return(CentralConnectCode.RegisterDeviceClientError);
                }
                else if (oosRegistrationServiceResult.Error.IsReRegisterError)
                {
                    return(CentralConnectCode.RegisterDeviceReRegisterError);
                }
                else if (oosRegistrationServiceResult.Error.IsTransientError)
                {
                    return(CentralConnectCode.RegisterDeviceTransientError);
                }
            }
            RegisterDeviceMessage registerDeviceMessage = new RegisterDeviceMessage();

            registerDeviceMessage.Environment = environment;
            registerDeviceMessage.DeviceName  = deviceName;
            registerDeviceMessage.Domain      = domain;
            registerDeviceMessage.OSGDID      = oosRegistrationServiceResult.Gdid;
            registerDeviceMessage.OSGDIDUsn   = oosRegistrationServiceResult.OSGdidUsn.ToString();
            registerDeviceMessage.HWGDID      = oosRegistrationServiceResult.HWGdid;
            registerDeviceMessage.HWGDIDUsn   = oosRegistrationServiceResult.HWGdidUsn.ToString();
            registerDeviceMessage.CreateBy    = createBy;

            if (this.AddRegisterDeviceMessage(registerDeviceMessage) != 1)
            {
                return(CentralConnectCode.AddRegisterDeviceMessageFail);
            }
            return(CentralConnectCode.Success);
        }
        CentralConnectServiceResponse ICentralConnectService.RetrieveRegisterClientMessageByEnvironmentAndClientNameAndDomain(CentralConnectServiceRequest centralConnectServiceRequest)
        {
            if (centralConnectServiceRequest.RegisterClientMessage == null)
            {
                return new CentralConnectServiceResponse() { Code = 400, Message = "RegisterClientMessage should not null" };
            }

            if (string.IsNullOrEmpty(centralConnectServiceRequest.RegisterClientMessage.Environment)
                ||string.IsNullOrEmpty(centralConnectServiceRequest.RegisterClientMessage.ClientName)
                || string.IsNullOrEmpty(centralConnectServiceRequest.RegisterClientMessage.Domain))
            {
                return new CentralConnectServiceResponse() { Code = 400, Message = "Environment ClientName Domain should not null" };
            }

            if (string.IsNullOrEmpty(centralConnectServiceRequest.Id)
                || string.IsNullOrEmpty(centralConnectServiceRequest.Token)
                || string.IsNullOrEmpty(centralConnectServiceRequest.Type))
            {
                return new CentralConnectServiceResponse() { Code = 400, Message = "Id Type and Token should not null" };
            }

            string message = string.Empty;
            if (HP.TS.Devops.Security.SecurityCode.Success != HP.TS.Devops.Security.SecurityAction.CheckAccess(this.ConnectString, centralConnectServiceRequest, out message))
            {
                return new CentralConnectServiceResponse() { Code = 403, Message = centralConnectServiceRequest.Id + " of type " + centralConnectServiceRequest.Type + " have no access of " + message };
            }

            ClientAction clientAction = new ClientAction(this.ConnectString);
            List<RegisterClientMessage> registerClientMessages = clientAction.RetrieveRegisterClientMessageByEnvironmentAndClientNameAndDomain(centralConnectServiceRequest.RegisterClientMessage.Environment, centralConnectServiceRequest.RegisterClientMessage.ClientName, centralConnectServiceRequest.RegisterClientMessage.Domain);
            return new CentralConnectServiceResponse() { Code = 0, Message = "Success", RegisterClientMessages = registerClientMessages };
        }