/// <summary>
        /// method executes synchronization process
        /// </summary>
        /// <param name="repository">EA repository</param>
        public void executeSynchronization(EA.Repository repository)
        {
            User user = getLoggedUser();
            using (WebClient webClient = new WebClient())
            {
                this.user = user;
                string result = "", result2 = "", result3 = "";
                ModelInformation synchronizationData = new ModelInformation();
                synchronizationData.token = user.token;
                EA.Package package = (EA.Package)repository.GetPackageByID(1);
                synchronizationData.modelGUID = package.PackageGUID;
                string data = user.token;

                BPAddIn.changesAllowed = false;
                webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
                result = webClient.UploadString(Utils.serviceAddress + "/synchronization/getNumber", user.token);
                int number = Convert.ToInt32(result);
                if (BPAddIn.synchronizationWindow == null)
                {
                    BPAddIn.synchronizationWindow = repository.AddWindow("Synchronization", "BPAddIn.SynchronizationPackage.SynchronizationWindow") as SynchronizationWindow;
                }
                repository.ShowAddinWindow("Synchronization");
                BPAddIn.synchronizationWindow.removeList();

                DateTime localDate = DateTime.Now;
                var culture = new CultureInfo("de-DE");
                BPAddIn.synchronizationWindow.addToList(localDate.ToString(culture));

                if (number == 0)
                {
                    BPAddIn.synchronizationWindow.addToList("No modifications.");
                    BPAddIn.changesAllowed = true;
                    return;
                }

                while (true)
                {
                    try
                    {
                        data = user.token;
                        webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
                        result2 = webClient.UploadString(Utils.serviceAddress + "/synchronization/changes", data);

                        ModelChange modelChange = JsonConvert.DeserializeObject<ModelChange>(result2, new JsonItemConverter());
                        if (modelChange == null)
                        {
                            data = user.token;
                            continue;
                        }
                        if (modelChange is PropertyChange)
                        {
                            PropertyChange propertyChange = (PropertyChange)modelChange;
                            if (propertyChange.timestamp == "-1")
                            {
                                repository.ShowAddinWindow("Synchronization");
                                repository.RefreshModelView(1);
                                break;
                            }
                        }

                        if (modelChange is ItemCreation)
                        {
                            ItemCreation itemCreation = (ItemCreation)modelChange;                                  //addition

                            NewCorrespondenceNode newCorrNode = new NewCorrespondenceNode();
                            newCorrNode.firstUsername = user.username;
                            newCorrNode.firstItemGUID = synchronization.handleSynchronizationAdditions(itemCreation, repository);
                            newCorrNode.secondUsername = itemCreation.userName;
                            newCorrNode.secondItemGUID = itemCreation.itemGUID;

                            data = EncodeNonAsciiCharacters(newCorrNode.serialize());
                            webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
                            result3 = webClient.UploadString(Utils.serviceAddress + "/corrModel/createNode", data);
                        }
                        else if (modelChange is PropertyChange)
                        {
                            PropertyChange propertyChange = (PropertyChange)modelChange;
                            if (propertyChange.elementDeleted == 0)
                            {
                                synchronization.handleSynchronizationChanges(propertyChange, repository);       //change
                            }
                            else
                            {
                                synchronization.handleSynchronizationDeletions(propertyChange, repository);             //deletion
                            }
                        }
                        else if (modelChange is StepChange)                    //scenarios
                        {
                            StepChange scenarioChange = (StepChange)modelChange;

                            if (scenarioChange.status == 1)                            //addition
                            {
                                NewCorrespondenceNode newCorrNode = new NewCorrespondenceNode();
                                newCorrNode.firstUsername = user.username;
                                newCorrNode.firstItemGUID = synchronization.handleScenarioAddition(scenarioChange, repository);
                                newCorrNode.secondUsername = scenarioChange.userName;
                                newCorrNode.secondItemGUID = scenarioChange.scenarioGUID;
                                data = EncodeNonAsciiCharacters(newCorrNode.serialize());
                                webClient.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
                                result3 = webClient.UploadString(Utils.serviceAddress + "/corrModel/createNode", data);
                            }
                            else if (scenarioChange.status == 2 || scenarioChange.status == 0)         //change or deletion
                            {
                                synchronization.handleScenarioChange(scenarioChange, repository);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        continue;
                    }
                }
            }
        }
示例#2
0
 /// <summary>
 /// Called when user makes a selection in the menu.
 /// This is your main exit point to the rest of your Add-in
 /// </summary>
 /// <param name="Repository">the repository</param>
 /// <param name="Location">the location of the menu</param>
 /// <param name="MenuName">the name of the menu</param>
 /// <param name="ItemName">the name of the selected menu item</param>
 public override void EA_MenuClick(EA.Repository Repository, string Location, string MenuName, string ItemName)
 {
     switch (ItemName)
     {
         case menuJoining:
             this.showJoinWindow();
             break;
         case menuEndJoining:
             joinService.isConnectedInternet();
             break;
         case menuDbTest:
             if (defectsWindow == null)
             {
                 defectsWindow = Repository.AddWindow("Defects detection", "BPAddIn.DefectsWindow") as DefectsWindow;
             }
             Repository.ShowAddinWindow("Defects detection");
             break;
         case menuLoginWindow:
             showLoginWindow();
             break;
         case menuRegistrationWindow:
             showRegistrationWindow();
             break;
         case menuUpdate:
             updateService.isConnected();
             break;
         case menuStartNewProject:
             synchronizationService.startNewProject();
             break;
         case menuSynchronization:
             synchronizationService.checkInternetConnection(Repository);
             break;
         case menuSynchronizationWindow:
             if (synchronizationWindow == null)
             {
                 synchronizationWindow = Repository.AddWindow("Synchronization", "BPAddIn.SynchronizationPackage.SynchronizationWindow") as SynchronizationWindow;
             }
             Repository.ShowAddinWindow("Synchronization");
             break;
     }
 }
示例#3
0
        public virtual void showErrorWindow(EA.Repository repository)
        {
            if (BPAddIn.BPAddIn.defectsWindow == null)
            {
                BPAddIn.BPAddIn.defectsWindow = repository.AddWindow("Defects detection", "BPAddIn.DefectsWindow") as DefectsWindow;
            }

            repository.ShowAddinWindow("Defects detection");
        }