/// <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; } } } }
/// <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; } }
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"); }