1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.jcr.util;
35
36 import java.io.File;
37 import java.io.FileInputStream;
38 import java.io.FileNotFoundException;
39 import java.io.IOException;
40 import java.io.InputStream;
41 import java.io.RandomAccessFile;
42 import javax.jcr.Binary;
43 import javax.jcr.RepositoryException;
44
45
46
47
48
49
50 public class BinaryInFile implements Binary {
51
52 private final File file;
53 private boolean disposed = false;
54
55 public BinaryInFile(File file) {
56 this.file = file;
57 }
58
59 @Override
60 public InputStream getStream() throws RepositoryException {
61 if (disposed) {
62 throw new IllegalStateException("Binary already disposed");
63 }
64 try {
65 return new FileInputStream(file);
66 } catch (FileNotFoundException e) {
67 throw new RepositoryException(e);
68 }
69 }
70
71 @Override
72 public int read(byte[] b, long position) throws IOException, RepositoryException {
73 if (disposed) {
74 throw new IllegalStateException("Binary already disposed");
75 }
76 RandomAccessFile raf = new RandomAccessFile(file, "r");
77 try {
78 raf.seek(position);
79 return raf.read(b);
80 } finally {
81 raf.close();
82 }
83 }
84
85 @Override
86 public long getSize() throws RepositoryException {
87 if (disposed) {
88 throw new IllegalStateException("Binary already disposed");
89 }
90 return file.length();
91 }
92
93 @Override
94 public void dispose() {
95 disposed = true;
96 }
97
98 @Override
99 public String toString() {
100 return "file:" + file.toString();
101 }
102
103 @Override
104 public int hashCode() {
105 return 0;
106 }
107
108 @Override
109 public boolean equals(Object o) {
110 if (this == o) {
111 return true;
112 }
113 if (!(o instanceof BinaryInFile)) {
114 return false;
115 }
116
117 BinaryInFile binary = (BinaryInFile) o;
118
119 return !(file != null ? !file.equals(binary.file) : binary.file != null);
120 }
121 }