Example #1
0
 public VisualElementEnvironmentItem(VisualElementGeneric parent, TreeViewLineCache cache, AdminShell.PackageEnv package, AdminShell.AdministrationShellEnv env, ItemType itemType)
     : base()
 {
     this.Parent      = parent;
     this.Cache       = cache;
     this.thePackage  = package;
     this.theEnv      = env;
     this.theItemType = itemType;
     this.Background  = (SolidColorBrush)(new BrushConverter().ConvertFrom("#B0B0B0"));
     this.Border      = (SolidColorBrush)(new BrushConverter().ConvertFrom("#404040"));
     this.Caption     = $"\"{ItemTypeNames[(int)itemType]}\"";
     this.Info        = "";
     this.IsTopLevel  = true;
     this.TagString   = "Env";
     if (theItemType == ItemType.EmptySet)
     {
         this.TagString = "\u2205";
         this.Caption   = "No information available";
     }
     if (theItemType == ItemType.Package && thePackage != null)
     {
         this.TagString = "\u25a2";
         this.Info     += "" + thePackage.Filename;
     }
     this.TagBg = this.Border;
     this.TagFg = Brushes.White;
     RestoreFromCache();
 }
Example #2
0
        public void PrepareDispEditEntity(AdminShell.PackageEnv package, VisualElementGeneric entity, bool editMode, bool hintMode)
        {
            // make UI visible settings ..
            // panels
            if (!editMode)
            {
                ContentPanelNoEdit.Visibility = Visibility.Visible;
                ContentPanelEdit.Visibility   = Visibility.Hidden;
            }
            else
            {
                ContentPanelNoEdit.Visibility = Visibility.Hidden;
                ContentPanelEdit.Visibility   = Visibility.Visible;
            }
            // further
            ShowContent.IsEnabled      = false;
            DragSource.Foreground      = Brushes.DarkGray;
            DownloadContent.IsEnabled  = false;
            this.showContentPackageUri = null;

            // update element view
            DispEditEntityPanel.DisplayOrEditVisualAasxElement(package, entity, editMode, hintMode, (thePackageAux == null) ? null : new AdminShell.PackageEnv[] { thePackageAux }, flyoutProvider: this);

            // show it
            Dispatcher.BeginInvoke((Action)(() => ElementTabControl.SelectedIndex = 0));

            // some entities require special handling
            if (entity is VisualElementSubmodelElement && (entity as VisualElementSubmodelElement).theWrapper.submodelElement is AdminShell.File)
            {
                var elem = (entity as VisualElementSubmodelElement).theWrapper.submodelElement;
                ShowContent.IsEnabled      = true;
                this.showContentPackageUri = (elem as AdminShell.File).value;
                DragSource.Foreground      = Brushes.Black;
            }
        }
Example #3
0
 public void UiLoadPackageAux(string fn)
 {
     Log.Info("Loading auxiliary AASX from: {0} ..", fn);
     // loading
     try
     {
         if (thePackageAux != null)
         {
             thePackageAux.Close();
         }
         thePackageAux = new AdminShell.PackageEnv(fn);
     }
     catch (Exception ex)
     {
         Log.Error(ex, $"When loading auxiliary {fn}, an error occurred");
         return;
     }
     // displaying
     try
     {
         RedrawAllAasxElements();
     }
     catch (Exception ex)
     {
         Log.Error(ex, $"When displaying element tree of {fn}, an error occurred");
         return;
     }
     Log.Info("Auxiliary AASX {0} loaded.", fn);
 }
        public void RebuildAasxElements(
            AdminShell.AdministrationShellEnv env = null,
            AdminShell.PackageEnv package         = null,
            AdminShell.PackageEnv[] auxPackages   = null, bool editMode = false, string filterElementName = null)
        {
            // clear tree
            displayedTreeViewLines = new List <VisualElementGeneric>();

            // valid?
            if (env != null)
            {
                // generate lines, add
                var x = Generators.GenerateVisualElementsFromShellEnv(treeViewLineCache, env, package, editMode, expandMode: 1);
                foreach (var xx in x)
                {
                    displayedTreeViewLines.Add(xx);
                }

                // more?
                if (auxPackages != null)
                {
                    foreach (var aux in auxPackages)
                    {
                        var x2 = Generators.GenerateVisualElementsFromShellEnv(treeViewLineCache, aux.AasEnv, aux, editMode, expandMode: 1);
                        foreach (var xx in x2)
                        {
                            displayedTreeViewLines.Add(xx);
                        }
                    }
                }

                // may be filter
                if (filterElementName != null)
                {
                    foreach (var dtl in displayedTreeViewLines)
                    {
                        // it is not likely, that we have to delete on this level, therefore don't care
                        FilterLeafsOfVisualElements(dtl, filterElementName);
                    }
                }

                // any of these lines?
                if (displayedTreeViewLines.Count < 1)
                {
                    // emergency
                    displayedTreeViewLines.Add(new VisualElementEnvironmentItem(null /* no parent */, treeViewLineCache, package, env, VisualElementEnvironmentItem.ItemType.EmptySet));
                }
            }

            // redraw
            tv1.ItemsSource = displayedTreeViewLines;
            tv1.UpdateLayout();

            // select 1st
            if (displayedTreeViewLines.Count > 0)
            {
                displayedTreeViewLines[0].IsSelected = true;
            }
        }
 public SelectAasEntityDialogueByTree(
     AdminShell.AdministrationShellEnv env,
     string filter = null,
     AdminShell.PackageEnv package       = null,
     AdminShell.PackageEnv[] auxPackages = null)
 {
     InitializeComponent();
     thePackage     = package;
     theAuxPackages = auxPackages;
     theEnv         = env;
     theFilter      = filter;
 }
Example #6
0
 public VisualElementSupplementalFile(VisualElementGeneric parent, TreeViewLineCache cache, AdminShell.PackageEnv package, AdminShell.PackageSupplementaryFile sf)
     : base()
 {
     this.Parent     = parent;
     this.Cache      = cache;
     this.thePackage = package;
     this.theFile    = sf;
     this.Background = (SolidColorBrush)(new BrushConverter().ConvertFrom("#D0D0D0"));
     this.Border     = (SolidColorBrush)(new BrushConverter().ConvertFrom("#606060"));
     this.TagString  = "\u25a4";
     this.TagBg      = (SolidColorBrush)(new BrushConverter().ConvertFrom("#707070"));;
     this.TagFg      = Brushes.White;
     RefreshFromMainData();
     RestoreFromCache();
 }
Example #7
0
        public void AddKeyListKeys(
            StackPanel view, string key,
            List <AdminShell.Key> keys,
            ModifyRepo repo = null,
            AdminShell.PackageEnv package = null,
            string addExistingEntities    = null)
        {
            // sometimes needless to show
            if (repo == null && (keys == null || keys.Count < 1))
            {
                return;
            }
            int rows = 1; // default!

            if (keys != null && keys.Count > 1)
            {
                rows = keys.Count;
            }
            int rowOfs = 0;

            if (repo != null)
            {
                rowOfs = 1;
            }

            // Grid
            var g = new Grid();

            g.Margin = new Thickness(0, 0, 0, 0);

            // 0 key
            var gc = new ColumnDefinition();

            gc.Width = new GridLength(100);
            g.ColumnDefinitions.Add(gc);

            // 1 type
            gc       = new ColumnDefinition();
            gc.Width = new GridLength(1.0, GridUnitType.Auto);
            g.ColumnDefinitions.Add(gc);

            // 2 local
            gc       = new ColumnDefinition();
            gc.Width = new GridLength(1.0, GridUnitType.Auto);
            g.ColumnDefinitions.Add(gc);

            // 3 id type
            gc       = new ColumnDefinition();
            gc.Width = new GridLength(1.0, GridUnitType.Auto);
            g.ColumnDefinitions.Add(gc);

            // 4 value
            gc       = new ColumnDefinition();
            gc.Width = new GridLength(1.0, GridUnitType.Star);
            g.ColumnDefinitions.Add(gc);

            // 5 buttons behind it
            gc       = new ColumnDefinition();
            gc.Width = new GridLength(1.0, GridUnitType.Auto);
            g.ColumnDefinitions.Add(gc);

            // rows
            for (int r = 0; r < rows + rowOfs; r++)
            {
                var gr = new RowDefinition();
                gr.Height = new GridLength(1.0, GridUnitType.Auto);
                g.RowDefinitions.Add(gr);
            }

            // populate key
            AddSmallLabelTo(g, 0, 0, margin: new Thickness(5, 0, 0, 0), content: "" + key + ":");

            // populate [+] and [Select] buttons
            if (repo != null)
            {
                var g2 = AddSmallGrid(1, 3, new string[] { "*", "#", "#" });
                Grid.SetRow(g2, 0);
                Grid.SetColumn(g2, 1);
                Grid.SetColumnSpan(g2, 5);
                g.Children.Add(g2);

                if (addExistingEntities != null && package != null)
                {
                    repo.RegisterControl(AddSmallButtonTo(g2, 0, 1, margin: new Thickness(2, 2, 2, 2), padding: new Thickness(5, 0, 5, 0), content: "Add existing"),
                                         (o) => {
                        var k2 = SmartSelectAasEntityKeys(package.AasEnv, addExistingEntities);
                        if (k2 != null)
                        {
                            keys.Clear();
                            keys.AddRange(k2);
                        }
                        return(new ModifyRepo.LambdaActionRedrawEntity());
                    });
                }

                repo.RegisterControl(AddSmallButtonTo(g2, 0, 2, margin: new Thickness(2, 2, 2, 2), padding: new Thickness(5, 0, 5, 0), content: "Add blank"),
                                     (o) => {
                    var k = new AdminShell.Key();
                    keys.Add(k);
                    return(new ModifyRepo.LambdaActionRedrawEntity());
                });
            }

            // contents?
            if (keys != null)
            {
                for (int i = 0; i < keys.Count; i++)
                {
                    if (repo == null)
                    {
                        // lang
                        AddSmallLabelTo(g, 0 + i + rowOfs, 1, padding: new Thickness(2, 0, 0, 0), content: "(" + keys[i].type + ")");

                        // local
                        AddSmallLabelTo(g, 0 + i + rowOfs, 2, padding: new Thickness(2, 0, 0, 0), content: "" + ((keys[i].local) ? "(Local)" : "(no-Local)"));

                        // id type
                        AddSmallLabelTo(g, 0 + i + rowOfs, 3, padding: new Thickness(2, 0, 0, 0), content: "[" + keys[i].idType + "]");

                        // value
                        AddSmallLabelTo(g, 0 + i + rowOfs, 4, padding: new Thickness(2, 0, 0, 0), content: "" + keys[i].value);
                    }

                    else
                    {
                        // save in current context
                        var currentI = 0 + i;

                        // type
                        var cbType = repo.RegisterControl(
                            AddSmallComboBoxTo(g, 0 + i + rowOfs, 1, margin: new Thickness(2, 2, 2, 2), text: "" + keys[currentI].type,
                                               minWidth: 100, items: AdminShell.Key.KeyElements, isEditable: false),
                            (o) =>
                        {
                            keys[currentI].type = o as string;
                            return(new ModifyRepo.LambdaActionNone());
                        }) as ComboBox;
                        SmallComboBoxSelectNearestItem(cbType, cbType.Text);

                        // local
                        repo.RegisterControl(
                            AddSmallCheckBoxTo(g, 0 + i + rowOfs, 2, margin: new Thickness(2, 2, 2, 2), content: "local", isChecked: keys[currentI].local),
                            (o) =>
                        {
                            keys[currentI].local = (bool)o;
                            return(new ModifyRepo.LambdaActionNone());
                        });

                        // id type
                        repo.RegisterControl(
                            AddSmallComboBoxTo(g, 0 + i + rowOfs, 3, margin: new Thickness(2, 2, 2, 2), text: "" + keys[currentI].idType,
                                               minWidth: 100, items: AdminShell.Key.IdentifierTypeNames, isEditable: false),
                            (o) =>
                        {
                            keys[currentI].idType = o as string;
                            return(new ModifyRepo.LambdaActionNone());
                        });

                        // value
                        repo.RegisterControl(
                            AddSmallTextBoxTo(g, 0 + i + rowOfs, 4, margin: new Thickness(2, 2, 2, 2), text: "" + keys[currentI].value),
                            (o) =>
                        {
                            keys[currentI].value = o as string;
                            return(new ModifyRepo.LambdaActionNone());
                        });

                        // button [-]
                        repo.RegisterControl(AddSmallButtonTo(g, 0 + i + rowOfs, 5, margin: new Thickness(2, 2, 2, 2), padding: new Thickness(5, 0, 5, 0), content: "-"),
                                             (o) => {
                            keys.RemoveAt(currentI);
                            return(new ModifyRepo.LambdaActionRedrawEntity());
                        });
                    }
                }
            }

            // in total
            view.Children.Add(g);
        }
Example #8
0
 public VisualElementGeneric SmartSelectAasEntityVisualElement(AdminShell.AdministrationShellEnv env, string filter = null, AdminShell.PackageEnv package = null, AdminShell.PackageEnv[] auxPackages = null)
 {
     if (this.flyoutProvider == null)
     {
         var dlg = new SelectAasEntityDialogueByTree(env, filter, package, auxPackages);
         if (dlg.ShowDialog() == true)
         {
             return(dlg.ResultVisualElement);
         }
     }
     else
     {
         var uc = new SelectAasEntityFlyout(env, filter, package, auxPackages);
         this.flyoutProvider.StartFlyoverModal(uc);
         if (uc.ResultVisualElement != null)
         {
             return(uc.ResultVisualElement);
         }
     }
     return(null);
 }
Example #9
0
        public static List <VisualElementGeneric> GenerateVisualElementsFromShellEnv(TreeViewLineCache cache, AdminShell.AdministrationShellEnv env, AdminShell.PackageEnv package = null, bool editMode = false, int expandMode = 0)
        {
            // clear tree
            var res = new List <VisualElementGeneric>();

            // valid?
            if (env == null)
            {
                return(res);
            }

            // need some attach points
            VisualElementEnvironmentItem tiPackage = null, tiEnv = null, tiShells = null, tiAssets = null, tiCDs = null;

            // many operytions -> make it bulletproof
            try
            {
                if (editMode)
                {
                    // package
                    tiPackage = new VisualElementEnvironmentItem(null /* Parent */, cache, package, env, VisualElementEnvironmentItem.ItemType.Package);
                    tiPackage.SetIsExpandedIfNotTouched(true);
                    res.Add(tiPackage);

                    // env
                    tiEnv = new VisualElementEnvironmentItem(tiPackage, cache, package, env, VisualElementEnvironmentItem.ItemType.Env);
                    tiEnv.SetIsExpandedIfNotTouched(expandMode > 0);
                    tiPackage.Members.Add(tiEnv);

                    // shells
                    tiShells = new VisualElementEnvironmentItem(tiEnv, cache, package, env, VisualElementEnvironmentItem.ItemType.Shells);
                    tiShells.SetIsExpandedIfNotTouched(expandMode > 0);
                    tiEnv.Members.Add(tiShells);

                    // assets
                    tiAssets = new VisualElementEnvironmentItem(tiEnv, cache, package, env, VisualElementEnvironmentItem.ItemType.Assets);
                    tiAssets.SetIsExpandedIfNotTouched(expandMode > 0);
                    tiEnv.Members.Add(tiAssets);

                    // concept descriptions
                    tiCDs = new VisualElementEnvironmentItem(tiEnv, cache, package, env, VisualElementEnvironmentItem.ItemType.ConceptDescriptions);
                    tiCDs.SetIsExpandedIfNotTouched(expandMode > 0);
                    tiEnv.Members.Add(tiCDs);
                }

                // over all Admin shells
                foreach (var aas in env.AdministrationShells)
                {
                    // item
                    var tiAas = new VisualElementAdminShell(null, cache, env, aas);
                    tiAas.SetIsExpandedIfNotTouched(expandMode > 0);

                    // add item
                    if (editMode)
                    {
                        tiAas.Parent = tiShells;
                        tiShells.Members.Add(tiAas);
                    }
                    else
                    {
                        res.Add(tiAas);
                    }

                    // have submodels?
                    if (aas.submodelRefs != null)
                    {
                        foreach (var smr in aas.submodelRefs)
                        {
                            var sm = env.FindSubmodel(smr);
                            if (sm == null)
                            {
                                Log.Error("Cannot find some submodel!");
                                continue;
                            }
                            // item
                            var tiSm = new VisualElementSubmodelRef(tiAas, cache, env, smr, sm);
                            tiSm.SetIsExpandedIfNotTouched(expandMode > 1);
                            // recursively into the submodel elements
                            if (sm.submodelElements != null)
                            {
                                foreach (var sme in sm.submodelElements)
                                {
                                    GenerateVisualElementsFromShellEnvAddElements(cache, env, tiSm, sm, sme);
                                }
                            }
                            // add
                            tiAas.Members.Add(tiSm);
                        }
                    }

                    // have views?
                    if (aas.views != null && aas.views.views != null)
                    {
                        foreach (var vw in aas.views.views)
                        {
                            // item
                            var tiVw = new VisualElementView(tiAas, cache, env, vw);
                            tiVw.SetIsExpandedIfNotTouched(expandMode > 1);
                            // recursion -> submodel elements
                            if (vw.containedElements != null && vw.containedElements.reference != null)
                            {
                                foreach (var ce in vw.containedElements.reference)
                                {
                                    var tiRf = new VisualElementReference(tiVw, cache, env, ce);
                                    tiVw.Members.Add(tiRf);
                                }
                            }
                            // add
                            tiAas.Members.Add(tiVw);
                        }
                    }
                }

                // if edit mode, then display further ..
                if (editMode)
                {
                    // over all assets
                    foreach (var asset in env.Assets)
                    {
                        // item
                        var tiAsset = new VisualElementAsset(tiAssets, cache, env, asset);
                        tiAssets.Members.Add(tiAsset);
                    }

                    // over all concept descriptions
                    foreach (var cd in env.ConceptDescriptions)
                    {
                        // item
                        var tiCD = new VisualElementConceptDescription(tiCDs, cache, env, cd);
                        tiCDs.Members.Add(tiCD);
                    }
                }

                // package as well?
                if (editMode && package != null && tiPackage != null)
                {
                    // file folder
                    var tiFiles = new VisualElementEnvironmentItem(tiPackage, cache, package, env, VisualElementEnvironmentItem.ItemType.SupplFiles);
                    tiFiles.SetIsExpandedIfNotTouched(expandMode > 0);
                    tiPackage.Members.Add(tiFiles);

                    // single files
                    var files = package.GetListOfSupplementaryFiles();
                    foreach (var fi in files)
                    {
                        tiFiles.Members.Add(new VisualElementSupplementalFile(tiFiles, cache, package, fi));
                    }
                }
            } catch (Exception ex)
            {
                Log.Error(ex, "Generating tree of visual elements");
            }

            // end
            return(res);
        }
Example #10
0
        public static void Test4()
        {
            // MAKE or LOAD prefs
            InputFilePrefs prefs  = new InputFilePrefs();
            var            preffn = "prefs.json";

            try {
                if (File.Exists(preffn))
                {
                    Log.WriteLine(2, "Opening {0} for reading preferences ..", preffn);
                    var init = File.ReadAllText(preffn);
                    Log.WriteLine(2, "Parsing preferences ..");
                    prefs = JsonConvert.DeserializeObject <InputFilePrefs>(init);
                }
                else
                {
                    Log.WriteLine(2, "Using built-in preferences ..");
                    var init = @"{ 'filerecs' : [
                            { 'fn' : 'data\\thumb-usb.jpeg',                'submodel' : 'thumb',   'targetdir' : '/',                      'args' : [ ] },
                            { 'fn' : 'data\\USB_Hexagon.stp',               'submodel' : 'cad',     'targetdir' : '/aasx/cad/',             'args' : [ '0173-1#02-ZBQ121#003' ] },
                            { 'fn' : 'data\\USB_Hexagon.igs',               'submodel' : 'cad',     'targetdir' : '/aasx/cad/',             'args' : [ '0173-1#02-ZBQ128#008' ] },
                            { 'fn' : 'data\\FES_100500.edz',                'submodel' : 'cad',     'targetdir' : '/aasx/cad/',             'args' : [ '0173-1#02-ZBQ133#002' ] },
                            { 'fn' : 'data\\USB_Hexagon_offen.jpeg',        'submodel' : 'docu',    'targetdir' : '/aasx/documentation/',   'args' : [ 'Drawings', '0173-1#02-ZWY722#001', 'Product rendering open', 'V1.2', '0173-1#02-ZHK61a#002' ] },
                            { 'fn' : 'data\\USB_Hexagon_geschlossen.jpeg',  'submodel' : 'docu',    'targetdir' : '/aasx/documentation/',   'args' : [ 'Presales', '0173-1#02-ZWX723#001', 'Product rendering closed', 'V1.2c', '0173-1#02-ZHK622#001' ] },
                            { 'fn' : 'data\\docu_cecc_presales_DE.PDF',     'submodel' : 'docu',    'targetdir' : '/aasx/documentation/',   'args' : [ 'Presales', '0173-1#02-ZWX723#001', 'Steuerungen CECC', 'V2.1.3', '0173-1#02-ZHK622#001' ] },
                            { 'fn' : 'data\\docu_cecc_presales_EN.PDF',     'submodel' : 'docu',    'targetdir' : '/aasx/documentation/',   'args' : [ 'Presales', '0173-1#02-ZWX723#001', 'Controls CECC', 'V2.1.4', '0173-1#02-ZHK622#001' ] },
                            { 'fn' : 'data\\USB_storage_medium_datasheet_EN.pdf', 'submodel' : 'docu', 'targetdir' : '/aasx/documentation/', 'args' : [ 'Technical specification', '0173-1#02-ZWX724#001', 'Datenblatt Steuerung CECC-LK', 'V1.0', '0173-1#02-ZHK622#001' ] },
                            { 'fn' : 'data\\docu_cecc_install_DE.PDF',      'submodel' : 'docu',    'targetdir' : '/aasx/documentation/',   'args' : [ 'Installation', '0173-1#02-ZWX725#001', 'Kurzbeschreibung Steuerung CECC-LK', 'V3.2a', '0173-1#02-ZHK622#001' ] },
                            { 'fn' : 'data\\docu_cecc_install_EN.PDF',      'submodel' : 'docu',    'targetdir' : '/aasx/documentation/',   'args' : [ 'Installation', '0173-1#02-ZWX725#001', 'Brief description control CECC-LK', 'V3.6b', '0173-1#02-ZHK622#001' ] },
                            { 'fn' : 'data\\docu_cecc_fullmanual_DE.PDF',   'submodel' : 'docu',    'targetdir' : '/aasx/documentation/',   'args' : [ 'Manual', '0173-1#02-ZWX727#001', 'Beschreibung Steuerung CECC-LK', '1403a', '0173-1#02-ZHK622#001' ] },
                            { 'fn' : 'data\\docu_cecc_fullmanual_EN.PDF',   'submodel' : 'docu',    'targetdir' : '/aasx/documentation/',   'args' : [ 'Manual', '0173-1#02-ZWX727#001', 'Description Steuerung CECC-LK', '1403a', '0173-1#02-ZHK622#001' ] },
                        ],  'webrecs' : [
                            { 'url' : 'https://www.festo.com/net/de_de/SupportPortal/Downloads/385954/407353/CECC_2013-05a_8031104e2.pdf',          'submodel' : 'docu',      'args' : [ 'Installation', '0173-1#02-ZWX725#001', 'Controlador CECC', '2013-05a', '0173-1#02-ZHK662#002' ] },
                            { 'url' : 'https://www.festo.com/net/SupportPortal/Files/407352/CECC_2013-05a_8031105x2.pdf',                           'submodel' : 'docu',      'args' : [ 'Installation', '0173-1#02-ZWX725#001', 'Controllore CECC', '2013-05a', '0173-1#02-ZHK699#003' ] },
                        ] }";
                    Log.WriteLine(3, "Dump of built-in preferences: {0}", init);
                    Log.WriteLine(2, "Parsing preferences ..");
                    prefs = JsonConvert.DeserializeObject <InputFilePrefs>(init);
                }
            } catch (Exception ex) {
                Console.Error.Write("While parsing preferences: " + ex.Message);
                Environment.Exit(-1);
            }

            // REPOSITORY
            var repo = new AdminShellNS.UriIdentifierRepository();

            try {
                if (!repo.Load("uri-repository.xml"))
                {
                    repo.InitRepository("uri-repository.xml");
                }
            } catch (Exception ex) {
                Console.Error.Write("While accessing URI repository: " + ex.Message);
                Environment.Exit(-1);
            }

            // AAS ENV
            var aasenv1 = new AdminShell.AdministrationShellEnv();

            try
            {
                // ASSET
                var asset1 = new AdminShell.Asset();
                aasenv1.Assets.Add(asset1);
                asset1.SetIdentification("URI", "http://pk.festo.com/3s7plfdrs35", "3s7plfdrs35");
                asset1.AddDescription("EN", "Festo USB Stick");
                asset1.AddDescription("DE", "Festo USB Speichereinheit");

                // CAD
                Log.WriteLine(2, "Creating submodel CAD ..");
                var subCad = CreateSubmodelCad(prefs, repo, aasenv1);

                // DOCU
                Log.WriteLine(2, "Creating submodel DOCU ..");
                var subDocu = CreateSubmodelDocumentation(prefs, repo, aasenv1);

                // DATASHEET
                Log.WriteLine(2, "Creating submodel DATASHEET ..");
                var subDatasheet = CreateSubmodelDatasheet(prefs, repo, aasenv1);
                //var subDatasheet = CreateSubmodelDatasheetSingleItems(repo, aasenv1);

                // VIEW1
                var view1 = CreateStochasticViewOnSubmodels(new AdminShell.Submodel[] { subCad, subDocu, subDatasheet }, "View1");

                // ADMIN SHELL
                Log.WriteLine(2, "Create AAS ..");
                var aas1 = AdminShell.AdministrationShell.CreateNew("URI", repo.CreateOneTimeId(), "1", "0");
                aas1.derivedFrom = new AdminShell.AssetAdministrationShellRef(new AdminShell.Key("AssetAdministrationShell", false, "URI", "www.admin-shell.io/aas/sample-series-aas/1/1"));
                aasenv1.AdministrationShells.Add(aas1);
                aas1.assetRef = asset1.GetReference();

                // Link things together
                Log.WriteLine(2, "Linking entities to AAS ..");
                aas1.submodelRefs.Add(subCad.GetReference() as AdminShell.SubmodelRef);
                aas1.submodelRefs.Add(subDocu.GetReference() as AdminShell.SubmodelRef);
                aas1.submodelRefs.Add(subDatasheet.GetReference() as AdminShell.SubmodelRef);
                aas1.AddView(view1);

                if (true)
                {
                    asset1.assetIdentificationModelRef = new AdminShell.SubmodelRef(subDatasheet.GetReference() as AdminShell.SubmodelRef);
                }
            }
            catch (Exception ex)
            {
                Console.Error.Write("While building AAS: {0} at {1}", ex.Message, ex.StackTrace);
                Environment.Exit(-1);
            }

            if (true)
            {
                try {
                    //
                    // Test serialize
                    // this generates a "sample.xml" is addition to the package below .. for direct usag, e.g.
                    //
                    Log.WriteLine(2, "Test serialize sample.xml ..");
                    using (var s = new StreamWriter("sample.xml"))
                    {
                        var serializer = new XmlSerializer(aasenv1.GetType());
                        var nss        = new XmlSerializerNamespaces();
                        nss.Add("aas", "http://www.admin-shell.io/aas/1/0");
                        nss.Add("IEC61360", "http://www.admin-shell.io/IEC61360/1/0");
                        serializer.Serialize(s, aasenv1, nss);
                    }
                } catch (Exception ex) {
                    Console.Error.Write("While test serializing XML: {0} at {1}", ex.Message, ex.StackTrace);
                    Environment.Exit(-1);
                }
            }

            //
            // Make PACKAGE
            //

            try {
                // use the library function
                var opcfn = "sample-admin-shell.aasx";
                Log.WriteLine(2, "Creating package {0} ..", opcfn);
                var package = new AdminShell.PackageEnv(aasenv1);

                // supplementary files
                Log.WriteLine(2, "Adding supplementary files ..");
                foreach (var fr in prefs.filerecs)
                {
                    Log.WriteLine(2, "  + {0}", fr.fn);
                    package.AddSupplementaryFileToStore(fr.fn, fr.targetdir, Path.GetFileName(fr.fn), fr.submodel == "thumb");
                }

                // save
                Log.WriteLine(2, "Saving ..");
                package.SaveAs(opcfn, writeFreshly: true);
                package.Close();
            } catch (Exception ex) {
                Console.Error.Write("While building OPC package: {0} at {1}", ex.Message, ex.StackTrace);
                Environment.Exit(-1);
            }
        }
Example #11
0
        private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            // decode
            if (e == null || e.Command == null || !(e.Command is RoutedUICommand))
            {
                return;
            }
            var cmd = (e.Command as RoutedUICommand).Text.Trim().ToLower();

            // decide
            if (cmd == "new")
            {
                if ((!Options.UseFlyovers && MessageBoxResult.Yes == MessageBox.Show("Create new Adminshell environment? This operation can not be reverted!", "AASX", MessageBoxButton.YesNo, MessageBoxImage.Warning))
                    ||
                    (Options.UseFlyovers && MessageBoxResult.Yes == MessageBoxFlyoutShow("Create new Adminshell environment? This operation can not be reverted!", "AASX", MessageBoxButton.YesNo, MessageBoxImage.Warning))
                    )
                {
                    try
                    {
                        // create new AASX package
                        thePackageEnv = new AdminShell.PackageEnv();
                        // redraw everything
                        RedrawAllAasxElements();
                        RedrawElementView();
                    }
                    catch (Exception ex)
                    {
                        Log.Error(ex, "When creating new AASX, an error occurred");
                        return;
                    }
                }
            }
            if (cmd == "open" || cmd == "openaux")
            {
                var dlg = new Microsoft.Win32.OpenFileDialog();
                try
                {
                    dlg.InitialDirectory = System.IO.Path.GetDirectoryName(thePackageEnv.Filename);
                }
                catch { }
                dlg.Filter = "AASX package files (*.aasx)|*.aasx|AAS XML file (*.xml)|*.xml|All files (*.*)|*.*";
                if (Options.UseFlyovers)
                {
                    this.StartFlyover(new EmptyFlyout());
                }
                var res = dlg.ShowDialog();
                if (Options.UseFlyovers)
                {
                    this.CloseFlyover();
                }
                if (res == true)
                {
                    if (cmd == "open")
                    {
                        UiLoadPackageEnv(dlg.FileName);
                    }
                    if (cmd == "openaux")
                    {
                        UiLoadPackageAux(dlg.FileName);
                    }
                }
            }
            if (cmd == "save")
            {
                try
                {
                    // save
                    thePackageEnv.SaveAs(thePackageEnv.Filename);
                    // as saving changes the structure of pending supplementary files, re-display
                    RedrawAllAasxElements();
                }
                catch (Exception ex)
                {
                    Log.Error(ex, "When saving AASX, an error occurred");
                    return;
                }
                Log.Info("AASX saved successfully: {0}", thePackageEnv.Filename);
            }
            if (cmd == "saveas")
            {
                var dlg = new Microsoft.Win32.SaveFileDialog();
                try
                {
                    dlg.InitialDirectory = System.IO.Path.GetDirectoryName(thePackageEnv.Filename);
                }
                catch { }
                dlg.FileName   = thePackageEnv.Filename;
                dlg.DefaultExt = "*.aasx";
                dlg.Filter     = "AASX package files (*.aasx)|*.aasx|AAS XML file (*.xml)|*.xml|All files (*.*)|*.*";
                if (Options.UseFlyovers)
                {
                    this.StartFlyover(new EmptyFlyout());
                }
                var res = dlg.ShowDialog();
                if (Options.UseFlyovers)
                {
                    this.CloseFlyover();
                }
                if (res == true)
                {
                    try
                    {
                        // save
                        thePackageEnv.SaveAs(dlg.FileName);
                        // as saving changes the structure of pending supplementary files, re-display
                        RedrawAllAasxElements();
                    }
                    catch (Exception ex)
                    {
                        Log.Error(ex, "When saving AASX, an error occurred");
                        return;
                    }
                    Log.Info("AASX saved successfully as: {0}", dlg.FileName);
                }
            }
            if (cmd == "close" && thePackageEnv != null)
            {
                if ((!Options.UseFlyovers && MessageBoxResult.Yes == MessageBox.Show(this, "Do you want to close the open package? Please make sure that you have saved before.", "Close Package?", MessageBoxButton.YesNo, MessageBoxImage.Question))
                    ||
                    (Options.UseFlyovers && MessageBoxResult.Yes == MessageBoxFlyoutShow("Do you want to close the open package? Please make sure that you have saved before.", "Close Package?", MessageBoxButton.YesNo, MessageBoxImage.Question))
                    )
                {
                    try
                    {
                        thePackageEnv.Close();
                        RedrawAllAasxElements();
                    }
                    catch (Exception ex)
                    {
                        Log.Error(ex, "When closing AASX, an error occurred");
                    }
                }
            }

            if (cmd == "closeaux" && thePackageAux != null)
            {
                try
                {
                    thePackageAux.Close();
                }
                catch (Exception ex)
                {
                    Log.Error(ex, "When closing auxiliary AASX, an error occurred");
                }
            }
            if (cmd == "exit")
            {
                /*
                 * if ((!Options.UseFlyovers && MessageBoxResult.Yes == MessageBox.Show(this, "Exit the application? Please make sure that you have saved before.", "Exit Application?", MessageBoxButton.YesNo, MessageBoxImage.Question))
                 ||
                 || (Options.UseFlyovers && MessageBoxResult.Yes == MessageBoxFlyoutShow("Exit the application? Please make sure that you have saved before.", "Exit Application?", MessageBoxButton.YesNo, MessageBoxImage.Question))
                 || )
                 */
                System.Windows.Application.Current.Shutdown();
            }
            if (cmd == "connect")
            {
                if (!Options.UseFlyovers)
                {
                    MessageBox.Show(this, "In future versions, this feature will allow connecting to an online Administration Shell via OPC UA or similar.\n" +
                                    "This feature is scope of the specification 'Details of the Adminstration Shell Part 1 V1.1' and 'Part 2'.", "Connect", MessageBoxButton.OK);
                }
                else
                {
                    MessageBoxFlyoutShow("In future versions, this feature will allow connecting to an online Administration Shell via OPC UA or similar.", "Connect", MessageBoxButton.OK, MessageBoxImage.Hand);
                }
            }
            if (cmd == "about")
            {
                var ab = new AboutBox();
                ab.ShowDialog();
            }
            if (cmd == "helpgithub")
            {
                theBrowser.Address = @"https://github.com/admin-shell/aasx-package-explorer/blob/master/help/index.md";
                Dispatcher.BeginInvoke((Action)(() => ElementTabControl.SelectedIndex = 1));
            }
            if (cmd == "editkey")
            {
                MenuItemWorkspaceEdit.IsChecked = !MenuItemWorkspaceEdit.IsChecked;
            }
            if (cmd == "hintskey")
            {
                MenuItemWorkspaceHints.IsChecked = !MenuItemWorkspaceHints.IsChecked;
            }
            if (cmd == "editmenu" || cmd == "editkey" || cmd == "hintsmenu" || cmd == "hintskey")
            {
                // edit mode affects the total element view
                RedrawAllAasxElements();
                // fake selection
                RedrawElementView();
            }
            if (cmd == "test")
            {
                /*
                 * string err = null;
                 * Log.Append(err + "");
                 * var p1 = new AdminShell.Property();
                 * p1.value = "42";
                 */
                /*
                 * var w1 = new AdminShell.SubmodelElementWrapper();
                 * w1.submodelElement = p1;
                 * var w2 = new AdminShell.SubmodelElementWrapper(w1);
                 */
                // var w2 = new AdminShell.SubmodelElementWrapper(p1);
                var uc = new MessageBoxFlyout("My very long message text!", "Caption", MessageBoxButton.OK, MessageBoxImage.Error);
                uc.ControlClosed += () =>
                {
                    Log.Info("Yes!");
                };
                this.StartFlyover(uc);
            }
            if (cmd == "queryrepo")
            {
                var uc = new SelectFromRepositoryFlyout();
                uc.Margin = new Thickness(10);
                if (uc.LoadAasxRepoFile(Options.AasxRepositoryFn))
                {
                    uc.ControlClosed += () =>
                    {
                        var fn = uc.ResultFilename;
                        if (fn != null && fn != "")
                        {
                            Log.Info("Switching to {0} ..", fn);
                            UiLoadPackageEnv(fn);
                        }
                    };
                    this.StartFlyover(uc);
                }
            }
        }