/// <summary> /// Constructs a data model based on files on disk. /// </summary> /// <returns></returns> public DeploymentModel DetectDeploymentModel() { DeploymentModel model = new DeploymentModel(); model.Containers = new List <DeploymentContainer>(); foreach (DeploymentContainerController containerController in ContainerControllers) { model.Containers.Add(containerController.DetectItems()); } return(model); }
public static DeploymentModel Load(string xml) { DeploymentModel retVal = null; try { using (StringReader reader = new StringReader(xml)) { XmlSerializer serializer = new XmlSerializer(typeof(DeploymentModel)); retVal = serializer.Deserialize(reader) as DeploymentModel; } } catch { } if (retVal == null) { retVal = new DeploymentModel(); } return(retVal); }
public Configure(string deployFolder, DeploymentModel deploymentModel, string vaultName, Connection conn) { InitializeComponent(); m_init = true; m_conn = conn; m_deployFolderTextBox.Text = deployFolder; m_deploymentModel = deploymentModel; if (m_deploymentModel == null) { m_deploymentModel = new DeploymentModel(); } if (m_deploymentModel.Containers == null) { m_deploymentModel.Containers = new List <DeploymentContainer>(); } InitTree(vaultName); m_init = false; }
/// <summary> /// Build a data model based on the selected nodes /// </summary> public DeploymentModel GetSelectedDataModel() { DeploymentModel model = new DeploymentModel(); model.Containers = new List <DeploymentContainer>(); foreach (TreeNode containerNode in m_deploymentTreeView.Nodes) { DeploymentContainer container = containerNode.Tag as DeploymentContainer; if (container == null) { continue; } DeploymentContainer newContainer = new DeploymentContainer(container.DisplayName, container.Key); foreach (TreeNode itemNode in containerNode.Nodes) { if (!itemNode.Checked) { continue; } DeploymentItem item = itemNode.Tag as DeploymentItem; if (item == null) { continue; } newContainer.DeploymentItems.Add(item); } if (newContainer.DeploymentItems.Any()) { model.Containers.Add(newContainer); } } return(model); }
private void ConfigureThunderdome(string serverName, string vaultName, CommandItemEventArgs e) { Connection conn = e.Context.Application.Connection; if (!Util.IsAdmin(conn)) { MessageBox.Show("Only administrators can use this function"); return; } //string userFolder = m_mgr.KnowledgeVaultService.GetVaultOption(USER_FOLDER_OPTION); string deployFolderPath = conn.WebServiceManager.KnowledgeVaultService.GetVaultOption(DEFAULT_FOLDER_OPTION); string deploymentXml = conn.WebServiceManager.KnowledgeVaultService.GetVaultOption(DEPLOYMENT_CONFIG_OPTION); DeploymentModel deploymentModel = DeploymentModel.Load(deploymentXml); Configure cfgDialog = new Configure(deployFolderPath, deploymentModel, vaultName, conn); DialogResult result = cfgDialog.ShowDialog(); if (result != DialogResult.OK) { return; } DeploymentModel deploymentModel2 = cfgDialog.GetSelectedDataModel(); if (!deploymentModel2.Containers.Any()) { return; } // zip up the files and upload to Vault string tempFile = System.IO.Path.GetTempFileName(); ZipFile zip = ZipFile.Create(tempFile); zip.BeginUpdate(); foreach (DeploymentContainer container in deploymentModel2.Containers) { foreach (DeploymentItem item in container.DeploymentItems) { item.Zip(zip, container); } } zip.CommitUpdate(); zip.Close(); Folder deployFolder = cfgDialog.DeploymentFolder; conn.WebServiceManager.KnowledgeVaultService.SetVaultOption(DEFAULT_FOLDER_OPTION, deployFolder.FullName); Autodesk.Connectivity.WebServices.File vaultPackage = Util.AddOrUpdateFile( tempFile, PACKAGE_NAME, deployFolder, conn); System.IO.File.Delete(tempFile); // we just updated the package, so we are definately up to date. Settings settings = Settings.Load(); VaultEntry entry = settings.GetOrCreateEntry(serverName, vaultName); entry.LastUpdate = vaultPackage.CkInDate; settings.Save(); deploymentXml = deploymentModel2.ToXml(); conn.WebServiceManager.KnowledgeVaultService.SetVaultOption(DEPLOYMENT_CONFIG_OPTION, deploymentXml); MessageBox.Show("Deployment Created"); e.Context.ForceRefresh = true; e.Context.GoToLocation = new LocationContext(SelectionTypeId.File, deployFolder.FullName + "/" + PACKAGE_NAME); return; }
private void CheckForUpdates(string serverName, string vaultName, Connection conn) { if (m_restartPending) { return; } Settings settings = Settings.Load(); // user previously indicated not to download updates and not to be prompted if (settings.NeverDownload) { return; } string defaultFolder = conn.WebServiceManager.KnowledgeVaultService.GetVaultOption(DEFAULT_FOLDER_OPTION); if (defaultFolder == null || defaultFolder.Length == 0) { return; } if (!defaultFolder.EndsWith("/")) { defaultFolder += "/"; } string deploymentPath = defaultFolder + PACKAGE_NAME; Autodesk.Connectivity.WebServices.File [] files = conn.WebServiceManager.DocumentService.FindLatestFilesByPaths( deploymentPath.ToSingleArray()); if (files == null || files.Length == 0 || files[0].Id <= 0 || files[0].Cloaked) { return; // no package found } VaultEntry entry = settings.GetOrCreateEntry(serverName, vaultName); if (entry != null && entry.LastUpdate >= files[0].CkInDate) { return; // we are up to date } StringBuilder updateList = new StringBuilder(); string deploymentXml = conn.WebServiceManager.KnowledgeVaultService.GetVaultOption(DEPLOYMENT_CONFIG_OPTION); DeploymentModel deploymentModel = DeploymentModel.Load(deploymentXml); if (deploymentModel == null || deploymentModel.Containers == null) { return; } foreach (DeploymentContainer container in deploymentModel.Containers) { updateList.AppendLine(container.DisplayName); foreach (DeploymentItem item in container.DeploymentItems) { updateList.AppendLine("- " + item.DisplayName); } updateList.AppendLine(); } AskDialog ask = new AskDialog(updateList.ToString()); DialogResult result = ask.ShowDialog(); if (result == DialogResult.OK) { if (ask.AskResult == AskDialog.AskResultEnum.No) { return; } else if (ask.AskResult == AskDialog.AskResultEnum.Never) { settings.NeverDownload = true; settings.Save(); return; } } else { return; } // if we got here, the user cliecked yes. string tempPath = Path.Combine(Path.GetTempPath(), "Thunderdome"); if (!tempPath.EndsWith("\\")) { tempPath += "\\"; } if (Directory.Exists(tempPath)) { Directory.Delete(tempPath, true); } DirectoryInfo dirInfo = Directory.CreateDirectory(tempPath); UtilSettings utilSettings = new UtilSettings(); utilSettings.TempFolder = tempPath; // the first arg should be the EXE path utilSettings.VaultClient = Environment.GetCommandLineArgs()[0]; string zipPath = Path.Combine(tempPath, PACKAGE_NAME); VDF.Vault.Currency.Entities.FileIteration vdfFile = new VDF.Vault.Currency.Entities.FileIteration(conn, files[0]); VDF.Currency.FilePathAbsolute vdfPath = new VDF.Currency.FilePathAbsolute(zipPath); AcquireFilesSettings acquireSettings = new AcquireFilesSettings(conn, false); acquireSettings.AddFileToAcquire(vdfFile, AcquireFilesSettings.AcquisitionOption.Download, vdfPath); AcquireFilesResults acquireResults = conn.FileManager.AcquireFiles(acquireSettings); foreach (FileAcquisitionResult acquireResult in acquireResults.FileResults) { if (acquireResult.Exception != null) { throw acquireResult.Exception; } } // clear the read-only bit System.IO.File.SetAttributes(zipPath, FileAttributes.Normal); FastZip zip = new FastZip(); zip.ExtractZip(zipPath, tempPath, null); MasterController mc = new MasterController(conn, vaultName); mc.SetMoveOperations(tempPath, utilSettings); utilSettings.Save(); MessageBox.Show("Updates downloaded. " + "You need exit the Vault client to complete the update process. " + Environment.NewLine + "The Vault Client will restart when the update is complete.", "Exit Required"); m_restartPending = true; entry.LastUpdate = files[0].CkInDate; settings.Save(); }