public static List <VisualElementGeneric> GenerateVisualElementsFromShellEnv( TreeViewLineCache cache, AdminShell.AdministrationShellEnv env, AdminShellPackageEnv package = null, string packageSourceFn = 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; // tracking references of Submodels var referencedSubmodels = new List <AdminShell.Submodel>(); // interested plug-ins var pluginsToCheck = new List <Plugins.PluginInstance>(); if (Plugins.LoadedPlugins != null) { foreach (var lpi in Plugins.LoadedPlugins.Values) { try { var x = lpi.InvokeAction( "get-check-visual-extension") as AasxIntegrationBase.AasxPluginResultBaseObject; if (x != null && (bool)x.obj) { pluginsToCheck.Add(lpi); } } catch (Exception ex) { AdminShellNS.LogInternally.That.SilentlyIgnoredError(ex); } } } // many operations -> make it bulletproof try { if (editMode) { // package tiPackage = new VisualElementEnvironmentItem( null /* Parent */, cache, package, env, VisualElementEnvironmentItem.ItemType.Package, packageSourceFn); 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, package, 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) { AasxPackageExplorer.Log.Singleton.Error("Cannot find some submodel!"); } else { referencedSubmodels.Add(sm); } // item (even if sm is null) var tiSm = new VisualElementSubmodelRef(tiAas, cache, env, smr, sm); tiSm.SetIsExpandedIfNotTouched(expandMode > 1); // check for visual extensions foreach (var lpi in pluginsToCheck) { try { var ext = lpi.InvokeAction( "call-check-visual-extension", sm) as AasxIntegrationBase.AasxPluginResultVisualExtension; if (ext != null) { var tiExt = new VisualElementPluginExtension( tiSm, cache, package, sm, lpi, ext); tiSm.Members.Add(tiExt); } } catch (Exception ex) { AdminShellNS.LogInternally.That.SilentlyIgnoredError(ex); } } // recursively into the submodel elements if (sm != null) { 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); } // alternative code deleted { // head var tiAllSubmodels = new VisualElementEnvironmentItem( tiEnv, cache, package, env, VisualElementEnvironmentItem.ItemType.AllSubmodels); tiAllSubmodels.SetIsExpandedIfNotTouched(expandMode > 0); tiEnv.Members.Add(tiAllSubmodels); // show all Submodels foreach (var sm in env.Submodels) { var tiSm = new VisualElementSubmodel(tiAllSubmodels, cache, env, sm); tiSm.SetIsExpandedIfNotTouched(expandMode > 1); tiAllSubmodels.Members.Add(tiSm); } } } // 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) { AasxPackageExplorer.Log.Singleton.Error(ex, "Generating tree of visual elements"); } // end return(res); }
private static void RecurseExportAsTemplate( AdminShell.SubmodelElementWrapperCollection smwc, FormDescListOfElement tels, AdminShell.AdministrationShellEnv env = null, AdminShell.ListOfConceptDescriptions cds = null) { // access if (smwc == null || tels == null) { return; } // over all elems foreach (var smw in smwc) { if (smw != null && smw.submodelElement != null) { FormDescSubmodelElement tsme = null; if (smw.submodelElement is AdminShell.Property p) { tsme = new FormDescProperty( "" + p.idShort, FormMultiplicity.One, p.semanticId?.GetAsExactlyOneKey(), "" + p.idShort, valueType: p.valueType); } if (smw.submodelElement is AdminShell.MultiLanguageProperty mlp) { tsme = new FormDescMultiLangProp( "" + mlp.idShort, FormMultiplicity.One, mlp.semanticId?.GetAsExactlyOneKey(), "" + mlp.idShort); } if (smw.submodelElement is AdminShell.File fl) { tsme = new FormDescFile( "" + fl.idShort, FormMultiplicity.One, fl.semanticId?.GetAsExactlyOneKey(), "" + fl.idShort); } if (smw.submodelElement is AdminShell.ReferenceElement rf) { tsme = new FormDescReferenceElement( "" + rf.idShort, FormMultiplicity.One, rf.semanticId?.GetAsExactlyOneKey(), "" + rf.idShort); } if (smw.submodelElement is AdminShell.SubmodelElementCollection smec) { tsme = new FormDescSubmodelElementCollection( "" + smec.idShort, FormMultiplicity.One, smec.semanticId?.GetAsExactlyOneKey(), "" + smec.idShort); } if (tsme != null) { // take over directly tsme.PresetCategory = smw.submodelElement.category; // Qualifers var qs = smw.submodelElement.qualifiers; var q = qs?.FindType("FormTitle"); if (q != null) { tsme.FormTitle = "" + q.value; } q = qs?.FindType("FormInfo"); if (q != null) { tsme.FormInfo = "" + q.value; } q = qs?.FindType("EditIdShort"); if (q != null) { tsme.FormEditIdShort = q.value.Trim().ToLower() == "true"; } q = qs?.FindType("EditDescription"); if (q != null) { tsme.FormEditDescription = q.value.Trim().ToLower() == "true"; } q = qs?.FindType("Multiplicity"); if (q != null) { foreach (var m in (FormMultiplicity[])Enum.GetValues(typeof(FormMultiplicity))) { if (("" + q.value) == Enum.GetName(typeof(FormMultiplicity), m)) { tsme.Multiplicity = m; } } } q = qs?.FindType("PresetValue"); if (q != null && tsme is FormDescProperty) { (tsme as FormDescProperty).presetValue = "" + q.value; } q = qs?.FindType("PresetMimeType"); if (q != null && tsme is FormDescFile) { (tsme as FormDescFile).presetMimeType = "" + q.value; } q = qs?.FindType("FormChoices"); if (q != null && q.value.HasContent() && tsme is FormDescProperty fdprop) { var choices = q.value.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (choices != null && choices.Length > 0) { fdprop.comboBoxChoices = choices; } } // adopt presetIdShort if (tsme.Multiplicity == FormMultiplicity.ZeroToMany || tsme.Multiplicity == FormMultiplicity.OneToMany) { tsme.PresetIdShort += "{0:00}"; } // Ignore this element q = qs?.FindType("FormIgnore"); if (q != null) { continue; } } if (tsme != null) { tels.Add(tsme); } // in any case, check for CD if (env != null && cds != null && smw?.submodelElement?.semanticId?.Keys != null) { var masterCd = env.FindConceptDescription(smw?.submodelElement?.semanticId?.Keys); if (masterCd != null && masterCd.identification != null) { // already in cds? var copyCd = cds.Find(masterCd.identification); if (copyCd == null) { // add clone cds.Add(new AdminShell.ConceptDescription(masterCd)); } } } // recurse if (smw.submodelElement is AdminShell.SubmodelElementCollection) { RecurseExportAsTemplate( (smw.submodelElement as AdminShell.SubmodelElementCollection).value, (tsme as FormDescSubmodelElementCollection).value, env, cds); } } } }
private static void GenerateVisualElementsFromShellEnvAddElements( TreeViewLineCache cache, AdminShell.AdministrationShellEnv env, VisualElementGeneric parent, AdminShell.Referable parentContainer, AdminShell.SubmodelElementWrapper el) { var ti = new VisualElementSubmodelElement(parent, cache, env, parentContainer, el); parent.Members.Add(ti); // Recurse: SMC if (el.submodelElement is AdminShell.SubmodelElementCollection elc && elc.value != null) { foreach (var elcc in elc.value) { GenerateVisualElementsFromShellEnvAddElements(cache, env, ti, elc, elcc); } } // Recurse: Entity // ReSharper disable ExpressionIsAlwaysNull if (el.submodelElement is AdminShell.Entity ele && ele.statements != null) { foreach (var eles in ele.statements) { GenerateVisualElementsFromShellEnvAddElements(cache, env, ti, ele, eles); } } // ReSharper enable ExpressionIsAlwaysNull // Recurse: Operation if (el.submodelElement is AdminShell.Operation elo) { if (elo.inputVariable != null) { foreach (var vin in elo.inputVariable) { ti.Members.Add( new VisualElementOperationVariable( ti, cache, env, el.submodelElement, vin, AdminShell.OperationVariable.Direction.In)); } } if (elo.outputVariable != null) { foreach (var vout in elo.outputVariable) { ti.Members.Add( new VisualElementOperationVariable( ti, cache, env, el.submodelElement, vout, AdminShell.OperationVariable.Direction.Out)); } } if (elo.inoutputVariable != null) { foreach (var vout in elo.inoutputVariable) { ti.Members.Add( new VisualElementOperationVariable( ti, cache, env, el.submodelElement, vout, AdminShell.OperationVariable.Direction.InOut)); } } } // Recurse: AnnotatedRelationshipElement if (el.submodelElement is AdminShell.AnnotatedRelationshipElement ela && ela.annotations != null) { foreach (var elaa in ela.annotations) { GenerateVisualElementsFromShellEnvAddElements(cache, env, ti, ela, elaa); } } }
public GenericBomCreator(AdminShell.AdministrationShellEnv env) { this.env = env; this.refStore = new AasReferenceStore(); this.refStore.Index(env); }
private void ExportTable_EnumerateSubmodel( ExportTableAasEntitiesList list, AdminShell.AdministrationShellEnv env, bool broadSearch, int depth, AdminShell.Submodel sm, AdminShell.SubmodelElement sme) { // check if (list == null || env == null || sm == null) { return; } // // Submodel or SME ?? // AdminShell.IEnumerateChildren coll = null; if (sme == null) { // yield SM list.Add(new ExportTableAasEntitiesItem(depth, sm: sm)); // use collection coll = sm; } else { // simple check for SME collection if (sme is AdminShell.IEnumerateChildren) { coll = (sme as AdminShell.IEnumerateChildren); } } // pass 1: process value if (coll != null) { foreach (var ci in coll.EnumerateChildren()) { // gather data for this entity var sme2 = ci.submodelElement; var cd = env.FindConceptDescription(sme2?.semanticId?.Keys); list.Add(new ExportTableAasEntitiesItem(depth, sm, sme2, cd)); // go directly deeper? if (!broadSearch && ci.submodelElement != null && ci.submodelElement is AdminShell.IEnumerateChildren) { ExportTable_EnumerateSubmodel( list, env, broadSearch: false, depth: 1 + depth, sm: sm, sme: ci.submodelElement); } } } // pass 2: go for recursion AFTER? if (broadSearch) { if (coll != null) { foreach (var ci in coll.EnumerateChildren()) { if (ci.submodelElement != null && ci.submodelElement is AdminShell.IEnumerateChildren) { ExportTable_EnumerateSubmodel( list, env, broadSearch: true, depth: 1 + depth, sm: sm, sme: ci.submodelElement); } } } } }
public override bool ImportSubmodelElementsInto(AdminShell.AdministrationShellEnv env, AdminShell.IManageSubmodelElements parent) { return(new Importer(env, Context).ImportSubmodelElements(this, parent)); }
public static void ImportBMEcatToSubModel( string inputFn, AdminShell.AdministrationShellEnv env, AdminShell.Submodel sm, AdminShell.SubmodelRef smref) { // Select between BMEcat and XML publication // Tag "<BMECAT" for BMEcat File // Tag "<Publication" for XML from GWIS Boolean isBMEcat = false; Boolean isPublication = false; XmlTextReader reader = new XmlTextReader(inputFn); StreamWriter sw = File.CreateText(inputFn + ".log.txt"); // BMEcat or Publication? while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: // The node is an element. if (reader.Name == "BMECAT") { isBMEcat = true; } if (reader.Name == "Publication") { isPublication = true; } break; } if (isBMEcat || isPublication) { break; } } // BMEcat String FT_ID = ""; String FT_NAME = ""; String[] FVALUE = new string[] { "", "", "", "", "", "", "", "", "", "" }; int i_FVALUE = 0; String FUNIT = ""; String FID = ""; String FPARENT_ID = ""; Boolean is_FT_ID = false; Boolean is_FT_NAME = false; Boolean is_FVALUE = false; Boolean is_FUNIT = false; Boolean is_FID = false; Boolean is_FPARENT_ID = false; String[] Stack_FID = new string[10]; int StackPointer_FID = 0; // GWIS XML Publication String attribute_label_id = ""; String attribute_value = ""; String subheadline = ""; Boolean is_technical_data = false; Boolean is_attribute_list = false; Boolean is_subheadline = false; Boolean is_attribute = false; Boolean is_attribute_label = false; Boolean is_attribute_value = false; AdminShell.SubmodelElementCollection[] propGroup = new AdminShell.SubmodelElementCollection[10]; // GWIS XML Publication if (isPublication) { while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: // The node is an element. if (reader.Name == "technical_data") { is_technical_data = true; } if (reader.Name == "attribute_list") { is_attribute_list = true; } if (reader.Name == "subheadline") { is_subheadline = true; } if (reader.Name == "attribute") { is_attribute = true; } if (reader.Name == "label") { is_attribute_label = true; } if (reader.Name == "value") { is_attribute_value = true; } break; case XmlNodeType.Text: //Display the text in each element. if (is_technical_data && is_attribute_list && is_attribute && is_attribute_label) { attribute_label_id = reader.Value; is_attribute_label = false; } if (is_technical_data && is_attribute_list && is_attribute && is_attribute_value) { attribute_value = reader.Value; is_attribute_value = false; } if (is_technical_data && is_attribute_list && is_subheadline) { subheadline = reader.Value; } break; case XmlNodeType.EndElement: //Display the end of the element. if (reader.Name == "subheadline") { if (subheadline != "") { propGroup[0] = AdminShell.SubmodelElementCollection.CreateNew(subheadline); sm.Add(propGroup[0]); } } if (reader.Name == "attribute") { if (attribute_label_id != "" && attribute_value != "") { sw.WriteLine(attribute_label_id + " | " + attribute_value); using (var cd = AdminShell.ConceptDescription.CreateNew( "" + attribute_label_id, AdminShell.Identification.IRDI, FT_ID)) { env.ConceptDescriptions.Add(cd); cd.SetIEC61360Spec( preferredNames: new[] { "EN", attribute_label_id }, shortName: attribute_label_id, unit: "string", valueFormat: "STRING", definition: new[] { "EN", attribute_label_id } ); var p = AdminShell.Property.CreateNew( cd.GetDefaultShortName(), "PARAMETER", AdminShell.Key.GetFromRef(cd.GetCdReference())); if (is_subheadline) { propGroup[0].Add(p); } else { sm.Add(p); } p.valueType = "string"; p.value = attribute_value; } } is_attribute = false; attribute_value = ""; attribute_label_id = ""; } if (reader.Name == "attribute_list") { is_attribute_list = false; is_subheadline = false; subheadline = ""; } break; } } sw.Close(); return; } // BMEcat if (isBMEcat) { while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: // The node is an element. if (reader.Name == "FT_ID") { is_FT_ID = true; } if (reader.Name == "FT_NAME") { is_FT_NAME = true; } if (reader.Name == "FVALUE") { var rString = reader.GetAttribute("lang"); // only no language or English values if (rString == null || rString == "" || rString == "eng") { is_FVALUE = true; } } if (reader.Name == "FUNIT") { is_FUNIT = true; } if (reader.Name == "FID") { is_FID = true; } if (reader.Name == "FPARENT_ID") { is_FPARENT_ID = true; } break; case XmlNodeType.Text: //Display the text in each element. // BMEcat if (is_FT_ID) { FT_ID = reader.Value; is_FT_ID = false; } if (is_FT_NAME) { FT_NAME = reader.Value; is_FT_NAME = false; } if (is_FVALUE) { FVALUE[i_FVALUE++] = reader.Value; is_FVALUE = false; } if (is_FUNIT) { FUNIT = reader.Value; is_FUNIT = false; } if (is_FUNIT) { FUNIT = reader.Value; is_FUNIT = false; } if (is_FID) { FID = reader.Value; is_FID = false; } if (is_FPARENT_ID) { FPARENT_ID = reader.Value; is_FPARENT_ID = false; } break; case XmlNodeType.EndElement: //Display the end of the element. // BMEcat if (reader.Name == "FEATURE") { Boolean is_AXIS1D = (i_FVALUE == 6); int k; for (k = 0; k < i_FVALUE; k++) { sw.WriteLine(FT_ID + " | " + FT_NAME + " | " + FVALUE[k] + " | " + FUNIT + " | " + FID + " | " + FPARENT_ID); } if (FT_ID != "" && FT_NAME != "") // korrekter Eintrag { if (FPARENT_ID == "-1") { StackPointer_FID = 0; } if (i_FVALUE > 0) // Property { for (k = 0; k < i_FVALUE; k++) { if (FUNIT != "") { if (FUNIT == "0173-1#05-AAA480#002") { FUNIT = "mm | " + FUNIT; } else if (FUNIT == "0173-1#05-AAA731#002") { FUNIT = "kg | " + FUNIT; } else if (FUNIT == "0173-1#05-AAA153#002") { FUNIT = "V | " + FUNIT; } else if (FUNIT == "0173-1#05-AAA295#002") { FUNIT = "mm² | " + FUNIT; } else if (FUNIT == "0173-1#05-AAA723#002") { FUNIT = "mA | " + FUNIT; } else if (FUNIT == "0173-1#05-AAA114#002") { FUNIT = "ms | " + FUNIT; } else if (FUNIT == "0173-1#05-AAA220#002") { FUNIT = "A | " + FUNIT; } } string extendedname = FT_NAME; if (is_AXIS1D) // checked by IRDIs { extendedname += " " + names_AXIS1D[k]; } else if (i_FVALUE > 1 && i_FVALUE <= 4) { extendedname += " " + names_LEVELTYPE[k]; // MIN, MAX, ... } using (var cd = AdminShell.ConceptDescription.CreateNew( "" + extendedname, AdminShell.Identification.IRDI, FT_ID)) { env.ConceptDescriptions.Add(cd); cd.SetIEC61360Spec( preferredNames: new[] { "DE", extendedname, "EN", extendedname }, shortName: extendedname, unit: FUNIT, valueFormat: "REAL_MEASURE", definition: new[] { "DE", extendedname, "EN", extendedname } ); var p = AdminShell.Property.CreateNew( cd.GetDefaultShortName(), "PARAMETER", AdminShell.Key.GetFromRef(cd.GetCdReference())); p.valueType = "double"; p.value = FVALUE[k]; if (StackPointer_FID == 0) // am Submodell { sm.Add(p); } else // an Collection { for (int j = 0; j < StackPointer_FID; j++) { if (Stack_FID[j] == FPARENT_ID) // Vater gefunden { propGroup[j].Add(p); StackPointer_FID = j + 1; break; } } } } } } else // Collection { if (StackPointer_FID == 0) // oberste Collection { Stack_FID[0] = FID; propGroup[0] = AdminShell.SubmodelElementCollection.CreateNew(FT_NAME); sm.Add(propGroup[0]); StackPointer_FID++; // nächste Ebene } else // Collection suchen { for (int j = 0; j < StackPointer_FID; j++) { if (Stack_FID[j] == FPARENT_ID) // Vater gefunden { StackPointer_FID = j + 1; Stack_FID[StackPointer_FID] = FID; propGroup[StackPointer_FID] = AdminShell.SubmodelElementCollection.CreateNew(FT_NAME); propGroup[StackPointer_FID - 1].Add(propGroup[StackPointer_FID]); StackPointer_FID++; // nächste Ebene break; } } } } } FT_ID = ""; FT_NAME = ""; i_FVALUE = 0; FUNIT = ""; FID = ""; FPARENT_ID = ""; } break; } } } sw.Close(); // OZ end }
public void RebuildAasxElements( AdminShell.AdministrationShellEnv env = null, AdminShellPackageEnv package = null, AdminShellPackageEnv[] 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 treeViewInner.ItemsSource = displayedTreeViewLines; treeViewInner.UpdateLayout(); // select 1st if (displayedTreeViewLines.Count > 0) { displayedTreeViewLines[0].IsSelected = true; } }