1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package de.smartics.maven.issues.cache;
17
18 import java.io.File;
19 import java.io.InputStream;
20 import java.io.OutputStream;
21
22 import javax.xml.stream.XMLInputFactory;
23 import javax.xml.stream.XMLOutputFactory;
24 import javax.xml.stream.XMLStreamException;
25 import javax.xml.stream.XMLStreamReader;
26 import javax.xml.stream.XMLStreamWriter;
27
28 import org.apache.commons.logging.Log;
29 import org.apache.commons.logging.LogFactory;
30 import org.eclipse.mylyn.tasks.core.data.TaskData;
31
32
33
34
35
36
37
38 public class XmlTaskDataStore extends AbstractFileTaskDataStore
39 {
40
41
42
43
44
45
46
47 private static final Log LOG = LogFactory.getLog(XmlTaskDataStore.class);
48
49
50
51
52
53
54
55
56
57
58
59
60
61 public XmlTaskDataStore(final File persistentStoreDirectory)
62 {
63 super(persistentStoreDirectory, ".xml");
64 }
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 protected TaskData readTask(final InputStream inputStream)
85 throws PersistenceException
86 {
87 final XMLInputFactory factory = XMLInputFactory.newInstance();
88 XMLStreamReader xmlReader = null;
89 try
90 {
91 xmlReader = factory.createXMLStreamReader(inputStream);
92 final XmlTaskReader taskReader = new XmlTaskReader(xmlReader);
93 return taskReader.readTask();
94 }
95 catch (final XMLStreamException e)
96 {
97 throw new PersistenceException("Cannot read task from XML stream.", e);
98 }
99 finally
100 {
101 if (xmlReader != null)
102 {
103 try
104 {
105 xmlReader.close();
106 }
107 catch (final XMLStreamException e)
108 {
109
110 if (LOG.isErrorEnabled())
111 {
112 LOG.error("Cannot close input stream. Continue...", e);
113 }
114 }
115 }
116 }
117 }
118
119
120
121
122
123
124
125
126
127
128 protected void writeTask(final OutputStream outputStream, final TaskData task)
129 throws PersistenceException
130 {
131 final XMLOutputFactory factory = XMLOutputFactory.newInstance();
132 XMLStreamWriter xmlWriter = null;
133 try
134 {
135 xmlWriter = factory.createXMLStreamWriter(outputStream);
136 xmlWriter.writeStartDocument();
137 final XmlTaskWriter taskWriter = new XmlTaskWriter(xmlWriter);
138 taskWriter.writeTask(task);
139 xmlWriter.writeEndDocument();
140 }
141 catch (final XMLStreamException e)
142 {
143 final String message =
144 "Cannot persist task data with ID '" + task.getTaskId() + "'.";
145 LOG.warn(message, e);
146 throw new PersistenceException(message, e);
147 }
148 finally
149 {
150 if (xmlWriter != null)
151 {
152 try
153 {
154 xmlWriter.close();
155 }
156 catch (final XMLStreamException e)
157 {
158
159 if (LOG.isErrorEnabled())
160 {
161 LOG.error("Cannot close output stream. Continue...", e);
162 }
163 }
164 }
165 }
166 }
167
168
169
170 }