aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ch/epfl/xblast/client/ImageCollection.java91
1 files changed, 91 insertions, 0 deletions
diff --git a/src/ch/epfl/xblast/client/ImageCollection.java b/src/ch/epfl/xblast/client/ImageCollection.java
new file mode 100644
index 0000000..231d84c
--- /dev/null
+++ b/src/ch/epfl/xblast/client/ImageCollection.java
@@ -0,0 +1,91 @@
1package ch.epfl.xblast.client;
2
3import javax.imageio.ImageIO;
4import java.util.HashMap;
5import java.util.Map;
6import java.awt.Image;
7import java.io.File;
8import java.util.NoSuchElementException;
9
10/**
11 * @author Timothée FLOURE (257420)
12 */
13public final class ImageCollection {
14
15 /**
16 * Relative directory.
17 */
18 private final String directory;
19
20 /**
21 * Get the directory Object from the relative directory Name using Java Resource.
22 *
23 * @param directoryName the relative name of the directory
24 * @throws NoSuchElementException
25 * @return the File Object related to the directory
26 */
27 private static File getDirectory(String directoryName) {
28 try { // Ugly! Probably a better way...
29 return new File(ImageCollection.class
30 .getClassLoader()
31 .getResource(directoryName)
32 .toURI());
33 } catch (java.net.URISyntaxException e) {
34 throw new NoSuchElementException();
35 }
36 }
37
38 /**
39 * Maps the directory's files with IDs parsed from their names.
40 *
41 * @return a map of id to files
42 */
43 private Map<Integer, File> mapFilesId() {
44 HashMap<Integer, File> mappedFiles = new HashMap<>();
45
46 for (File file : this.getDirectory(this.directory).listFiles()) {
47 mappedFiles.put(Integer.parseInt(file.getName()), file);
48 }
49
50 return mappedFiles;
51 }
52
53 /**
54 * Instantiates a new ImageCollection.
55 *
56 * @param directory the relative directory name.
57 */
58 public ImageCollection(String directory) {
59 this.directory = directory;
60 }
61
62 /**
63 * Returns the image corresponding to the given id.
64 *
65 * @throws java.util.NoSuchElementException if the requested image does not exists.
66 * @return the image corresponding to the given id
67 */
68 public Image image(int id) {
69 if (this.imageOrNull(id) == null)
70 throw new NoSuchElementException();
71 else
72 return this.imageOrNull(id);
73 }
74
75 /**
76 * Returns the image corresponding to the given id.
77 *
78 * @return the image corresponding to the given id or null
79 */
80 public Image imageOrNull(int id){
81 // Ugly! Probably a better way...
82 if (mapFilesId().containsKey(id))
83 try {
84 return ImageIO.read(mapFilesId().get(id));
85 } catch (java.io.IOException e) {
86 return null;
87 }
88 else
89 return null;
90 }
91}