1 package org.ximtec.igesture.storage;
2
3 import java.io.File;
4 import java.util.ArrayList;
5 import java.util.HashMap;
6 import java.util.List;
7
8 import org.ximtec.igesture.core.DataObject;
9
10 public abstract class DefaultFileStorageEngine extends DefaultStorageEngine {
11
12 private File storageFile;
13 private boolean doChanged;
14
15 private HashMap<Class<? extends DataObject>, List<DataObject>> dataObjects;
16
17
18
19
20
21 public DefaultFileStorageEngine(File file) {
22 this.storageFile = file;
23 dataObjects = deserialize(storageFile);
24
25
26
27 setDoChanged(false);
28 }
29
30
31
32
33
34
35
36 private void addDataObject(DataObject dataObject) {
37
38 if (dataObjects.get(dataObject.getClass()) == null) {
39 dataObjects.put(dataObject.getClass(), new ArrayList<DataObject>());
40 }
41
42
43 if (!dataObjects.get(dataObject.getClass()).contains(dataObject)) {
44 dataObjects.get(dataObject.getClass()).add(dataObject);
45 }
46
47 }
48
49
50
51 @Override
52 public void commit() {
53 serialize(dataObjects, getStorageFile());
54
55 }
56
57
58
59
60
61
62
63 protected abstract HashMap<Class<? extends DataObject>, List<DataObject>> deserialize(File storageFile);
64
65 @Override
66 public void dispose() {
67
68 }
69
70 public File getStorageFile() {
71 return storageFile;
72 }
73
74 @SuppressWarnings("unchecked")
75 public <T extends DataObject> List<T> load(Class<T> clazz) {
76 if (dataObjects.get(clazz) != null) {
77 return new ArrayList<T>((List<T>) dataObjects.get(clazz));
78 }
79
80 return new ArrayList<T>();
81 }
82
83
84
85
86
87
88
89
90 public <T extends DataObject> T load(final Class<T> clazz, final String id) {
91 T dataObject = null;
92
93 if (dataObjects.get(clazz) != null) {
94
95 for (final DataObject tmp : dataObjects.get(clazz)) {
96
97 if (tmp.getId().equals(id)) {
98 dataObject = clazz.cast(tmp);
99 break;
100 }
101 }
102 }
103
104 return dataObject;
105 }
106
107 @Override
108 public void remove(DataObject dataObject) {
109 removeDataObject(dataObject);
110 setDoChanged(true);
111 }
112
113
114
115
116
117
118
119 protected void removeDataObject(DataObject dataObject) {
120 if (dataObjects.get(dataObject.getClass()) != null) {
121 dataObjects.get(dataObject.getClass()).remove(dataObject);
122 }
123 }
124
125
126
127
128
129
130
131 protected abstract void serialize(HashMap<Class<? extends DataObject>, List<DataObject>> objects, File file);
132
133 public void setStorageFile(File storageFile) {
134 this.storageFile = storageFile;
135 }
136
137 @Override
138 public synchronized void store(DataObject dataObject) {
139 addDataObject(dataObject);
140 setDoChanged(true);
141 }
142
143 @Override
144 public void update(DataObject dataObject) {
145 addDataObject(dataObject);
146 setDoChanged(true);
147 }
148
149
150
151
152
153
154
155 protected void setDoChanged(boolean doChanged) {
156 this.doChanged = doChanged;
157 }
158
159
160
161
162
163
164
165 protected boolean isDoChanged() {
166 return doChanged;
167 }
168
169 }