コード例 #1
0
        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);
        }
コード例 #2
0
        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);
                    }
                }
            }
        }
コード例 #3
0
        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);
                }
            }
        }
コード例 #4
0
 public GenericBomCreator(AdminShell.AdministrationShellEnv env)
 {
     this.env = env;
     this.refStore = new AasReferenceStore();
     this.refStore.Index(env);
 }
コード例 #5
0
        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);
                        }
                    }
                }
            }
        }
コード例 #6
0
 public override bool ImportSubmodelElementsInto(AdminShell.AdministrationShellEnv env,
                                                 AdminShell.IManageSubmodelElements parent)
 {
     return(new Importer(env, Context).ImportSubmodelElements(this, parent));
 }
コード例 #7
0
        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
        }
コード例 #8
0
        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;
            }
        }