private void ButtonTabPanels_Click(object sender, RoutedEventArgs e) { if (sender == ButtonCreateDoc) { // show the edit panel OuterTabControl.SelectedItem = TabPanelEdit; ButtonAddUpdateDoc.Content = "Add"; //// TODO (MIHO, 2020-09-29): if the V1.1 template works and is adopted, the old //// V1.0 shall be removed completely (over complicated) */ //// make a template description for the content (remeber it) var desc = DocuShelfSemanticConfig.CreateVdi2770TemplateDesc(theOptions); // latest version (from resources) if (this.CheckBoxLatestVersion.IsChecked == true) { desc = DocuShelfSemanticConfig.CreateVdi2770v11TemplateDesc(); } this.currentFormDescription = desc; formInUpdateMode = false; updateSourceElements = null; // take over existing data this.currentFormInst = new FormInstanceSubmodelElementCollection(null, currentFormDescription); this.currentFormInst.PresetInstancesBasedOnSource(updateSourceElements); this.currentFormInst.outerEventStack = theEventStack; // bring it to the panel var elementsCntl = new FormListOfDifferentControl(); elementsCntl.ShowHeader = false; elementsCntl.DataContext = this.currentFormInst; ScrollViewerForm.Content = elementsCntl; } if (sender == ButtonAddUpdateDoc) { // add if (this.currentFormInst != null && this.currentFormDescription != null && thePackage != null && theOptions != null && _semConfig.SemIdDocument != null && theSubmodel != null) { // on this level of the hierarchy, shall a new SMEC be created or shall // the existing source of elements be used? AdminShell.SubmodelElementWrapperCollection currentElements = null; if (formInUpdateMode && updateSourceElements != null) { currentElements = updateSourceElements; } else { currentElements = new AdminShell.SubmodelElementWrapperCollection(); } // create a sequence of SMEs try { this.currentFormInst.AddOrUpdateDifferentElementsToCollection( currentElements, thePackage, addFilesToPackage: true); } catch (Exception ex) { Log.Error(ex, "when adding Document"); } // the InstSubmodel, which started the process, should have a "fresh" SMEC available // make it unique in the Documentens Submodel var newSmc = this.currentFormInst?.sme as AdminShell.SubmodelElementCollection; // if not update, put them into the Document's Submodel if (!formInUpdateMode && currentElements != null && newSmc != null) { // make newSmc unique in the cotext of the Submodel FormInstanceHelper.MakeIdShortUnique(theSubmodel.submodelElements, newSmc); // add the elements newSmc.value = currentElements; // add the whole SMC theSubmodel.Add(newSmc); } } else { Log.Error("Preconditions for adding Document not met."); } // change back OuterTabControl.SelectedItem = TabPanelList; // re-display ParseSubmodelToListItems( this.theSubmodel, this.theOptions, theViewModel.TheSelectedDocClass, theViewModel.TheSelectedLanguage, theViewModel.TheSelectedListType); // re-display also in Explorer var evt = new AasxPluginResultEventRedrawAllElements(); if (theEventStack != null) { theEventStack.PushEvent(evt); } } if (sender == ButtonCancel) { OuterTabControl.SelectedItem = TabPanelList; } if (sender == ButtonFixCDs) { // check if CDs are present var theDefs = new AasxPredefinedConcepts.DefinitionsVDI2770.SetOfDefsVDI2770( new AasxPredefinedConcepts.DefinitionsVDI2770()); var theCds = theDefs.GetAllReferables().Where( (rf) => { return(rf is AdminShell.ConceptDescription); }).ToList(); // v11 if (CheckBoxLatestVersion.IsChecked == true) { theCds = AasxPredefinedConcepts.VDI2770v11.Static.GetAllReferables().Where( (rf) => { return(rf is AdminShell.ConceptDescription); }).ToList(); } if (theCds.Count < 1) { Log.Error( "Not able to find appropriate ConceptDescriptions in pre-definitions. " + "Aborting."); return; } // check for Environment var env = this.thePackage?.AasEnv; if (env == null) { Log.Error( "Not able to access AAS environment for set of Submodel's ConceptDescriptions. Aborting."); return; } // be safe? if (MessageBoxResult.Yes != MessageBox.Show( "Add missing ConceptDescriptions to the AAS?", "Question", MessageBoxButton.YesNo, MessageBoxImage.Warning)) { return; } // ok, check int nr = 0; foreach (var x in theCds) { var cd = x as AdminShell.ConceptDescription; if (cd == null || cd.identification == null) { continue; } var cdFound = env.FindConceptDescription(cd.identification); if (cdFound != null) { continue; } // ok, add var newCd = new AdminShell.ConceptDescription(cd); env.ConceptDescriptions.Add(newCd); nr++; } // ok Log.Info("In total, {0} ConceptDescriptions were added to the AAS environment.", nr); } if (sender == ButtonCreateEntity) { // show the edit panel OuterTabControl.SelectedItem = TabPanelEntity; } if (sender == ButtonCancelEntity) { OuterTabControl.SelectedItem = TabPanelList; } if (sender == ButtonAddEntity && this.theSubmodel != null && TextBoxEntityIdShort.Text.Trim().HasContent()) { // add entity this.theSubmodel.SmeForWrite.CreateSMEForCD <AdminShell.Entity>( AasxPredefinedConcepts.VDI2770v11.Static.CD_DocumentedEntity, idShort: "" + TextBoxEntityIdShort.Text.Trim(), addSme: true); // switch back OuterTabControl.SelectedItem = TabPanelList; // re-display also in Explorer var evt = new AasxPluginResultEventRedrawAllElements(); if (theEventStack != null) { theEventStack.PushEvent(evt); } } }
private void DocumentEntity_MenuClick(DocumentEntity e, string menuItemHeader, object tag) { // first check if (e == null || menuItemHeader == null) { return; } // what to do? if (tag == null && menuItemHeader == "Edit" && e.SourceElementsDocument != null && e.SourceElementsDocumentVersion != null) { // show the edit panel OuterTabControl.SelectedItem = TabPanelEdit; ButtonAddUpdateDoc.Content = "Update"; // make a template description for the content (remeber it) formInUpdateMode = true; updateSourceElements = e.SourceElementsDocument; var desc = DocuShelfSemanticConfig.CreateVdi2770TemplateDesc(theOptions); // latest version (from resources) if (e.SmVersion == DocumentEntity.SubmodelVersion.V11) { desc = DocuShelfSemanticConfig.CreateVdi2770v11TemplateDesc(); } this.currentFormDescription = desc; // take over existing data this.currentFormInst = new FormInstanceSubmodelElementCollection(null, currentFormDescription); this.currentFormInst.PresetInstancesBasedOnSource(updateSourceElements); this.currentFormInst.outerEventStack = theEventStack; // bring it to the panel var elementsCntl = new FormListOfDifferentControl(); elementsCntl.ShowHeader = false; elementsCntl.DataContext = this.currentFormInst; ScrollViewerForm.Content = elementsCntl; // OK return; } if (tag == null && menuItemHeader == "Delete" && e.SourceElementsDocument != null && e.SourceElementsDocumentVersion != null && theSubmodel?.submodelElements != null && theOptions != null) { // the source elements need to match a Document foreach (var smcDoc in theSubmodel.submodelElements.FindAllSemanticIdAs <AdminShell.SubmodelElementCollection>( _semConfig.SemIdDocument)) { if (smcDoc?.value == e.SourceElementsDocument) { // identify as well the DocumentVersion // (convert to List() because of Count() below) var allVers = e.SourceElementsDocument.FindAllSemanticIdAs <AdminShell.SubmodelElementCollection>( _semConfig.SemIdDocumentVersion).ToList(); foreach (var smcVer in allVers) { if (smcVer?.value == e.SourceElementsDocumentVersion) { // access if (smcVer == null || smcVer.value == null || smcDoc == null || smcDoc.value == null) { continue; } // ask back .. the old-fashioned way! if (MessageBoxResult.Yes != MessageBox.Show( "Delete Document?", "Question", MessageBoxButton.YesNo, MessageBoxImage.Warning)) { return; } // confirmed! -> delete if (allVers.Count < 2) { // remove the whole document! theSubmodel.submodelElements.Remove(smcDoc); } else { // remove only the document version e.SourceElementsDocument.Remove(smcVer); } // switch back to docs // change back OuterTabControl.SelectedItem = TabPanelList; // re-display ParseSubmodelToListItems( this.theSubmodel, this.theOptions, theViewModel.TheSelectedDocClass, theViewModel.TheSelectedLanguage, theViewModel.TheSelectedListType); // re-display also in Explorer var evt = new AasxPluginResultEventRedrawAllElements(); if (theEventStack != null) { theEventStack.PushEvent(evt); } // OK return; } } // ReSharper enable PossibleMultipleEnumeration } } } // save digital file if (tag == null && menuItemHeader == "Save file .." && e.DigitalFile?.Path.HasContent() == true) { // make a file available var inputFn = e.DigitalFile.Path; if (CheckIfPackageFile(inputFn)) { inputFn = thePackage.MakePackageFileAvailableAsTempFile(e.DigitalFile.Path); } if (!inputFn.HasContent()) { Log.Error("Error making digital file available. Aborting!"); return; } // ask for a file name var dlg = new Microsoft.Win32.SaveFileDialog(); dlg.Title = "Save digital file as .."; dlg.FileName = System.IO.Path.GetFileName(e.DigitalFile.Path); dlg.DefaultExt = "*" + System.IO.Path.GetExtension(e.DigitalFile.Path); dlg.Filter = "All files (*.*)|*.*"; if (true != dlg.ShowDialog()) { return; } // save try { File.Copy(inputFn, dlg.FileName); } catch (Exception ex) { Log.Error(ex, "while saveing digital file to user specified loacation"); } } // check for a document reference if (tag != null && tag is Tuple <DocumentEntity.DocRelationType, AdminShell.Reference> reltup && reltup.Item2 != null && reltup.Item2.Count > 0) { var evt = new AasxPluginResultEventNavigateToReference(); evt.targetReference = new AdminShell.Reference(reltup.Item2); this.theEventStack.PushEvent(evt); } }