Ejemplo n.º 1
0
        /// <summary>
        /// Initializes static member(s) of the <see cref="MetadataManager"/> class.
        /// </summary>
        static MetadataManager()
        {
            // Creates all readers
            sReaders = new Dictionary <string, AMetadataReader>();
            IEnumerable <Type> lReaderTypes = typeof(AMetadataReader).GetInheritedTypes();

            foreach (Type lReaderType in lReaderTypes)
            {
                ConstructorInfo lDefaultConstructor = lReaderType.GetConstructor(Type.EmptyTypes);
                if (lDefaultConstructor != null)
                {
                    AMetadataReader lReader = lDefaultConstructor.Invoke(null) as AMetadataReader;
                    sReaders[lReader.Type] = lReader;
                }
            }

            // Create the type reader.
            sTypeReader = new MetadataTypeReader();

            // TODO See how it works.
            // Prepares the cache of tactical metadata types by tactical data type name.
            //sTacticalMetadataTypes = new Dictionary<string, Dictionary<string, MetadataSetType>>();
            //IEnumerable<Type> lTacticalDataTypes = typeof(ATacticalData).GetInheritedTypes(false, 1);
            //foreach (Type lTacticalDataType in lTacticalDataTypes)
            //{
            //    sTacticalMetadataTypes[lTacticalDataType.Name] = new Dictionary<string, MetadataSetType>();
            //}
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Reads a new metadata element.
        /// </summary>
        /// <param name="pMetadataType">The metadata type to fill.</param>
        /// <param name="pElement">The XML element the metadata is extracted from.</param>
        /// <returns>True if successful, false otherwise.</returns>
        public bool Read(ref MetadataSetType pMetadataType, XElement pElement)
        {
            XAttribute lXNestedPropertyName = pElement.Attribute(MetadataManager.cMetadataPropertyNameTag);
            XAttribute lXNestedTypeId       = pElement.Attribute(MetadataManager.cMetadataIdTag);

            if (lXNestedPropertyName == null ||
                lXNestedTypeId == null)
            {
                return(false);
            }

            string          lNestedTargetType = lXNestedPropertyName.Value;
            string          lNestedTypeId     = lXNestedTypeId.Value;
            MetadataSetType lNestedType       = new MetadataSetType(lNestedTypeId);

            lNestedType.TargetType = lNestedTargetType;

            foreach (XElement lXMetadata in pElement.Elements(MetadataManager.cMetadataTag))
            {
                XAttribute lXType = lXMetadata.Attribute(MetadataManager.cTypeTag);
                if (lXType == null)
                {
                    continue;
                }

                AMetadataReader lReader = MetadataManager.Instance.GetReader(lXType.Value);
                if (lReader != null)
                {
                    lReader.Read(ref lNestedType, lXMetadata);
                }
            }

            // Check for nested types too.
            foreach (XElement lXNestedType in pElement.Elements(MetadataManager.cMetadataTypeTag))
            {
                MetadataTypeReader lNestedReader = new MetadataTypeReader();
                lNestedReader.Read(ref lNestedType, lXNestedType);
            }

            pMetadataType.AddNestedType(lNestedType);

            return(true);
        }