예제 #1
0
            public Show[] findAllShows()
            {
                if (!isInitialized)
                {
                    initializeConnection();
                    this.isInitialized = true;
                }
                Request req = new Request.Builder().Type(RequestType.GET_SHOWS).Build();

                sendRequest(req);
                logger.Debug("PROXY CLIENT: findAllShow SENT REQUEST");
                Response response = readResponse();

                logger.Debug("PROXY CLIENT: findAllShow RECEIVED RESPONSE");
                if (response.Type() == ResponseType.ERROR)
                {
                    String err = response.Data().ToString();
                    logger.Debug("PROXY CLIENT: FAILED findAllSho");
                    throw new ServicesException(err);
                }
                ShowDTO[] showsDTOS = (ShowDTO[])response.Data();
                Show[]    shows     = DTOUtils.getFromDTO(showsDTOS);
                logger.Debug("PROXY CLIENT: SUCCESSFUL findAllShow");
                return(shows);
            }
예제 #2
0
            public Show ticketsSold(Show show, Ticket t)
            {
                ShowDTO   showDTO   = DTOUtils.getDTO(show);
                TicketDTO ticketDTO = DTOUtils.getDTO(t);

                Object[] sendData = new Object[2];
                sendData[0] = showDTO;
                sendData[1] = ticketDTO;
                Request req = new Request.Builder().Type(RequestType.TICKETS_SOLD).Data(sendData).Build();

                sendRequest(req);
                logger.Debug("PROXY CLIENT: ticketsSold SENT REQUEST WARNING: THIS FUNCTION HAS NO RESPONSE!!!");
                Response response = readResponse();

                if (response.Type() == ResponseType.UPDATED_SHOWS)
                {
                    logger.Debug("PROXY CLIENT: SUCCESSFUL update");
                    return(null);
                }
                if (response.Type() == ResponseType.ERROR)
                {
                    String err = response.Data().ToString();
                    throw new ServicesException(err);
                }
                logger.Debug("PROXY CLIENT: SUCCESSFUL ticketsSold WARNING: THIS FUNCTION HAS NO RESPONSE!!!");
                return(null);
            }
예제 #3
0
        public GetStepResponseResponse GetStepResponse(GetStepResponseRequest request)
        {
            try
            {
                GetStepResponseResponse response = new GetStepResponseResponse();

                IProgramRepository repo = Factory.GetRepository(request, RepositoryType.PatientProgramResponse); //.GetPatientProgramStepResponseRepository(request);

                MEPatientProgramResponse result = repo.FindByID(request.ResponseId) as MEPatientProgramResponse;

                if (result != null)
                {
                    response.StepResponse = new StepResponse
                    {
                        Id         = result.Id.ToString(),
                        NextStepId = result.NextStepId.ToString(),
                        Nominal    = result.Nominal,
                        Order      = result.Order,
                        Required   = result.Required,
                        Spawn      = DTOUtils.GetResponseSpawnElement(result.Spawn),
                        StepId     = result.StepId.ToString(),
                        Text       = result.Text,
                        Value      = result.Value
                    };
                }

                return(response);
            }
            catch (Exception ex)
            {
                throw new Exception("DD:DataProgramManager:GetStepResponse()::" + ex.Message, ex.InnerException);
            }
        }
예제 #4
0
            public void login(Employee user, IAppObserver client)
            {
                if (!isInitialized)
                {
                    initializeConnection();
                    this.isInitialized = true;
                }
                UserDTO udto = DTOUtils.getDTO(user);
                Request req  = new Request.Builder().Type(RequestType.LOGIN).Data(udto).Build();

                sendRequest(req);
                logger.Debug("PROXY CLIENT: login SENT REQUEST");
                Response response = readResponse();

                logger.Debug("PROXY CLIENT: login RECEIVED RESPONSE @");
                if (response.Type() == ResponseType.OK)
                {
                    this.client = client;
                    logger.Debug("PROXY CLIENT: SUCCESSFUL login");
                    return;
                }
                if (response.Type() == ResponseType.ERROR)
                {
                    String err = response.Data().ToString();
                    closeConnection();
                    logger.Debug("PROXY CLIENT: FAILED login");
                    throw new ServicesException(err);
                }
            }
예제 #5
0
 private void HandleUpdate(IUpdateResponse update)
 {
     if (update is ShowModifiesResponse)
     {
         ShowModifiesResponse newMatchDto = (ShowModifiesResponse)update;
         Match newMatch = DTOUtils.GetFromDTO(newMatchDto.Match);
         _client.ShowUpdates(newMatch);
     }
 }
예제 #6
0
        public void testToDTO()
        {
            string reference   = "el. psy. kongroo.";
            string designation = "I am mad scientist!";

            List <Color> colors = new List <Color>();

            Color color = Color.valueOf("Blue", 0, 0, 255, 0);

            colors.Add(color);

            List <Finish> finishes = new List <Finish>();

            Finish finish = Finish.valueOf("Glossy", 13);

            finishes.Add(finish);

            Material material = new Material(reference, designation, "HelloGIMPTransparentBackground.jpg", colors, finishes);


            MaterialDTO expected = new MaterialDTO();

            expected.reference   = reference;
            expected.designation = designation;
            expected.colors      = new List <ColorDTO>(DTOUtils.parseToDTOS(colors));
            expected.finishes    = new List <FinishDTO>(DTOUtils.parseToDTOS(finishes));

            MaterialDTO actual = material.toDTO();

            Assert.Equal(expected.reference, actual.reference);
            Assert.Equal(expected.designation, actual.designation);

            int actualColorListSize   = actual.colors.Count;
            int expectedColorListSize = expected.colors.Count;

            Assert.Equal(expectedColorListSize, actualColorListSize);

            for (int i = 0; i < actualColorListSize; i++)
            {
                Assert.Equal(expected.colors[i].red, actual.colors[i].red);
                Assert.Equal(expected.colors[i].green, actual.colors[i].green);
                Assert.Equal(expected.colors[i].blue, actual.colors[i].blue);
                Assert.Equal(expected.colors[i].alpha, actual.colors[i].alpha);
            }

            int actualFinishListSize   = actual.finishes.Count;
            int expectedFinishListSize = expected.finishes.Count;

            Assert.Equal(expectedFinishListSize, actualFinishListSize);

            for (int i = 0; i < actualFinishListSize; i++)
            {
                Assert.Equal(expected.finishes[i].description, actual.finishes[i].description);
            }
        }
예제 #7
0
        /// <summary>
        /// Creates a model view with a material information
        /// </summary>
        /// <param name="material">Material with the material being created the model view</param>
        /// <returns>GetMaterialModelView with the material information model view</returns>
        public static GetMaterialModelView fromEntity(Material material)
        {
            GetMaterialModelView materialModelView = new GetMaterialModelView();

            materialModelView.id            = material.Id;
            materialModelView.reference     = material.reference;
            materialModelView.designation   = material.designation;
            materialModelView.imageFilename = material.image;
            materialModelView.colors        = DTOUtils.parseToDTOS(material.Colors).ToList();
            materialModelView.finishes      = DTOUtils.parseToDTOS(material.Finishes).ToList();
            return(materialModelView);
        }
예제 #8
0
 public virtual void resultAdded(Result result)
 {
     Networking.ResultDTO resultDto = DTOUtils.getDTO(result);
     Console.WriteLine("Result added  " + result);
     try
     {
         sendResponse(ProtoUtils.createNewResultResponse(resultDto));
     }
     catch (Exception e)
     {
         throw new TriatlonException("Sending error: " + e);
     }
 }
예제 #9
0
 public GetStepResponseListResponse GetStepResponse(GetStepResponseListRequest request)
 {
     try
     {
         GetStepResponseListResponse response = null;
         response = DTOUtils.GetStepResponses(request.StepId, request.ContractNumber, true, request.UserId);
         return(response);
     }
     catch (Exception ex)
     {
         throw new Exception("DD:DataProgramManager:GetStepResponse()::" + ex.Message, ex.InnerException);
     }
 }
예제 #10
0
        public virtual void sendMessage(Message message)
        {
            MessageDTO mdto = DTOUtils.getDTO(message);

            sendRequest(new SendMessageRequest(mdto));
            Response response = readResponse();

            if (response is ErrorResponse)
            {
                ErrorResponse err = (ErrorResponse)response;
                throw new ChatException(err.Message);
            }
        }
        public List <Zbor> findByDestinatieDataplecareFlight(string destinatie, string dataPlecare)
        {
            List <Zbor> res = new List <Zbor>();

            sendRequest(new SearchFlightsRequest(destinatie, dataPlecare));
            IResponse response = readResponse();

            if (response is SearchFlightsResponse)
            {
                SearchFlightsResponse r = (SearchFlightsResponse)response;
                res = DTOUtils.getFromDTO(r.Flights);
            }
            return(res);
        }
예제 #12
0
        public virtual void Logout(User user, ISellTicketsClient client)
        {
            UserDTO udto = DTOUtils.GetDTO(user);

            SendRequest(new LogoutRequest(udto));
            IResponse response = ReadResponse();

            CloseConnection();
            if (response is ErrorResponse)
            {
                ErrorResponse err = (ErrorResponse)response;
                throw new ControllerException(err.Message);
            }
        }
예제 #13
0
        public virtual void logout(User user, IChatObserver client)
        {
            UserDTO udto = DTOUtils.getDTO(user);

            sendRequest(new LogoutRequest(udto));
            Response response = readResponse();

            closeConnection();
            if (response is ErrorResponse)
            {
                ErrorResponse err = (ErrorResponse)response;
                throw new ChatException(err.Message);
            }
        }
        public List <Zbor> getAllFlight()
        {
            List <Zbor> res = new List <Zbor>();

            sendRequest(new GetFlightsRequest());
            IResponse response = readResponse();

            if (response is GetFlightsResponse)
            {
                GetFlightsResponse r = (GetFlightsResponse)response;
                res = DTOUtils.getFromDTO(r.Flights);
            }
            return(res);
        }
        public Zbor findByIdZbor(int id)
        {
            Zbor z = null;

            sendRequest(new FindByIdZborRequest(id));
            IResponse response = readResponse();

            if (response is FindByIdResponse)
            {
                FindByIdResponse r = (FindByIdResponse)response;
                z = DTOUtils.getFromDTO(r.Zbor);
            }
            return(z);
        }
예제 #16
0
        public virtual void friendLoggedIn(User friend)
        {
            UserDTO udto = DTOUtils.getDTO(friend);

            Console.WriteLine("Friend logged in " + friend);
            try
            {
                sendResponse(new FriendLoggedInResponse(udto));
            }
            catch (Exception e)
            {
                Console.WriteLine(e.StackTrace);
            }
        }
예제 #17
0
        public virtual void messageReceived(Message message)
        {
            MessageDTO mdto = DTOUtils.getDTO(message);

            Console.WriteLine("Message received  " + message);
            try
            {
                sendResponse(new NewMessageResponse(mdto));
            }
            catch (Exception e)
            {
                throw new ChatException("Sending error: " + e);
            }
        }
예제 #18
0
 private void handleUpdate(Response response)
 {
     if (response.Type() == ResponseType.UPDATED_SHOWS)
     { // this is the handler for the TICKETS_SOLD request
         Show show = DTOUtils.getFromDTO((ShowDTO)response.Data());
         try
         {
             client.notifyTicketSold(show);
         }
         catch (ServicesException e)
         {
             Console.WriteLine(e.StackTrace);
         }
     }
 }
예제 #19
0
        private void handleUpdate(UpdateResponse update)
        {
            if (update is FriendLoggedInResponse)
            {
                FriendLoggedInResponse frUpd = (FriendLoggedInResponse)update;
                User friend = DTOUtils.getFromDTO(frUpd.Friend);
                Console.WriteLine("Friend logged in " + friend);
                try
                {
                    client.friendLoggedIn(friend);
                }
                catch (ChatException e)
                {
                    Console.WriteLine(e.StackTrace);
                }
            }
            if (update is FriendLoggedOutResponse)
            {
                FriendLoggedOutResponse frOutRes = (FriendLoggedOutResponse)update;
                User friend = DTOUtils.getFromDTO(frOutRes.Friend);
                Console.WriteLine("Friend logged out " + friend);
                try
                {
                    client.friendLoggedOut(friend);
                }
                catch (ChatException e)
                {
                    Console.WriteLine(e.StackTrace);
                }
            }

            if (update is NewMessageResponse)
            {
                NewMessageResponse msgRes  = (NewMessageResponse)update;
                Message            message = DTOUtils.getFromDTO(msgRes.Message);
                try
                {
                    client.messageReceived(message);
                }
                catch (ChatException e)
                {
                    Console.WriteLine(e.StackTrace);
                }
            }
        }
예제 #20
0
        public virtual User[] getLoggedFriends(User user)
        {
            UserDTO udto = DTOUtils.getDTO(user);

            sendRequest(new GetLoggedFriendsRequest(udto));
            Response response = readResponse();

            if (response is ErrorResponse)
            {
                ErrorResponse err = (ErrorResponse)response;
                throw new ChatException(err.Message);
            }
            GetLoggedFriendsResponse resp = (GetLoggedFriendsResponse)response;

            UserDTO[] frDTO   = resp.Friends;
            User[]    friends = DTOUtils.getFromDTO(frDTO);
            return(friends);
        }
        public bool logIn(string userName, string password)
        {
            initializeConnection();
            AngajatDTO udto = DTOUtils.getDTO(new Angajat(1, userName, password));

            sendRequest(new LogInRequest(udto));
            IResponse response = readResponse();

            if (response is OkResponse)
            {
                //this.client=client;
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #22
0
        public object Insert(object newEntity)
        {
            try
            {
                ResponseDetail rs  = (ResponseDetail)newEntity;
                MEResponse     mer = new MEResponse(this.UserId)
                {
                    Id            = ObjectId.Parse(rs.Id),
                    NextStepId    = ObjectId.Parse(rs.NextStepId),
                    Nominal       = rs.Nominal,
                    Order         = rs.Order,
                    Required      = rs.Required,
                    Spawn         = DTOUtils.GetSpawnElements(rs.SpawnElement),
                    StepId        = ObjectId.Parse(rs.StepId),
                    Text          = rs.Text,
                    Value         = rs.Value,
                    DeleteFlag    = true,
                    LastUpdatedOn = DateTime.UtcNow,
                    Version       = 1.0,
                    UpdatedBy     = ObjectId.Parse(this.UserId)
                };

                bool res = false;

                using (ProgramMongoContext ctx = new ProgramMongoContext(_dbName))
                {
                    ctx.Responses.Collection.Insert(mer);

                    AuditHelper.LogDataAudit(this.UserId,
                                             MongoCollectionName.Response.ToString(),
                                             mer.Id.ToString(),
                                             Common.DataAuditType.Insert,
                                             "");

                    res = true;
                }
                return(res as object);
            }
            catch (Exception ex)
            {
                throw new Exception("DD:ResponseRepository:Insert()::" + ex.Message, ex.InnerException);
            }
        }
예제 #23
0
        public virtual void login(User user, IChatObserver client)
        {
            initializeConnection();
            UserDTO udto = DTOUtils.getDTO(user);

            sendRequest(new LoginRequest(udto));
            Response response = readResponse();

            if (response is OkResponse)
            {
                this.client = client;
                return;
            }
            if (response is ErrorResponse)
            {
                ErrorResponse err = (ErrorResponse)response;
                closeConnection();
                throw new ChatException(err.Message);
            }
        }
예제 #24
0
            public void logout(Employee user, IAppObserver client)
            {
                UserDTO udto = DTOUtils.getDTO(user);
                Request req  = new Request.Builder().Type(RequestType.LOGOUT).Data(udto).Build();

                sendRequest(req);
                logger.Debug("PROXY CLIENT: logout SENT REQUEST");
                Response response = readResponse();

                logger.Debug("PROXY CLIENT: logout RECEIVED RESPONSE");
                closeConnection();
                this.isInitialized = false;
                logger.Debug("PROXY CLIENT: SUCCESSFUL logout");
                if (response.Type() == ResponseType.ERROR)
                {
                    String err = response.Data().ToString();
                    logger.Debug("PROXY CLIENT: FAILED logout");
                    throw new ServicesException(err);
                }
            }
예제 #25
0
        public virtual void Login(User user, ISellTicketsClient client)
        {
            InitializeConnection();
            var udto = DTOUtils.GetDTO(user);

            SendRequest(new LoginRequest(udto));
            var response = ReadResponse();

            if (response is OkResponse)
            {
                this._client = client;
                return;
            }
            else if (response is ErrorResponse)
            {
                var err = (ErrorResponse)response;
                CloseConnection();
                throw new ControllerException(err.Message);
            }
        }
예제 #26
0
            public Show[] findAllShowsForArtist(Artist artist)
            {
                ArtistDTO adto = DTOUtils.getDTO(artist);
                Request   req  = new Request.Builder().Type(RequestType.GET_SHOWS_W_ARTIST).Data(adto).Build();

                sendRequest(req);
                logger.Debug("PROXY CLIENT: findAllShowWithTickets SENT REQUES");
                Response response = readResponse();

                logger.Debug("PROXY CLIENT: findAllShowWithTickets RECEIVED RESPONSE");
                if (response.Type() == ResponseType.ERROR)
                {
                    String err = response.Data().ToString();
                    logger.Debug("PROXY CLIENT: FAILED");
                    throw new ServicesException(err);
                }
                ShowDTO[] showDTOS = (ShowDTO[])response.Data();
                Show[]    meciuri  = DTOUtils.getFromDTO(showDTOS);
                logger.Debug("PROXY CLIENT: SUCCESSFUL");
                return(meciuri);
            }
예제 #27
0
        private IResponse HandleRequest(Request request)
        {
            IResponse response = null;

            if (request is LoginRequest)
            {
                Console.WriteLine(value: "Login request ...");
                LoginRequest logReq = (LoginRequest)request;
                UserDTO      udto   = logReq.User;
                User         user   = DTOUtils.GetFromDTO(usdto: udto);
                try
                {
                    lock (server)
                    {
                        server.Login(user: user, client: this);
                    }
                    return(new OkResponse());
                }
                catch (ControllerException e)
                {
                    _connected = false;
                    return(new ErrorResponse(message: e.Message));
                }
            }
            if (request is LogoutRequest)
            {
                Console.WriteLine(value: "Logout request");
                LogoutRequest logReq = (LogoutRequest)request;
                UserDTO       udto   = logReq.User;
                User          user   = DTOUtils.GetFromDTO(usdto: udto);
                try
                {
                    lock (server)
                    {
                        server.Logout(user: user, client: this);
                    }
                    //_connected = false;
                    return(new OkResponse());
                }
                catch (ControllerException e)
                {
                    _connected = false;
                    return(new ErrorResponse(message: e.Message));
                }
            }
            if (request is GetAllRequest)
            {
                Console.WriteLine(value: "GetAllRequest");
                GetAllRequest getAllRequest = (GetAllRequest)request;
                try
                {
                    List <Match> list = null;
                    lock (server)
                    {
                        list = server.GetAllMatches();
                    }
                    // _connected = false;
                    response = new GetAllReponse(list: list);
                }
                catch (Exception e)
                {
                    _connected = false;
                    response   = new ErrorResponse(message: e.Message);
                }
            }
            if (request is GetAllFilteredAndSortedRequest)
            {
                Console.WriteLine(value: "GetAllFilteredAndSortedRequest");
                GetAllFilteredAndSortedRequest getAllRequest = (GetAllFilteredAndSortedRequest)request;
                try
                {
                    List <Match> list = null;
                    lock (server)
                    {
                        list = server.GetFilteredAndSortedMatches();
                    }
                    // _connected = false;
                    response = new GetAllFilteredAndSortedResponse(list: list);
                }
                catch (Exception e)
                {
                    _connected = false;
                    response   = new ErrorResponse(message: e.Message);
                }
            }
            if (request is SellTicketsRequest)
            {
                Console.WriteLine(value: "Worker - sellTickets");
                SellTicketsRequest sellTicketsRequest = (SellTicketsRequest)request;
                try
                {
                    SalesDTO sale = sellTicketsRequest.Sale;
                    lock (server)
                    {
                        this.server.SellTickets(idMatch: sale.IdMatch, quantity: sale.Quantity, buyerPerson: sale.Person,
                                                username: sale.Username);
                    }
                    response = new OkResponse();
                }
                catch (Exception e)
                {
                    _connected = false;
                    response   = new ErrorResponse(e.Message);
                }
            }
            return(response);
        }
예제 #28
0
        private Response handleRequest(Request request)
        {
            Response response = null;

            if (request is LoginRequest)
            {
                Console.WriteLine("Login request ...");
                LoginRequest logReq = (LoginRequest)request;
                UserDTO      udto   = logReq.User;
                User         user   = DTOUtils.getFromDTO(udto);
                try
                {
                    lock (server)
                    {
                        server.login(user, this);
                    }
                    return(new OkResponse());
                }
                catch (ChatException e)
                {
                    connected = false;
                    return(new ErrorResponse(e.Message));
                }
            }
            if (request is LogoutRequest)
            {
                Console.WriteLine("Logout request");
                LogoutRequest logReq = (LogoutRequest)request;
                UserDTO       udto   = logReq.User;
                User          user   = DTOUtils.getFromDTO(udto);
                try
                {
                    lock (server)
                    {
                        server.logout(user, this);
                    }
                    connected = false;
                    return(new OkResponse());
                }
                catch (ChatException e)
                {
                    return(new ErrorResponse(e.Message));
                }
            }
            if (request is SendMessageRequest)
            {
                Console.WriteLine("SendMessageRequest ...");
                SendMessageRequest senReq  = (SendMessageRequest)request;
                MessageDTO         mdto    = senReq.Message;
                Message            message = DTOUtils.getFromDTO(mdto);
                try
                {
                    lock (server)
                    {
                        server.sendMessage(message);
                    }
                    return(new OkResponse());
                }
                catch (ChatException e)
                {
                    return(new ErrorResponse(e.Message));
                }
            }

            if (request is GetLoggedFriendsRequest)
            {
                Console.WriteLine("GetLoggedFriends Request ...");
                GetLoggedFriendsRequest getReq = (GetLoggedFriendsRequest)request;
                UserDTO udto = getReq.User;
                User    user = DTOUtils.getFromDTO(udto);
                try
                {
                    User[] friends;
                    lock (server)
                    {
                        friends = server.getLoggedFriends(user);
                    }
                    UserDTO[] frDTO = DTOUtils.getDTO(friends);
                    return(new GetLoggedFriendsResponse(frDTO));
                }
                catch (ChatException e)
                {
                    return(new ErrorResponse(e.Message));
                }
            }
            return(response);
        }
예제 #29
0
        private IResponse handleRequest(IRequest request)
        {
            IResponse response = null;

            if (request is LogInRequest)
            {
                Console.WriteLine("Login request ...");
                LogInRequest logReq = (LogInRequest)request;
                AngajatDTO   udto   = logReq.User;
                Angajat      user   = DTOUtils.getFromDTO(udto);

                try
                {
                    lock (server)
                    {
                        bool ok = server.logIn(user.User, user.Parola);
                        if (ok == true)
                        {
                            response = new OkResponse();
                        }
                        else
                        {
                            response = new ErrorResponse("log in error");
                        }
                    }
                }
                catch (Exception e)
                {
                    connected = false;
                    return(new ErrorResponse(e.Message));
                }
            }
            else
            if (request is GetFlightsRequest)
            {
                List <Zbor> flights = new List <Zbor>();
                flights  = server.getAllFlight();
                response = new GetFlightsResponse(DTOUtils.getDTO(flights));
            }
            else
            if (request is SearchFlightsRequest)
            {
                SearchFlightsRequest r       = (SearchFlightsRequest)request;
                List <Zbor>          flights = new List <Zbor>();
                flights  = server.findByDestinatieDataplecareFlight(r.Destinatie, r.DataPlecare);
                response = new SearchFlightsResponse(DTOUtils.getDTO(flights));
            }
            else
            if (request is AddBiletRequest)
            {
                AddBiletRequest r = (AddBiletRequest)request;
                server.addBilet(r.Client, r.Turisti, r.Adresa, r.IdDestinatie);
                response = new AddBiletResponse();
            }
            else
            {
                if (request is FindByIdZborRequest)
                {
                    FindByIdZborRequest r = (FindByIdZborRequest)request;
                    Zbor z = server.findByIdZbor(r.IdZbor);
                    response = new FindByIdResponse(DTOUtils.getDTO(z));
                }
            }
            return(response);
        }
        public object Update(object entity)
        {
            PutProgramActionProcessingRequest p = (PutProgramActionProcessingRequest)entity;
            ProgramDetail pg = p.Program;

            try
            {
                using (ProgramMongoContext ctx = new ProgramMongoContext(_dbName))
                {
                    var q = MB.Query <MEPatientProgram> .EQ(b => b.Id, ObjectId.Parse(p.ProgramId));

                    List <Module> mods = DTOUtils.CloneAppDomainModules(pg.Modules, this.UserId);

                    var uv = new List <MB.UpdateBuilder>();
                    uv.Add(MB.Update.Set(MEPatientProgram.CompletedProperty, pg.Completed));
                    uv.Add(MB.Update.Set(MEPatientProgram.EnabledProperty, pg.Enabled));
                    uv.Add(MB.Update.Set(MEPatientProgram.OrderProperty, pg.Order));
                    //uv.Add(MB.Update.Set(MEPatientProgram.ProgramStateProperty, (ProgramState)pg.ProgramState)); // depricated - Use Element state instead.
                    uv.Add(MB.Update.Set(MEPatientProgram.LastUpdatedOnProperty, System.DateTime.UtcNow));
                    uv.Add(MB.Update.Set(MEPatientProgram.UpdatedByProperty, ObjectId.Parse(this.UserId)));
                    uv.Add(MB.Update.Set(MEPatientProgram.VersionProperty, pg.Version));
                    if (pg.AssignTo != null && !string.IsNullOrEmpty(pg.AssignTo))
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.AssignToProperty, pg.AssignTo));
                    }
                    else
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.AssignToProperty, BsonNull.Value));
                    }

                    if (pg.ElementState != 0)
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.StateProperty, (ElementState)pg.ElementState));
                    }
                    if (pg.StateUpdatedOn != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.StateUpdatedOnProperty, pg.StateUpdatedOn));
                    }
                    if (pg.Status != 0)
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.StatusProperty, (Status)pg.Status));
                    }
                    if (pg.AssignBy != null && !string.IsNullOrEmpty(pg.AssignBy))
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.AssignByProperty, pg.AssignBy));
                    }
                    if (pg.AssignDate != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.AssignDateProperty, pg.AssignDate));
                    }
                    if (pg.AttrEndDate != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.AttributeEndDateProperty, pg.AttrEndDate));
                    }
                    if (pg.AttrStartDate != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.AttributeStartDateProperty, pg.AttrStartDate));
                    }
                    if (pg.Client != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.ClientProperty, pg.Client));
                    }
                    if (pg.CompletedBy != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.CompletedByProperty, pg.CompletedBy));
                    }
                    if (pg.ContractProgramId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.ContractProgramIdProperty, ObjectId.Parse(pg.ContractProgramId)));
                    }
                    if (pg.DateCompleted != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.CompletedOnProperty, pg.DateCompleted));
                    }
                    if (pg.Description != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.DescriptionProperty, pg.Description));
                    }
                    if (pg.EndDate != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.EndDateProperty, pg.EndDate));
                    }
                    if (pg.Name != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.NameProperty, pg.Name));
                    }
                    if (pg.Next != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.NextProperty, DTOUtils.ParseObjectId(pg.Next)));
                    }
                    if (pg.Previous != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.PreviousProperty, DTOUtils.ParseObjectId(pg.Previous)));
                    }
                    if (pg.ShortName != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.ShortNameProperty, pg.ShortName));
                    }
                    if (pg.SourceId != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.SourceIdProperty, pg.SourceId));
                    }
                    if (pg.StartDate != null)
                    {
                        uv.Add(MB.Update.Set(MEPatientProgram.StartDateProperty, pg.StartDate));
                    }
                    if (mods != null)
                    {
                        uv.Add(MB.Update.SetWrapped <List <Module> >(MEPatientProgram.ModulesProperty, mods));
                    }
                    if (pg.SpawnElement != null)
                    {
                        uv.Add(MB.Update.SetWrapped <List <SpawnElement> >(MEPatientProgram.SpawnProperty, DTOUtils.GetSpawnElements(pg.SpawnElement)));
                    }
                    if (pg.ObjectivesData != null)
                    {
                        uv.Add(MB.Update.SetWrapped <List <Objective> >(MEPatientProgram.ObjectivesInfoProperty, DTOUtils.GetObjectives(pg.ObjectivesData)));
                    }

                    IMongoUpdate update = MB.Update.Combine(uv);
                    ctx.PatientPrograms.Collection.Update(q, update);

                    AuditHelper.LogDataAudit(this.UserId,
                                             MongoCollectionName.PatientProgram.ToString(),
                                             p.ProgramId,
                                             Common.DataAuditType.Update,
                                             _dbName);
                }
                return(pg);
            }
            catch (Exception ex)
            {
                throw new Exception("DD:PatientProgramRepository:Update()::" + ex.Message, ex.InnerException);
            }
        }