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;
19
20 import java.util.Collection;
21 import java.util.Collections;
22 import java.util.HashMap;
23 import java.util.LinkedList;
24 import java.util.List;
25 import java.util.Map;
26 import java.util.UUID;
27
28 import org.eclipse.core.runtime.IProgressMonitor;
29 import org.eclipse.osgi.util.NLS;
30
31 import pl.edu.agh.cast.data.model.DataSetDescriptor;
32 import pl.edu.agh.cast.data.model.IDataSet;
33 import pl.edu.agh.cast.data.model.IElement;
34 import pl.edu.agh.cast.data.model.Type;
35 import pl.edu.agh.cast.data.model.domain.DomainDataSetDescriptor;
36 import pl.edu.agh.cast.data.model.presentation.IPresentationDataSet;
37 import pl.edu.agh.cast.data.model.presentation.IPresentationElement;
38 import pl.edu.agh.cast.data.model.presentation.PresentationDataSetDescriptor;
39 import pl.edu.agh.cast.data.model.visual.IVisualDataSet;
40 import pl.edu.agh.cast.data.model.visual.VisualDataSetDescriptor;
41 import pl.edu.agh.cast.util.Messages;
42
43
44
45
46
47
48
49 public abstract class AbstractPersistenceProvider implements IPersistenceProvider {
50
51 private String config;
52
53
54
55
56
57
58
59
60 @Override
61 public List<DataSetDescriptor> getDataSetDescriptors(Type dsType) {
62 LinkedList<DataSetDescriptor> descriptors = new LinkedList<DataSetDescriptor>();
63
64 for (DataSetDescriptor dsd : getDataSetDescriptors()) {
65 if (dsd != null && dsd.getType() != null && dsd.getType().isSubtypeOf(dsType)) {
66 descriptors.add(dsd);
67 }
68 }
69
70 return Collections.unmodifiableList(descriptors);
71 }
72
73
74
75
76
77
78 @Override
79 public List<DomainDataSetDescriptor> getDomainDataSetDescriptors() {
80 return filterDescriptors(getDataSetDescriptors(), DomainDataSetDescriptor.class);
81 }
82
83
84
85
86
87
88 @Override
89 public List<PresentationDataSetDescriptor> getPresentationDataSetDescriptors() {
90 return filterDescriptors(getDataSetDescriptors(), PresentationDataSetDescriptor.class);
91 }
92
93
94
95
96
97
98 @Override
99 public List<VisualDataSetDescriptor> getVisualDataSetDescriptors() {
100 return filterDescriptors(getDataSetDescriptors(), VisualDataSetDescriptor.class);
101 }
102
103 private static <T extends DataSetDescriptor> List<T> filterDescriptors(List<DataSetDescriptor> dsdList,
104 Class<T> descClass) {
105 List<T> fList = new LinkedList<T>();
106
107 for (DataSetDescriptor dsd : dsdList) {
108 if (descClass.isInstance(dsd)) {
109 fList.add(descClass.cast(dsd));
110 }
111 }
112
113 return fList;
114 }
115
116
117
118
119
120
121
122
123
124
125
126 @SuppressWarnings("unchecked")
127 @Override
128 public <T extends IDataSet<? extends IElement>> T getDataSet(DataSetDescriptor descriptor) {
129 return (T)this.getDataSet(descriptor.getId());
130 }
131
132
133
134
135
136
137 @SuppressWarnings("unchecked")
138 @Override
139 public <T extends IDataSet<? extends IElement>> Map<UUID, T> getDataSets(Collection<DataSetDescriptor> descs) {
140 Map<UUID, T> dsMap = new HashMap<UUID, T>(descs.size());
141 for (DataSetDescriptor dsd : descs) {
142 dsMap.put(dsd.getId(), (T)getDataSet(dsd));
143 }
144 return dsMap;
145 }
146
147
148
149
150
151
152 @SuppressWarnings("unchecked")
153 @Override
154 public <T extends IDataSet<? extends IElement>> Map<UUID, T> getDataSetsById(Collection<UUID> ids) {
155 Map<UUID, T> dsMap = new HashMap<UUID, T>(ids.size());
156 for (UUID id : ids) {
157 dsMap.put(id, (T)getDataSet(id));
158 }
159 return dsMap;
160 }
161
162
163
164
165
166
167
168
169
170
171
172 @Override
173 public UUID saveDataSet(IDataSet<? extends IElement> dataSet, IProgressMonitor monitor) {
174 monitor.beginTask(NLS.bind(Messages.AbstractPersistenceProvider_SaveSingleDS_ProgressTitle, dataSet.getName()),
175 IProgressMonitor.UNKNOWN);
176 UUID id = saveDataSet(dataSet);
177 monitor.done();
178 return id;
179 }
180
181
182
183
184
185
186 @Override
187 public Map<UUID, UUID> saveDataSets(Collection<IDataSet<? extends IElement>> dataSets) {
188 Map<UUID, UUID> idMap = new HashMap<UUID, UUID>(dataSets.size());
189 for (IDataSet<? extends IElement> dataSet : dataSets) {
190 idMap.put(dataSet.getId(), saveDataSet(dataSet));
191 }
192 return idMap;
193 }
194
195
196
197
198
199
200
201 @Override
202 public Map<UUID, UUID> saveDataSets(Collection<IDataSet<? extends IElement>> dataSets, IProgressMonitor monitor) {
203 monitor.beginTask(NLS.bind(Messages.AbstractPersistenceProvider_SaveMultiDS_ProgressTitle, dataSets.size()),
204 IProgressMonitor.UNKNOWN);
205 Map<UUID, UUID> idMap = saveDataSets(dataSets);
206 monitor.done();
207 return idMap;
208 }
209
210
211
212
213
214
215
216 @SuppressWarnings("unchecked")
217 @Override
218 public <T extends IPresentationDataSet<? extends IPresentationElement<? extends IElement>>> T saveDiagram(
219 T presentationDataSet) {
220 T savedPDS = null;
221
222 List<IDataSet<? extends IElement>> dataSets = new LinkedList<IDataSet<? extends IElement>>();
223 dataSets.add(presentationDataSet);
224 if (presentationDataSet.hasAssociatedVisualDataSet()) {
225 dataSets.add(presentationDataSet.getVisualDataSet());
226 }
227
228 Map<UUID, UUID> idMap = saveDataSets(dataSets);
229
230 Map<UUID, IDataSet<? extends IElement>> savedDataSets = getDataSetsById(idMap.values());
231
232 savedPDS = (T)savedDataSets.get(idMap.get(presentationDataSet.getId()));
233
234 if (presentationDataSet.getVisualDataSet() != null) {
235 savedPDS.setVisualDataSet((IVisualDataSet)savedDataSets.get(idMap.get(presentationDataSet
236 .getVisualDataSet().getId())));
237 }
238
239 return savedPDS;
240 }
241
242
243
244
245
246
247
248
249 @Override
250 public <T extends IPresentationDataSet<? extends IPresentationElement<? extends IElement>>> T saveDiagram(
251 T presentationDataSet, IProgressMonitor monitor) {
252 monitor.beginTask(NLS.bind(Messages.AbstractPersistenceProvider_SaveMultiDS_ProgressTitle, 2),
253 IProgressMonitor.UNKNOWN);
254 T savedPDS = saveDiagram(presentationDataSet);
255 monitor.done();
256 return savedPDS;
257 }
258
259
260
261
262
263
264
265
266 @Override
267 public void setConfig(String filePath) {
268 this.config = filePath;
269 }
270
271 public String getConfig() {
272 return this.config;
273 }
274
275
276
277
278
279
280 @Override
281 public UUID renameDataSet(UUID id, String newName) {
282 IDataSet<IElement> ds = getDataSet(id);
283 if (ds != null) {
284 ds.setName(newName);
285 return saveDataSet(ds);
286 }
287 return null;
288 }
289
290 }