1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package pl.edu.agh.cast.data.persistence.serialize;
19
20 import java.io.FileInputStream;
21 import java.io.FileOutputStream;
22 import java.io.ObjectInputStream;
23 import java.io.ObjectOutputStream;
24 import java.util.List;
25 import java.util.UUID;
26
27 import org.apache.log4j.Logger;
28
29 import pl.edu.agh.cast.Activator;
30 import pl.edu.agh.cast.data.model.IDataSet;
31 import pl.edu.agh.cast.data.model.IElement;
32 import pl.edu.agh.cast.data.persistence.runtime.RuntimePersistenceProvider;
33
34
35
36
37
38
39 public class SerializationPersistenceProvider extends RuntimePersistenceProvider {
40
41 private static final Logger LOG = Activator.getLogger();
42
43
44
45
46
47
48 @Override
49 public void destroy() {
50 serialize();
51 super.destroy();
52 }
53
54
55
56
57
58
59 @Override
60 public void initialize() {
61 super.initialize();
62 deserialize();
63 }
64
65
66
67
68
69
70
71 @Override
72 public UUID saveDataSet(IDataSet<? extends IElement> dataSet) {
73 UUID saveDataSetId = super.saveDataSet(dataSet);
74 serialize();
75 return saveDataSetId;
76 }
77
78 private void serialize() {
79 if (getConfig() == null) {
80 return;
81 }
82 List<IDataSet<? extends IElement>> dataSets = getAllDataSets();
83
84 ObjectOutputStream oos = null;
85
86 try {
87 LOG.info("Serializing persistence provider");
88 oos = new ObjectOutputStream(new FileOutputStream(getConfig()));
89 oos.writeObject(dataSets);
90 LOG.info("Serialization of persistence provider completed");
91 } catch (Exception e) {
92 LOG.error("Failed to serialize persistence provider", e);
93 } finally {
94 try {
95 if (oos != null) {
96 oos.close();
97 }
98 } catch (Exception e) {
99 LOG.error("Failed to close file after serialization of persistence provider", e);
100 }
101 }
102 }
103
104 @SuppressWarnings("unchecked")
105 private void deserialize() {
106 if (getConfig() == null) {
107 return;
108 }
109 List<IDataSet<? extends IElement>> dataSets = null;
110
111 ObjectInputStream ois = null;
112
113 try {
114 LOG.info("Deserializing persistence provider");
115 ois = new ObjectInputStream(new FileInputStream(getConfig()));
116 dataSets = (List<IDataSet<? extends IElement>>)ois.readObject();
117 if (dataSets != null && dataSets.size() > 0) {
118 clearDataSets();
119 for (IDataSet<? extends IElement> dataSet : dataSets) {
120 addDataSet(dataSet);
121 }
122 }
123 LOG.info("Deserialization of persistence provider completed");
124 } catch (Exception e) {
125 LOG.error("Failed to deserialize persistence provider", e);
126 } finally {
127 try {
128 if (ois != null) {
129 ois.close();
130 }
131 } catch (Exception e) {
132 LOG.error("Failed to close file after deserialization of persistence provider", e);
133 }
134 }
135 }
136
137 }