private void Import(ExportTableRecord job, IFlyoutProvider fop, AdminShell.Submodel sm, AdminShell.AdministrationShellEnv env) { // get the import file var dlg = new Microsoft.Win32.OpenFileDialog(); try { dlg.InitialDirectory = System.IO.Path.GetDirectoryName( System.AppDomain.CurrentDomain.BaseDirectory); } catch (Exception ex) { AdminShellNS.LogInternally.That.SilentlyIgnoredError(ex); } dlg.Title = "Select text file to be exported"; if (job.Format == (int)ExportTableRecord.FormatEnum.TSF) { dlg.DefaultExt = "*.txt"; dlg.Filter = "Tab separated file (*.txt)|*.txt|Tab separated file (*.tsf)|*.tsf|All files (*.*)|*.*"; } if (job.Format == (int)ExportTableRecord.FormatEnum.LaTex) { dlg.DefaultExt = "*.tex"; dlg.Filter = "LaTex file (*.tex)|*.tex|All files (*.*)|*.*"; } if (job.Format == (int)ExportTableRecord.FormatEnum.Excel) { dlg.DefaultExt = "*.xlsx"; dlg.Filter = "Microsoft Excel (*.xlsx)|*.xlsx|All files (*.*)|*.*"; } if (job.Format == (int)ExportTableRecord.FormatEnum.Word) { dlg.DefaultExt = "*.docx"; dlg.Filter = "Microsoft Word (*.docx)|*.docx|All files (*.*)|*.*"; } fop?.StartFlyover(new EmptyFlyout()); var res = dlg.ShowDialog(fop?.GetWin32Window()); fop?.CloseFlyover(); if (true != res) { return; } // try import try { Log.Info("Importing table: {0}", dlg.FileName); var success = false; try { if (job.Format == (int)ExportTableRecord.FormatEnum.Word) { success = true; var pop = new ImportPopulateByTable(Log, job, sm, env, options); using (var stream = File.Open(dlg.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) foreach (var tp in ImportTableWordProvider.CreateProviders(stream)) { pop.PopulateBy(tp); } } if (job.Format == (int)ExportTableRecord.FormatEnum.Excel) { success = true; var pop = new ImportPopulateByTable(Log, job, sm, env, options); foreach (var tp in ImportTableExcelProvider.CreateProviders(dlg.FileName)) { pop.PopulateBy(tp); } } } catch (Exception ex) { Log?.Error(ex, "importing table"); success = false; } if (!success) { fop?.MessageBoxFlyoutShow( "Some error occured while importing the table. Please refer to the log messages.", "Error", AnyUiMessageBoxButton.OK, AnyUiMessageBoxImage.Exclamation); } } catch (Exception ex) { Log.Error(ex, "When exporting table, an error occurred"); } }
// // UI higher-level stuff (taken over and maintained in from MainWindow.CommandBindings.cs) // public void CommandBinding_FileRepoAll(Control senderList, PackageContainerListBase fr, string cmd) { // access if (cmd == null || _flyout == null) { return; } cmd = cmd.ToLower().Trim(); // modify list if (fr != null && RepoList != null && RepoList.Contains(fr)) { if (cmd == "filerepoclose") { if (AnyUiMessageBoxResult.OK != _flyout.MessageBoxFlyoutShow( "Close file repository? Pending changes might be unsaved!", "AASX File Repository", AnyUiMessageBoxButton.OKCancel, AnyUiMessageBoxImage.Hand)) { return; } RepoList.Remove(fr); } if (cmd == "item-up") { // TODO (MIHO, 2021-01-09): check to use moveup/down of the PackageContainerListBase int i = RepoList.IndexOf(fr); if (i > 0) { RepoList.RemoveAt(i); RepoList.Insert(i - 1, fr); } } if (cmd == "item-down") { // TODO (MIHO, 2021-01-09): check to use moveup/down of the PackageContainerListBase int i = RepoList.IndexOf(fr); if (i < RepoList.Count - 1) { RepoList.RemoveAt(i); RepoList.Insert(i + 1, fr); } } if (cmd == "filereposaveas") { // prepare dialogue var outputDlg = new Microsoft.Win32.SaveFileDialog(); outputDlg.Title = "Select AASX file repository to be saved"; outputDlg.FileName = "new-aasx-repo.json"; if (fr is PackageContainerListLocal frl && frl.Filename.HasContent()) { outputDlg.InitialDirectory = Path.GetDirectoryName(frl.Filename); outputDlg.FileName = Path.GetFileName(frl.Filename); } outputDlg.DefaultExt = "*.json"; outputDlg.Filter = "AASX repository files (*.json)|*.json|All files (*.*)|*.*"; if (Options.Curr.UseFlyovers && _flyout != null) { _flyout.StartFlyover(new EmptyFlyout()); } var res = outputDlg.ShowDialog(); if (Options.Curr.UseFlyovers && _flyout != null) { _flyout.CloseFlyover(); } if (res != true) { return; } // OK! var fn = outputDlg.FileName; try { Log.Singleton.Info($"Saving AASX file repository to {fn} .."); fr.SaveAsLocalFile(fn); if (fr is PackageContainerListLocal frl2) { frl2.Filename = fn; } } catch (Exception ex) { Log.Singleton.Error(ex, $"When saving AASX file repository to {fn}"); } } if (cmd == "filerepoquery") { // dialogue var uc = new SelectFromRepositoryFlyout(); uc.Margin = new Thickness(10); if (uc.LoadAasxRepoFile(items: fr.EnumerateItems())) { uc.ControlClosed += () => { var fi = uc.ResultItem; var fn = fi?.Location; if (fn != null) { // start animation fr.StartAnimation(fi, PackageContainerRepoItem.VisualStateEnum.ReadFrom); try { // load Log.Singleton.Info("Switching to AASX repository file {0} ..", fn); FileDoubleClick?.Invoke(senderList, fr, fi); } catch (Exception ex) { Log.Singleton.Error( ex, $"When switching to AASX repository file {fn}."); } } }; _flyout.StartFlyover(uc); } } if (cmd == "filerepomakerelative") { if (fr is PackageContainerListLocal frl) { // make sure if (AnyUiMessageBoxResult.OK != _flyout.MessageBoxFlyoutShow( "Make filename relative to the locaton of the file repository? " + "This enables re-locating the repository.", "AASX File Repository", AnyUiMessageBoxButton.OKCancel, AnyUiMessageBoxImage.Hand)) { return; } if (!frl.Filename.HasContent()) { Log.Singleton.Error("AASX file repository has no valid filename!"); return; } // execute (is data binded) try { Log.Singleton.Info("Make AASX file names relative to {0}", Path.GetFullPath(Path.GetDirectoryName("" + frl.Filename))); frl.MakeFilenamesRelative(); } catch (Exception ex) { Log.Singleton.Error( ex, $"When making AASX file names in repository relative."); } } } if (cmd == "filerepoprint") { // try print try { AasxPrintFunctions.PrintRepositoryCodeSheet( repoDirect: fr, title: "AASX file repository"); } catch (Exception ex) { Log.Singleton.Error(ex, "When printing, an error occurred"); } } if (cmd == "filerepoaddcurrent") { // check var veAas = _manageVisuElems?.GetSelectedItem() as VisualElementAdminShell; var veEnv = veAas?.FindFirstParent((ve) => (ve is VisualElementEnvironmentItem vev && vev.theItemType == VisualElementEnvironmentItem.ItemType.Package), includeThis: false) as VisualElementEnvironmentItem; if (veAas == null || veAas.theAas == null || veAas.theEnv == null || veAas.thePackage == null || veEnv == null || !veEnv.thePackageSourceFn.HasContent()) { _flyout.MessageBoxFlyoutShow( "No valid AAS selected. The application needs to be in edit mode. " + "Aborting.", "AASX File repository", AnyUiMessageBoxButton.OK, AnyUiMessageBoxImage.Error); return; } // generate appropriate container var cnt = PackageContainerFactory.GuessAndCreateFor( null, veEnv.thePackageSourceFn, veEnv.thePackageSourceFn, overrideLoadResident: false, containerOptions: PackageContainerOptionsBase.CreateDefault(Options.Curr)); if (cnt is PackageContainerRepoItem ri) { ri.Env = veAas.thePackage; ri.CalculateIdsTagAndDesc(); fr.Add(ri); } } if (cmd == "filerepomultiadd") { // get the input files var inputDlg = new Microsoft.Win32.OpenFileDialog(); inputDlg.Title = "Multi-select AASX package files to be in repository"; inputDlg.Filter = "AASX package files (*.aasx)|*.aasx" + "|AAS XML file (*.xml)|*.xml|All files (*.*)|*.*"; inputDlg.Multiselect = true; _flyout.StartFlyover(new EmptyFlyout()); var res = inputDlg.ShowDialog(); _flyout.CloseFlyover(); if (res != true || inputDlg.FileNames.Length < 1) { return; } // loop foreach (var fn in inputDlg.FileNames) { fr.AddByAasxFn(_packageCentral, fn); } } if (cmd == "filerepoaddfromserver") { // read server address var uc = new TextBoxFlyout("REST endpoint (without \"/server/listaas\"):", AnyUiMessageBoxImage.Question); uc.Text = Options.Curr.DefaultConnectRepositoryLocation; _flyout.StartFlyoverModal(uc); if (!uc.Result) { return; } // execute try { var conn = new PackageConnectorHttpRest(null, new Uri(uc.Text)); var task = Task.Run(() => conn.GenerateRepositoryFromEndpointAsync()); var items = task.Result; if (items == null || items.Count < 1) { Log.Singleton.Error($"When adding file repo items from REST server {uc.Text}," + $"the function returned NO items!"); return; } // loop foreach (var fi in items) { fr.Add(fi); } } catch (Exception ex) { Log.Singleton.Error(ex, $"When adding file repo items from REST server {uc.Text}, " + $"an error occurred"); } } } }
private void Export(ExportTableRecord job, IFlyoutProvider fop, AdminShell.Submodel sm, AdminShell.AdministrationShellEnv env) { // prepare list of items to be exported var list = new List <ExportTableAasEntitiesList>(); ExportTable_EnumerateSubmodel(list, env, broadSearch: false, actInHierarchy: job.ActInHierarchy, depth: 1, sm: sm, sme: null); // get the output file var dlg = new Microsoft.Win32.SaveFileDialog(); try { dlg.InitialDirectory = System.IO.Path.GetDirectoryName( System.AppDomain.CurrentDomain.BaseDirectory); } catch (Exception ex) { AdminShellNS.LogInternally.That.SilentlyIgnoredError(ex); } dlg.Title = "Select text file to be exported"; if (job.Format == (int)ExportTableRecord.FormatEnum.TSF) { dlg.FileName = "new.txt"; dlg.DefaultExt = "*.txt"; dlg.Filter = "Tab separated file (*.txt)|*.txt|Tab separated file (*.tsf)|*.tsf|All files (*.*)|*.*"; } if (job.Format == (int)ExportTableRecord.FormatEnum.LaTex) { dlg.FileName = "new.tex"; dlg.DefaultExt = "*.tex"; dlg.Filter = "LaTex file (*.tex)|*.tex|All files (*.*)|*.*"; } if (job.Format == (int)ExportTableRecord.FormatEnum.Excel) { dlg.FileName = "new.xlsx"; dlg.DefaultExt = "*.xlsx"; dlg.Filter = "Microsoft Excel (*.xlsx)|*.xlsx|All files (*.*)|*.*"; } if (job.Format == (int)ExportTableRecord.FormatEnum.Word) { dlg.FileName = "new.docx"; dlg.DefaultExt = "*.docx"; dlg.Filter = "Microsoft Word (*.docx)|*.docx|All files (*.*)|*.*"; } fop?.StartFlyover(new EmptyFlyout()); var res = dlg.ShowDialog(fop?.GetWin32Window()); fop?.CloseFlyover(); try { if (res == true) { Log.Info("Exporting table: {0}", dlg.FileName); var success = false; try { if (job.Format == (int)ExportTableRecord.FormatEnum.TSF) { success = job.ExportTabSeparated(dlg.FileName, list); } if (job.Format == (int)ExportTableRecord.FormatEnum.LaTex) { success = job.ExportLaTex(dlg.FileName, list); } if (job.Format == (int)ExportTableRecord.FormatEnum.Excel) { success = job.ExportExcel(dlg.FileName, list); } if (job.Format == (int)ExportTableRecord.FormatEnum.Word) { success = job.ExportWord(dlg.FileName, list); } } catch (Exception ex) { Log.Error(ex, "performing data format export"); success = false; } if (!success) { fop?.MessageBoxFlyoutShow( "Some error occured while exporting the table. Please refer to the log messages.", "Error", AnyUiMessageBoxButton.OK, AnyUiMessageBoxImage.Exclamation); } } } catch (Exception ex) { Log.Error(ex, "When exporting table, an error occurred"); } }