Example #1
0
        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");
                    }
                }
            }
        }
Example #3
0
        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");
            }
        }