Ejemplo n.º 1
0
        public static void Initialize(string dir)
        {
            var xmlFile = Path.Combine(dir, "filters.xml");

            var xmlDoc = new XmlDocument();

            xmlDoc.Load(xmlFile);

            var root = xmlDoc.DocumentElement;

            if (root.Name != "ResourceFilters")
            {
                throw new XmlException("Resource filter configuration is invalid.");
            }

            _filters = new List <ResourceFilter>();

            foreach (var child in root.ChildNodes.OfType <XmlElement>())
            {
                if (child.Name != "Resource")
                {
                    throw new XmlException($"Unknown element '{child.Name}' in resource filter configuration.");
                }

                var filter = ResourceFilter.LoadXml(child);

                _filters.Add(filter);
            }
        }
Ejemplo n.º 2
0
        public static ResourceFile Create(NomadObject obj, FileType type, ResourceFilter filter = null)
        {
            var result = new ResourceFile()
            {
                Root         = obj,
                Type         = type,
                CustomFilter = filter,
            };

            return(result);
        }
Ejemplo n.º 3
0
        public static ResourceFile Create <TSerializer>(NomadObject obj, ResourceFilter filter = null)
            where TSerializer : INomadSerializer, new()
        {
            var serializer = new TSerializer();

            var result = new ResourceFile()
            {
                Root             = obj,
                Type             = serializer.Type,
                CustomSerializer = serializer,
            };

            return(result);
        }
Ejemplo n.º 4
0
        public static INomadSerializer GetSerializer(ResourceFilter filter)
        {
            if (filter.Version == 1)
            {
                return(new NomadRmlSerializer());
            }

            INomadSerializer serializer = GetSerializer(filter.Type);

            if (serializer == null)
            {
                Debug.WriteLine($"Could not create a serializer using resource filter '{filter.ToString()}'");
            }

            return(serializer);
        }
Ejemplo n.º 5
0
        public ResourceFilter GetFilter()
        {
            if (CustomFilter != null)
            {
                return(CustomFilter);
            }

            ResourceFilter filter = null;

            if (Root != null)
            {
                filter = ResourceFactory.GetFilter(Root);
            }

            return(filter);
        }
Ejemplo n.º 6
0
        public static ResourceFile Create(NomadObject obj, Type serializerType, ResourceFilter filter = null)
        {
            var serializer = Activator.CreateInstance(serializerType) as INomadSerializer;

            if (serializer == null)
            {
                throw new InvalidOperationException("Tried creating a serializer from a non-serializer type!");
            }

            var result = new ResourceFile()
            {
                Root             = obj,
                Type             = serializer.Type,
                CustomFilter     = filter,
                CustomSerializer = serializer,
            };

            return(result);
        }
Ejemplo n.º 7
0
        public static ResourceFile Open(string filename, bool load = true)
        {
            var type  = FileType.Binary;
            var flags = FileTypeFlags.None;

            var ext = Path.GetExtension(filename);

            switch (ext)
            {
            case ".rml":
                flags |= FileTypeFlags.Rml;
                break;

            case ".xml":
                type = FileType.Xml;
                break;
            }

            var isRml = flags.HasFlag(FileTypeFlags.Rml);
            var isXml = (type == FileType.Xml || isRml) && Utils.IsXmlFile(filename);

            INomadSerializer serializer = null;
            var valid = true;

            ResourceFilter filter = null;

            if (isXml)
            {
                serializer = new NomadXmlSerializer();

                var xml = Utils.LoadXmlFile(filename);

                filter = GetFilter(xml.Root);

                if (filter != null)
                {
                    // is there a serializer that requires external dependencies?
                    var xmlSerializer = GetSerializer(filter) as INomadXmlFileSerializer;

                    if (xmlSerializer != null)
                    {
                        serializer = xmlSerializer;
                    }
                }
            }
            else
            {
                if (NomadFactory.GetBinaryInfo(filename, out NomadFileInfo info))
                {
                    serializer = NomadFactory.GetSerializer(info);
                    filter     = GetFilter(info);
                }

                // make sure it's not an empty file
                valid = info.IsValid;
            }

            ResourceFile result = null;

            if (valid)
            {
                result = new ResourceFile()
                {
                    Type             = type,
                    CustomSerializer = serializer,
                    CustomFilter     = filter,
                };

                if (load)
                {
                    result.Load(filename);
                }
            }

            return(result);
        }