1 |
| package photospace.meta; |
2 |
| |
3 |
| import java.io.*; |
4 |
| import java.util.*; |
5 |
| import org.apache.commons.io.*; |
6 |
| import org.apache.commons.logging.*; |
7 |
| import com.drew.metadata.*; |
8 |
| import com.drew.metadata.exif.*; |
9 |
| import com.hp.hpl.jena.rdf.model.*; |
10 |
| import junit.framework.*; |
11 |
| import photospace.meta.rdf.*; |
12 |
| import photospace.vfs.*; |
13 |
| |
14 |
| public class PersisterTest |
15 |
| extends TestCase |
16 |
| { |
17 |
| private static final Log log = LogFactory.getLog(PersisterTest.class); |
18 |
| |
19 |
1
| public void testGetMetadataFromJpeg() throws Exception
|
20 |
| { |
21 |
1
| PersisterImpl persister = new PersisterImpl();
|
22 |
1
| persister.setStoringInJpeg(false);
|
23 |
1
| Translator translator = new Translator();
|
24 |
1
| persister.setTranslator(translator);
|
25 |
1
| FileSystem filesystem = new FileSystemImpl();
|
26 |
1
| filesystem.setRoot(new File(System.getProperty("project.root"), "build/test/"));
|
27 |
1
| persister.setFilesystem(filesystem);
|
28 |
| |
29 |
1
| File jpeg = new File(System.getProperty("project.root"), "build/test/exif-nordf.jpg").getCanonicalFile();
|
30 |
| |
31 |
1
| Metadata exif = persister.getExif(jpeg);
|
32 |
| |
33 |
1
| Model existing = persister.getRdf(jpeg);
|
34 |
1
| if (existing != null)
|
35 |
| { |
36 |
0
| persister.removeRdf(jpeg);
|
37 |
0
| exif = persister.getExif(jpeg);
|
38 |
| } |
39 |
1
| assertNull(persister.getRdf(jpeg));
|
40 |
| |
41 |
1
| PhotoMeta photo = translator.fromExif(exif);
|
42 |
1
| Model rdf = translator.toRdf(photo);
|
43 |
| |
44 |
1
| Statement rdfMake = rdf.getProperty(null, TechVocab.CAMERA);
|
45 |
1
| String exifMake = exif.getDirectory(ExifDirectory.class).getString(ExifDirectory.TAG_MODEL);
|
46 |
1
| assertNotNull(rdfMake);
|
47 |
1
| assertNotNull(exifMake);
|
48 |
| |
49 |
1
| PhotoMeta meta = (PhotoMeta) persister.getMeta(jpeg);
|
50 |
1
| assertEquals("/exif-nordf.jpg", meta.getPath());
|
51 |
1
| assertEquals(photo.getDevice(), rdfMake.getString());
|
52 |
1
| assertEquals(photo.getDevice(), exifMake);
|
53 |
1
| assertEquals(photo.getDevice(), meta.getDevice());
|
54 |
| } |
55 |
| |
56 |
1
| public void testSaveMeta() throws Exception
|
57 |
| { |
58 |
1
| PersisterImpl persister = new PersisterImpl();
|
59 |
1
| persister.setStoringInJpeg(false);
|
60 |
1
| Translator translator = new Translator();
|
61 |
1
| persister.setTranslator(translator);
|
62 |
1
| FileSystem filesystem = new FileSystemImpl();
|
63 |
1
| filesystem.setRoot(new File(System.getProperty("project.root"), "build/test/"));
|
64 |
1
| persister.setFilesystem(filesystem);
|
65 |
| |
66 |
1
| Date before = new Date();
|
67 |
| |
68 |
1
| File exifJpeg = new File(System.getProperty("project.root"), "build/test/exif-nordf.jpg");
|
69 |
| |
70 |
1
| File rdfJpeg = new File(System.getProperty("project.root"), "build/test/exif-rdf.jpg");
|
71 |
1
| File destJpeg = new File(System.getProperty("java.io.tmpdir"), "PersisterTest.jpg");
|
72 |
1
| FileUtils.copyFile(rdfJpeg, destJpeg);
|
73 |
| |
74 |
1
| Metadata exif = persister.getExif(exifJpeg);
|
75 |
| |
76 |
1
| exif = persister.getExif(exifJpeg);
|
77 |
| |
78 |
1
| PhotoMeta exifPhoto = translator.fromExif(exif);
|
79 |
1
| persister.saveMeta(destJpeg, exifPhoto);
|
80 |
| |
81 |
1
| persister.saveMeta(destJpeg, exifPhoto);
|
82 |
| |
83 |
1
| Model rdf = persister.getRdf(destJpeg);
|
84 |
1
| PhotoMeta rdfPhoto = (PhotoMeta) translator.fromRdf(rdf);
|
85 |
| |
86 |
1
| assertEquals(exifPhoto.getUpdated(), rdfPhoto.getUpdated());
|
87 |
1
| assertEquals(exifPhoto, rdfPhoto);
|
88 |
1
| assertTrue(before.before(exifPhoto.getUpdated()));
|
89 |
1
| assertTrue(before.before(rdfPhoto.getUpdated()));
|
90 |
| } |
91 |
| |
92 |
| } |