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); } }
public static ResourceFile Create(NomadObject obj, FileType type, ResourceFilter filter = null) { var result = new ResourceFile() { Root = obj, Type = type, CustomFilter = filter, }; return(result); }
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); }
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); }
public ResourceFilter GetFilter() { if (CustomFilter != null) { return(CustomFilter); } ResourceFilter filter = null; if (Root != null) { filter = ResourceFactory.GetFilter(Root); } return(filter); }
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); }
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); }