Mercurial > repos > IBBoard.WarFoundry.API
annotate API/Loading/LoadableObjectSourceDirectory.cs @ 482:1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
* Swap API to using new "loadable object" and "loadable object source" wrappers to allow file-based or memory-based loading
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sat, 07 Jul 2012 21:01:32 +0100 |
parents | |
children |
rev | line source |
---|---|
482
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
1 // This file (LoadableObjectSourceDirectory.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2012 IBBoard |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
2 // |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
3 // The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license. |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
4 using System; |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
5 using System.IO; |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
6 using System.Collections.Generic; |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
7 |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
8 namespace IBBoard.WarFoundry.API.Loading |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
9 { |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
10 public class LoadableObjectSourceDirectory : ILoadableObjectSource |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
11 { |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
12 private DirectoryInfo dir; |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
13 |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
14 public LoadableObjectSourceDirectory(string directory) : this(new DirectoryInfo(directory)) |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
15 { |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
16 //Do nothing extra |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
17 } |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
18 |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
19 public LoadableObjectSourceDirectory(DirectoryInfo directory) |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
20 { |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
21 dir = directory; |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
22 } |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
23 |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
24 public ICollection<ILoadableObject> GetLoadableObjects() |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
25 { |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
26 ICollection<ILoadableObject> loadables; |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
27 dir.Refresh(); |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
28 |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
29 if (dir.Exists) |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
30 { |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
31 loadables = GetLoadableObjectsFromDirectory(dir); |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
32 } |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
33 else |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
34 { |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
35 loadables = new List<ILoadableObject>(); |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
36 } |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
37 |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
38 return loadables; |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
39 } |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
40 |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
41 private ICollection<ILoadableObject> GetLoadableObjectsFromDirectory(DirectoryInfo directory) |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
42 { |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
43 List<ILoadableObject> loadables = new List<ILoadableObject>(); |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
44 |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
45 foreach (FileInfo file in directory.GetFiles()) |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
46 { |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
47 loadables.Add(new LoadableFileObject(file)); |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
48 } |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
49 |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
50 foreach (DirectoryInfo subdir in directory.GetDirectories()) |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
51 { |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
52 loadables.AddRange(GetLoadableObjectsFromDirectory(subdir)); |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
53 } |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
54 |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
55 return loadables; |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
56 } |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
57 |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
58 public override bool Equals(object obj) |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
59 { |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
60 if (obj == null || !obj.GetType().Equals(GetType())) |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
61 { |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
62 return false; |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
63 } |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
64 |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
65 LoadableObjectSourceDirectory other = (LoadableObjectSourceDirectory)obj; |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
66 return this.dir.FullName.Equals(other.dir.FullName); |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
67 } |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
68 |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
69 public override int GetHashCode() |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
70 { |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
71 return dir.FullName.GetHashCode() + 17; |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
72 } |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
73 } |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
74 } |
1ed2f3ab5e35
Re #419: Remove assumptions of a file-based install
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
75 |