public void Component_PrivatePropertyIsMarkedAsDataMember_ItIsSerialized()
        {
            //Arrange
            long expectedValue = 2137;

            AttributeClass toSerialize = _fixture.Create <AttributeClass>();

            typeof(AttributeClass)
            .GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(f => f.Name.Contains("privateProperty"))?
            .SetValue(toSerialize, expectedValue);


            //Act
            var result = AvroConvert.Serialize(toSerialize);

            var deserialized = AvroConvert.Deserialize <AttributeClass>(result);


            //Assert
            Assert.NotNull(result);
            Assert.NotNull(deserialized);

            var resultValue = typeof(AttributeClass)
                              .GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(f => f.Name.Contains("privateProperty"))?
                              .GetValue(deserialized);

            Assert.Equal(expectedValue, resultValue);
        }
Beispiel #2
0
        internal bool IsSecurityAttribute(CSharpCompilation compilation)
        {
            if (_lazyIsSecurityAttribute == ThreeState.Unknown)
            {
                Debug.Assert(!this.HasErrors);

                // CLI spec (Partition II Metadata), section 21.11 "DeclSecurity : 0x0E" states:
                // SPEC:    If the attribute's type is derived (directly or indirectly) from System.Security.Permissions.SecurityAttribute then
                // SPEC:    it is a security custom attribute and requires special treatment.

                // NOTE:    The native C# compiler violates the above and considers only those attributes whose type derives from
                // NOTE:    System.Security.Permissions.CodeAccessSecurityAttribute as security custom attributes.
                // NOTE:    We will follow the specification.
                // NOTE:    See Devdiv Bug #13762 "Custom security attributes deriving from SecurityAttribute are not treated as security attributes" for details.

                // Well-known type SecurityAttribute is optional.
                // Native compiler doesn't generate a use-site error if it is not found, we do the same.
                var wellKnownType = compilation.GetWellKnownType(WellKnownType.System_Security_Permissions_SecurityAttribute);
                Debug.Assert(AttributeClass is object);
                HashSet <DiagnosticInfo>?useSiteDiagnostics = null;
                _lazyIsSecurityAttribute = AttributeClass.IsDerivedFrom(wellKnownType, TypeCompareKind.ConsiderEverything, useSiteDiagnostics: ref useSiteDiagnostics).ToThreeState();
            }

            return(_lazyIsSecurityAttribute.Value());
        }
Beispiel #3
0
        public void Component_AvroAttributeClass_ResultIsEqualToInput()
        {
            //Arrange
            AttributeClass toSerialize = new AttributeClass
            {
                AndAnotherString    = "anotherString",
                NullableIntProperty = 1,
                NullableIntPropertyWithDefaultValue = null,
                NullableStringProperty = "nullableString"
            };
            string schema = AvroConvert.GenerateSchema(typeof(AttributeClass));


            //Act
            var result = AvroConvert.SerializeHeadless(toSerialize, schema);

            var deserialized = AvroConvert.DeserializeHeadless <AttributeClass>(result, schema);


            //Assert
            Assert.NotNull(result);
            Assert.NotNull(deserialized);
            Assert.Equal(toSerialize.NullableIntProperty, deserialized.NullableIntProperty);
            Assert.Equal(toSerialize.AndAnotherString, deserialized.AndAnotherString);
            Assert.Equal(toSerialize.NullableStringProperty, deserialized.NullableStringProperty);
            Assert.Equal(2137, deserialized.NullableIntPropertyWithDefaultValue);
        }
Beispiel #4
0
    public static int Main()
    {
        var attr = new AttributeClass();

        attr.TestMethod();

        return(1);
    }
Beispiel #5
0
 private protected sealed override bool IsStringProperty(string memberName)
 {
     if (AttributeClass is object)
     {
         foreach (var member in AttributeClass.GetMembers(memberName))
         {
             if (member is PropertySymbol {
                 Type: { SpecialType: SpecialType.System_String }
             })
Beispiel #6
0
        private byte[] CoSignBuffer(byte[] data, byte[] signdata)
        {
            X509Certificate2 m_cert = cbCerts.SelectedItem as X509Certificate2;

            if (m_cert == null)
            {
                MessageBox.Show("не найден сертификат!");
                return(null);
            }
            SignedData signedData = new SignedDataClass();
            Utilities  utilities  = new UtilitiesClass();

            byte[] array = data;

            Signer signer = new SignerClass();
            IStore store  = new StoreClass();
            bool   flag2  = false;

            store.Open(CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "My", CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_ONLY);
            foreach (ICertificate certificate in store.Certificates)
            {
                if (certificate.Thumbprint == m_cert.Thumbprint)
                {
                    signer.Certificate = certificate;
                    flag2 = true;
                    break;
                }
            }
            if (!flag2)
            {
                throw new Exception("Не удалось найти сертификат подписи!");
            }
            CapiComRCW.Attribute attribute = new AttributeClass();
            attribute.Name  = CAPICOM_ATTRIBUTE.CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;
            attribute.Value = DateTime.Now.ToUniversalTime();
            signer.AuthenticatedAttributes.Add(attribute);
            byte[] array3;
            byte[] array2 = signdata;
            ((CapiComRCW.ISignedData)signedData).set_Content(utilities.ByteArrayToBinaryString(array));
            signedData.Verify(Convert.ToBase64String(array2), true, CAPICOM_SIGNED_DATA_VERIFY_FLAG.CAPICOM_VERIFY_SIGNATURE_ONLY);
            Store store2 = new StoreClass();

            store2.Open(CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "AddressBook", CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_WRITE);
            for (int i = 1; i <= signedData.Signers.Count; i++)
            {
                Signer      signer2 = (Signer)signedData.Signers[i];
                Certificate pVal    = (Certificate)signer2.Certificate;
                store2.Add(pVal);
            }
            store2.Close();
            string s = signedData.CoSign(signer, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);

            array3 = Convert.FromBase64String(s);
            return(array3);
        }
        private void addToFormsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // Define which attribute is the reference attribute
            var possibleAttributes = attributeSelector1.Attributes;

            foreach (var fi in listView1.CheckedItems.Cast <ListViewItem>().Select(i => (FormInfo)i.Tag))
            {
                for (int i = possibleAttributes.Count - 1; i >= 0; i--)
                {
                    if (!fi.HasAttribute(possibleAttributes[i].LogicalName))
                    {
                        possibleAttributes.Remove(possibleAttributes[i]);
                    }
                }
            }

            var selector = new ReferenceAttributeSelector(possibleAttributes);

            if (selector.ShowDialog(this) == DialogResult.OK)
            {
                foreach (ListViewItem item in listView1.CheckedItems)
                {
                    var fi     = (FormInfo)item.Tag;
                    var source = selector.SelectedAttribute.LogicalName;

                    foreach (var amd in attributeSelector1.SelectedAttributes)
                    {
                        try
                        {
                            fi.AddAttribute(amd.LogicalName, AttributeClass.GetClassId(amd).ToString("B"), amd.DisplayName, source);

                            source = amd.LogicalName;

                            AddLogItem(attributeSelector1.SelectedEntity.LogicalName, fi.ToString(),
                                       "Attribute " + amd.LogicalName + " added to form",
                                       false);

                            item.SubItems[item.SubItems.Count - 1].Text = true.ToString();

                            tslInfo.Visible = true;
                        }
                        catch (Exception error)
                        {
                            AddLogItem(attributeSelector1.SelectedEntity.LogicalName, fi.ToString(), error.Message, true);
                        }
                    }
                }
            }
        }
        public void Component_ClassContainsAvroAttributes_IgnoredPropertiesAreNotSerialized()
        {
            //Arrange
            AttributeClass toSerialize = _fixture.Create <AttributeClass>();

            //Act
            var result = AvroConvert.Serialize(toSerialize);

            var deserialized = AvroConvert.Deserialize <AttributeClass>(result);

            //Assert
            Assert.NotNull(result);
            Assert.NotNull(deserialized);
            Assert.Null(deserialized.IgnoredProperty);
        }
        public void WriteAndReadObjectWithHdf5Attributes()
        {
            string filename  = Path.Combine(folder, "testHdf5Attribute.H5");
            var    attObject = new AttributeClass();

            try
            {
                var fileId = Hdf5.CreateFile(filename);
                Assert.IsTrue(fileId > 0);
                Hdf5.WriteObject(fileId, attObject, "anObject");
                Assert.IsTrue(Hdf5.CloseFile(fileId) == 0);
            }
            catch (Exception ex)
            {
                CreateExceptionAssert(ex);
            }
        }
        public void Component_SerializeBiggerAvroObjectAndReadSmaller_NoError()
        {
            //Arrange
            AttributeClass toSerialize = _fixture.Create <AttributeClass>();

            //Act

            var result = AvroConvert.Serialize(toSerialize);

            var deserialized = AvroConvert.Deserialize <SmallerAttributeClass>(result);

            //Assert
            Assert.NotNull(result);
            Assert.NotNull(deserialized);
            Assert.Equal(toSerialize.StringProperty, deserialized.StringProperty);
            Assert.Equal(toSerialize.NullableIntProperty, deserialized.NullableIntProperty);
        }
Beispiel #11
0
    public void TestEncoderOptions()
    {
        AttributeClass aClass = new AttributeClass()
        {
            excludedField = 4, propertyValue = 10, privateField = 4
        };

        //Should only encode the property value
        string temp = JSON.Dump(aClass);

        Assert.AreEqual("{\"@type\":\"TestClassType+AttributeClass\",\"propertyValue\":10}", JSON.Dump(aClass));

        //Should only encode the field value
        Assert.AreEqual("{\"@type\":\"TestClassType+AttributeClass\",\"excludedField\":4}", JSON.Dump(aClass, EncodeOptions.IgnoreAttributes));

        //Should encode excludedField and propertyValue
        Assert.AreEqual("{\"@type\":\"TestClassType+AttributeClass\",\"propertyValue\":10}", JSON.Dump(aClass, EncodeOptions.Default));
    }
        public void Component_ClassContainsAvroAttributes_AttributeValuesAreResolved()
        {
            //Arrange
            AttributeClass toSerialize = _fixture.Create <AttributeClass>();

            //Act

            var result = AvroConvert.Serialize(toSerialize);

            var deserialized = AvroConvert.Deserialize <User>(result);

            //Assert
            Assert.NotNull(result);
            Assert.NotNull(deserialized);
            Assert.Equal(toSerialize.NullableIntProperty, deserialized.favorite_number);
            Assert.Equal(toSerialize.StringProperty, deserialized.name);
            Assert.Equal(toSerialize.AndAnotherString, deserialized.favorite_color);
        }
        public void WriteAndReadObjectWithHdf5Attributes()
        {
            string groupName = "anObject";
            string filename  = Path.Combine(folder, "testHdf5Attribute.H5");
            var    attObject = new AttributeClass();

            try
            {
                var fileId = Hdf5.CreateFile(filename);
                Assert.IsTrue(fileId > 0);
                Hdf5.WriteObject(fileId, attObject, groupName);
                Assert.IsTrue(Hdf5.CloseFile(fileId) == 0);
            }
            catch (Exception ex)
            {
                CreateExceptionAssert(ex);
            }

            var OpenFileId = Hdf5.OpenFile(filename);
            var data       = Hdf5.ReadObject <AttributeClass>(OpenFileId, groupName);

            Assert.IsTrue(Math.Abs(data.noAttribute - 10.0f) < 0.001);
        }
Beispiel #14
0
        private void SignFile(string sFileIn)
        {
            if (Path.GetExtension(sFileIn).ToUpper().Equals(".ZIP"))
            {
                SignZip(sFileIn);
                if (!cbExtSignZIP.Checked)
                {
                    return;
                }
            }
            X509Certificate2 m_cert = cbCerts.SelectedItem as X509Certificate2;

            if (m_cert == null)
            {
                throw new ApplicationException("Сформировать ЭЦП невозможно: не найден действительный сертификат отправителя!");
            }
            SignedData signedData = new SignedDataClass();
            Utilities  utilities  = new UtilitiesClass();

            byte[] array;
            using (FileStream fileStream = new FileStream(sFileIn, FileMode.Open, FileAccess.Read))
            {
                array = new byte[fileStream.Length];
                fileStream.Position = 0L;
                fileStream.Read(array, 0, (int)fileStream.Length);
                fileStream.Close();
            }
            byte[] array2 = null;
            bool   flag   = false;

            if (File.Exists(sFileIn + ".sig"))
            {
                flag = true;
                using (FileStream fileStream = new FileStream(sFileIn + ".sig", FileMode.Open, FileAccess.Read))
                {
                    array2 = new byte[fileStream.Length];
                    fileStream.Position = 0L;
                    fileStream.Read(array2, 0, (int)fileStream.Length);
                    fileStream.Close();
                }
            }
            Signer signer = new SignerClass();
            IStore store  = new StoreClass();
            bool   flag2  = false;

            store.Open(CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "My", CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_ONLY);
            foreach (ICertificate certificate in store.Certificates)
            {
                if (certificate.Thumbprint == m_cert.Thumbprint)
                {
                    signer.Certificate = certificate;
                    flag2 = true;
                    break;
                }
            }
            if (!flag2)
            {
                throw new Exception("Не удалось найти сертификат подписи!");
            }
            CapiComRCW.Attribute attribute = new AttributeClass();
            attribute.Name  = CAPICOM_ATTRIBUTE.CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;
            attribute.Value = DateTime.Now.ToUniversalTime();
            signer.AuthenticatedAttributes.Add(attribute);
            byte[] array3;
            if (flag)
            {
                // signedData.Content = "";

                //signedData.Content = Marshal.PtrToStringBSTR( utilities.ByteArrayToBinaryString(array));
                ((CapiComRCW.ISignedData)signedData).set_Content(utilities.ByteArrayToBinaryString(array));
                try
                {
                    signedData.Verify(Convert.ToBase64String(array2), true, CAPICOM_SIGNED_DATA_VERIFY_FLAG.CAPICOM_VERIFY_SIGNATURE_ONLY);
                }
                catch (Exception e)
                {
                    errlist.Add("Ошибка проверки подписи!" + sFileIn + ":" + e.Message);
                }
                Store store2 = new StoreClass();
                store2.Open(CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "AddressBook", CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_WRITE);
                for (int i = 1; i <= signedData.Signers.Count; i++)
                {
                    Signer      signer2 = (Signer)signedData.Signers[i];
                    Certificate pVal    = (Certificate)signer2.Certificate;
                    store2.Add(pVal);
                }
                store2.Close();
                string s = signedData.CoSign(signer, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
                array3 = Convert.FromBase64String(s);
            }
            else
            {
                //signedData.Content = utilities.ByteArrayToBinaryString(array);
                ((CapiComRCW.ISignedData)signedData).set_Content(utilities.ByteArrayToBinaryString(array));

                string s = signedData.Sign(signer, true, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
                array3 = Convert.FromBase64String(s);
            }
            using (FileStream fileStream = new FileStream(sFileIn + ".sig", FileMode.Create, FileAccess.Write))
            {
                fileStream.Write(array3, 0, array3.Length);
                fileStream.Close();
            }
        }
Beispiel #15
0
        private byte[] SignBuffer(byte[] arr)
        {
            X509Certificate2 m_cert = cbCerts.SelectedItem as X509Certificate2;

            if (m_cert == null)
            {
                MessageBox.Show("не найден сертификат!");
                return(null);
            }
            SignedData signedData = new SignedDataClass();
            Utilities  utilities  = new UtilitiesClass();

            byte[] array = arr;
            //using (FileStream fileStream = new FileStream(sFileIn, FileMode.Open, FileAccess.Read))
            //{
            //    array = new byte[fileStream.Length];
            //    fileStream.Position = 0L;
            //    fileStream.Read(array, 0, (int)fileStream.Length);
            //    fileStream.Close();
            //}
            //byte[] array2 = null;
            //bool flag = false;
            //if (File.Exists(sFileIn + ".sig"))
            //{
            //    flag = true;
            //    using (FileStream fileStream = new FileStream(sFileIn + ".sig", FileMode.Open, FileAccess.Read))
            //    {
            //        array2 = new byte[fileStream.Length];
            //        fileStream.Position = 0L;
            //        fileStream.Read(array2, 0, (int)fileStream.Length);
            //        fileStream.Close();
            //    }
            //}
            Signer signer = new SignerClass();
            IStore store  = new StoreClass();
            bool   flag2  = false;

            store.Open(CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "My", CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_ONLY);
            foreach (ICertificate certificate in store.Certificates)
            {
                if (certificate.Thumbprint == m_cert.Thumbprint)
                {
                    signer.Certificate = certificate;
                    flag2 = true;
                    break;
                }
            }
            if (!flag2)
            {
                throw new Exception("Не удалось найти сертификат подписи!");
            }
            CapiComRCW.Attribute attribute = new AttributeClass();
            attribute.Name  = CAPICOM_ATTRIBUTE.CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;
            attribute.Value = DateTime.Now.ToUniversalTime();
            signer.AuthenticatedAttributes.Add(attribute);
            byte[] array3;
            //if (flag)
            //{
            //    ((CapiComRCW.ISignedData)signedData).set_Content(utilities.ByteArrayToBinaryString(array));
            //    signedData.Verify(Convert.ToBase64String(array2), true, CAPICOM_SIGNED_DATA_VERIFY_FLAG.CAPICOM_VERIFY_SIGNATURE_ONLY);
            //    Store store2 = new StoreClass();
            //    store2.Open(CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "AddressBook", CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_WRITE);
            //    for (int i = 1; i <= signedData.Signers.Count; i++)
            //    {
            //        Signer signer2 = (Signer)signedData.Signers[i];
            //        Certificate pVal = (Certificate)signer2.Certificate;
            //        store2.Add(pVal);
            //    }
            //    store2.Close();
            //    string s = signedData.CoSign(signer, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
            //    array3 = Convert.FromBase64String(s);
            //}
//            else
            {
                //signedData.Content = utilities.ByteArrayToBinaryString(array);
                ((CapiComRCW.ISignedData)signedData).set_Content(utilities.ByteArrayToBinaryString(array));

                string s = signedData.Sign(signer, true, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
                array3 = Convert.FromBase64String(s);
            }
            return(array3);
            //using (FileStream fileStream = new FileStream(sFileIn + ".sig", FileMode.Create, FileAccess.Write))
            //{
            //    fileStream.Write(array3, 0, array3.Length);
            //    fileStream.Close();
            //}
        }
 /**
  * Constructs an AttributeList object
  * @param attrClass an instance of AttributeClass enum
  */
 public AttributeListImpl(AttributeClass attrClass)
 {
     this.attrClass = attrClass;
 }
Beispiel #17
0
 public AttributeList(AttributeClass attrClass)
 {
     this.attrClass = attrClass;
     Mode = Mode.STATIC;
     _List = new List<IAttribute>();
 }
Beispiel #18
0
 public AttributeList(AttributeClass attrClass)
 {
     this.attrClass = attrClass;
     Mode           = Mode.STATIC;
     _List          = new List <IAttribute>();
 }
Beispiel #19
0
        private static String ImportModel(XmlElement modelgraph, String modelname)
        {
            IDMap idmap       = new IDMap();
            int   nextenumval = 1000;

            foreach (XmlElement nodeelem in modelgraph.GetElementsByTagName("node"))
            {
                String nodetype = GetTypeName(nodeelem);

                // skip unknown elements
                int hashchar = nodetype.IndexOf('#');
                if (hashchar == -1 || !nodetype.Substring(0, hashchar).EndsWith("gxl-1.0.gxl"))
                {
                    continue;
                }

                String id = nodeelem.GetAttribute("id");
                nodetype = nodetype.Substring(hashchar + 1);
                switch (nodetype)
                {
                case "Bool":
                    idmap[id] = new Thing(id, ThingKind.Domain, "boolean");
                    break;

                case "Int":
                    idmap[id] = new Thing(id, ThingKind.Domain, "int");
                    break;

                case "Float":
                    idmap[id] = new Thing(id, ThingKind.Domain, "double");
                    break;

                case "String":
                    idmap[id] = new Thing(id, ThingKind.Domain, "string");
                    break;

                case "Enum":
                {
                    String name;
                    if (id.StartsWith("DM_enum_"))
                    {
                        name = id.Substring(8);
                    }
                    else
                    {
                        name = id;
                    }
                    idmap[id] = new Thing(id, ThingKind.EnumDomain, new EnumDomain(name));
                    break;
                }

                case "EnumVal":
                {
                    int val;
                    if (id.StartsWith("EV_"))
                    {
                        int ind = id.IndexOf('_', 4);
                        if (id[3] == '_')
                        {
                            val = -int.Parse(id.Substring(4, ind - 4));
                        }
                        else
                        {
                            val = int.Parse(id.Substring(3, ind - 3));
                        }
                    }
                    else
                    {
                        val = nextenumval++;
                    }

                    String name = GetGXLAttr(nodeelem, "value", "string");
                    idmap[id] = new Thing(id, ThingKind.EnumValue, new EnumMember(val, name));
                    break;
                }

                case "AttributeClass":
                {
                    String name = GetGXLAttr(nodeelem, "name", "string");
                    idmap[id] = new Thing(id, ThingKind.AttributeClass, new AttributeClass(name));
                    break;
                }

                case "NodeClass":
                {
                    String name       = GetGXLAttr(nodeelem, "name", "string");
                    bool   isabstract = GetGXLAttr(nodeelem, "isabstract", "bool") == "true";
                    idmap[id] = new Thing(id, ThingKind.NodeClass, new NodeClass(name, isabstract));
                    break;
                }

                case "EdgeClass":
                {
                    String name       = GetGXLAttr(nodeelem, "name", "string");
                    bool   isabstract = GetGXLAttr(nodeelem, "isabstract", "bool") == "true";
                    bool   isdirected = GetGXLAttr(nodeelem, "isdirected", "bool") == "true";
                    idmap[id] = new Thing(id, ThingKind.EdgeClass, new EdgeClass(name, isabstract, isdirected));
                    break;
                }
                }
            }

            foreach (XmlElement edgeelem in modelgraph.GetElementsByTagName("edge"))
            {
                String edgetype = GetTypeName(edgeelem);

                // skip unknown elements
                int hashchar = edgetype.IndexOf('#');
                if (hashchar == -1 || !edgetype.Substring(0, hashchar).EndsWith("gxl-1.0.gxl"))
                {
                    continue;
                }

                String fromid = edgeelem.GetAttribute("from");
                String toid   = edgeelem.GetAttribute("to");

                edgetype = edgetype.Substring(hashchar + 1);
                switch (edgetype)
                {
                case "hasDomain":
                {
                    AttributeClass attrClass = idmap[fromid].AttributeClass;
                    String         attrKind  = idmap[toid].AttributeKind;
                    attrClass.Type = attrKind;
                    break;
                }

                case "containsValue":
                {
                    EnumDomain enumDomain = idmap[fromid].EnumDomain;
                    EnumMember enumMember = idmap[toid].EnumValue;
                    enumDomain.Members.Add(enumMember);
                    break;
                }

                case "isA":
                {
                    NodeClass nodeClass = idmap[fromid].NodeOrEdgeClass;
                    nodeClass.SuperClasses.Add(toid);
                    break;
                }

                case "hasAttribute":
                {
                    NodeClass      nodeClass = idmap[fromid].NodeOrEdgeClass;
                    AttributeClass attrClass = idmap[toid].AttributeClass;
                    nodeClass.AttrList.Add(attrClass);
                    break;
                }
                }
            }

            String model         = BuildModel(idmap);
            String modelfilename = modelname + "__gxl.gm";

            using (StreamWriter writer = new StreamWriter(modelfilename))
                writer.Write(model);
            return(modelfilename);
        }