Project

General

Profile

« Previous | Next » 

Revision 57578

1. Stakeholder.java: Create constructor and copy constructor & change getters-setters for 'isDeafult', 'isPublic' and 'isActive' fields.
2. Topic.java: Create constructor and copy constructor & change getters-setters for 'isPublic' and 'isActive' fields.
3. Category.java: Create constructor and copy constructor & change getters-setters for 'isOverview, 'isPublic' and 'isActive' fields & remove field 'description'.
4. SubCategory.java: Create constructor and copy constructor & change getters-setters for 'isPublic' and 'isActive' fields & remove field 'description' &
make charts and numbers (List) generic (String or Indicator).
5. Indicator.java: Change getters-setters for 'indicatorPaths', 'isPublic' and 'isActive' fields & create method: public boolean hasType(String str), to check if "chart" or "number".
6. IndicatorPath.java: Add fields in schema (chartObject, parameters, filters) & add in enum IndicatorPathType types: pie, line, image.
7. MongoDBStakeholderDAO.java & StakeholderDAO.java: Add method: Stakeholder findByAlias(String Alias)
8. StakeholderController.java:
a. Add method: public Stakeholder setIndicatorsForStakeholder(Stakeholder stakeholder) to replace indicator ids with Indicator objects
(used by: getAllStakeholders, getAllDefaultStakeholders, getAllRealStakeholders, getStakeholder (by alias))
b. Add method: public Stakeholder getStakeholder(@PathVariable("alias") String alias) - /stakeholder/{alias}
c. Add method: public Stakeholder saveStakeholder(@RequestBody Stakeholder stakeholder) - /stakeholder/save
d. Add method: public boolean deleteIndicator(...) - /{stakeholder}/{topic}/{category}/{subcategory}/indicator/{id}
e. Add method: public Indicator saveIndicator(...) - /{stakeholder}/{topic}/{category}/{subcategory}/indicator/save (in body send Indicator object)

View differences:

StakeholderController.java
1 1
package eu.dnetlib.uoamonitorservice.controllers;
2 2

  
3
import com.fasterxml.jackson.core.type.TypeReference;
4
import com.fasterxml.jackson.databind.ObjectMapper;
5
import eu.dnetlib.uoamonitorservice.dao.IndicatorDAO;
3 6
import eu.dnetlib.uoamonitorservice.dao.StakeholderDAO;
4
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
7
import eu.dnetlib.uoamonitorservice.entities.*;
5 8
import org.apache.log4j.Logger;
6 9
import org.springframework.beans.factory.annotation.Autowired;
7 10
import org.springframework.web.bind.annotation.*;
......
9 12
import java.text.SimpleDateFormat;
10 13
import java.util.ArrayList;
11 14
import java.util.Date;
15
import java.util.Iterator;
12 16
import java.util.List;
13 17

  
14 18
@RestController
......
19 23
    @Autowired
20 24
    private StakeholderDAO stakeholderDAO;
21 25

  
26
    @Autowired
27
    private IndicatorDAO indicatorDAO;
28

  
29
    public Stakeholder setIndicatorsForStakeholder(Stakeholder stakeholder) {
30
        for (Topic topic: stakeholder.getTopics()) {
31
            for(Category category : topic.getCategories()) {
32
                List<SubCategory> subCategories = new ArrayList<>();
33

  
34
                for(SubCategory<String> subCategory : category.getSubCategories()) {
35
                    SubCategory subCategoryFull = new SubCategory<Indicator>(subCategory);
36

  
37
                    List<Indicator> charts = new ArrayList<>();
38
                    for(String indicatorId : subCategory.getCharts()) {
39
                        charts.add(indicatorDAO.findById(indicatorId));
40
                    }
41
                    subCategoryFull.setCharts(charts);
42

  
43
                    List<Indicator> numbers = new ArrayList<>();
44
                    for(String indicatorId : subCategory.getNumbers()) {
45
                        numbers.add(indicatorDAO.findById(indicatorId));
46
                    }
47
                    subCategoryFull.setNumbers(numbers);
48

  
49
                    subCategories.add(subCategoryFull);
50
                }
51

  
52
                category.setSubCategories(subCategories);
53
            }
54

  
55
        }
56
        return stakeholder;
57
    }
58

  
22 59
    @RequestMapping(value = "/stakeholder/all", method = RequestMethod.GET)
23 60
    public List<Stakeholder> getAllStakeholders(@RequestParam(required = false) String type) {
24 61
        List<Stakeholder> stakeholders;
......
27 64
        } else {
28 65
            stakeholders = stakeholderDAO.findByType(type);
29 66
        }
67

  
68
        for(Stakeholder stakeholder : stakeholders) {
69
            this.setIndicatorsForStakeholder(stakeholder);
70
        }
71

  
30 72
        return stakeholders;
31 73
    }
32 74

  
......
38 80
        } else {
39 81
            stakeholders = stakeholderDAO.findByIsDefaultProfileAndType(true, type);
40 82
        }
83

  
84
        for(Stakeholder stakeholder : stakeholders) {
85
            this.setIndicatorsForStakeholder(stakeholder);
86
        }
41 87
        return stakeholders;
42 88
    }
43 89

  
......
49 95
        } else {
50 96
            stakeholders = stakeholderDAO.findByIsDefaultProfileAndType(false, type);
51 97
        }
98

  
99
        for(Stakeholder stakeholder : stakeholders) {
100
            this.setIndicatorsForStakeholder(stakeholder);
101
        }
52 102
        log.debug(new Date());
53 103

  
54 104
        return stakeholders;
55 105
    }
56 106

  
107
    @RequestMapping(value = "/stakeholder/{alias}", method = RequestMethod.GET)
108
    public Stakeholder getStakeholder(@PathVariable("alias") String alias) {
109
        Stakeholder stakeholder = stakeholderDAO.findByAlias(alias);
110
        this.setIndicatorsForStakeholder(stakeholder);
111

  
112
        return stakeholder;
113
    }
114

  
115

  
116
    @RequestMapping(value = "/stakeholder/save", method = RequestMethod.POST)
117
    public Stakeholder saveStakeholder(@RequestBody Stakeholder stakeholder) {
118
        log.debug("save stakeholder");
119

  
120
        Stakeholder stakeholderFull = new Stakeholder(stakeholder);
121

  
122
        //this.minimizeIndicatorsForStakeholder(stakeholder);
123
        List<Topic> topicsFull = new ArrayList<>();
124

  
125
        for (Topic topic: stakeholder.getTopics()) {
126
            Topic topicFull = new Topic(topic);
127

  
128
            List<Category> categoriesFull = new ArrayList<>();
129

  
130
            for(Category category : topic.getCategories()) {
131
                Category categoryFull = new Category(category);
132

  
133
                List<SubCategory> subCategories = new ArrayList<>();
134
                List<SubCategory> subCategoriesFull = new ArrayList<>();
135

  
136
                for(SubCategory<Indicator> subCategoryFull : category.getSubCategories()) {
137
                    SubCategory subCategory = new SubCategory<String>(subCategoryFull);
138

  
139
                    List<String> charts = new ArrayList<>();
140

  
141
                    ObjectMapper mapper = new ObjectMapper();
142
                    //Jackson's use of generics
143
                    List<Indicator> chartsFull = mapper.convertValue(subCategoryFull.getCharts(), new TypeReference<List<Indicator>>(){});
144

  
145
                    //List<Indicator> chartsFull = (List<Indicator>)subCategoryFull.getCharts();
146
                    //log.debug(chartsFull);
147

  
148
                    for(Indicator indicator : chartsFull) {
149
                        charts.add(indicator.getId());
150
                    }
151

  
152
                    subCategory.setCharts(charts);
153
                    subCategoryFull.setCharts(chartsFull);
154

  
155
                    List<String> numbers = new ArrayList<>();
156
                    List<Indicator> numbersFull = mapper.convertValue(subCategoryFull.getNumbers(), new TypeReference<List<Indicator>>(){});
157

  
158
                    for(Indicator indicator : numbersFull) {
159
                        numbers.add(indicator.getId());
160
                    }
161
                    subCategory.setNumbers(numbers);
162
                    subCategoryFull.setNumbers(numbersFull);
163

  
164
                    subCategories.add(subCategory);
165
                    subCategoriesFull.add(subCategoryFull);
166
                }
167

  
168
                category.setSubCategories(subCategories);
169
                categoryFull.setSubCategories(subCategoriesFull);
170

  
171
                categoriesFull.add(categoryFull);
172
            }
173
            topicFull.setCategories(categoriesFull);
174
            topicsFull.add(topicFull);
175
        }
176
        stakeholderFull.setTopics(topicsFull);
177

  
178
        log.debug("after minimize stakeholder");
179
        Stakeholder stakeholderSaved = stakeholderDAO.save(stakeholder);
180
        log.debug("stakeholder saved!");
181

  
182
        stakeholderFull.setId(stakeholderSaved.getId());
183
        return stakeholderFull;
184
    }
185

  
186
    @RequestMapping(value = "/{stakeholder}/{topic}/{category}/{subcategory}/indicator/{id}", method = RequestMethod.DELETE)
187
    public boolean deleteIndicator(@PathVariable("stakeholder") String stakeholder,
188
                            @PathVariable("topic") String topic,
189
                            @PathVariable("category") String category,
190
                            @PathVariable("subcategory") String subcategory,
191
                            @PathVariable("id") String id) {
192

  
193
        Stakeholder _stakeholder = stakeholderDAO.findByAlias(stakeholder);
194
        if(_stakeholder != null) {
195
            Topic _topic = _stakeholder.getTopics().stream()
196
                    .filter(current_topic -> current_topic.getAlias().equals(topic))
197
                    .findFirst()
198
                    .orElse(null);
199
            if(_topic != null) {
200
                Category _category = _topic.getCategories().stream()
201
                        .filter(current_category -> current_category.getAlias().equals(category))
202
                        .findFirst()
203
                        .orElse(null);
204
                if(_category != null) {
205
                    SubCategory _subCategory = _category.getSubCategories().stream()
206
                            .filter(current_subCategory -> current_subCategory.getAlias().equals(subcategory))
207
                            .findFirst()
208
                            .orElse(null);
209
                    if(_subCategory != null) {
210
                        List<String> indicators = null;
211

  
212
                        Indicator indicator = indicatorDAO.findById(id);
213
                        if(indicator.hasType("chart")) {
214
                            indicators =_subCategory.getCharts();
215
                        } else if(indicator.hasType("number")) {
216
                            indicators =_subCategory.getNumbers();
217
                        }
218

  
219
                        if(indicators == null) {
220
                            // EXCEPTION - No indicators found
221
                        }
222

  
223
                        //List<String> finalIndicators = indicators;
224
                        //log.debug("Indicators size: "+finalIndicators.size());
225
//                        int index = IntStream.range(0, indicators.size())
226
//                                .filter(i -> indicatorId.equals(finalIndicators.get(i)))
227
//                                .findFirst()
228
//                                .orElse(-1);	// return -1 if target is not found
229

  
230
                        boolean indicatorFound = false;
231
                        Iterator<String> indicatorIterator = indicators.iterator();
232
                        while (indicatorIterator.hasNext()) {
233
                            String indicatorId = indicatorIterator.next();
234
                            log.debug(id + " vs "+indicatorId);
235
                            if(id.equals(indicatorId)) {
236
                                indicatorIterator.remove();
237
                                indicatorFound = true;
238
                                break;
239
                            }
240
                        }
241

  
242
                        log.debug(indicatorFound);
243
                        if(!indicatorFound) {
244
                            return false;
245
                            // EXCEPTION - Indicator not found
246
                        }
247
                        //indicators.remove(index);
248

  
249
                        stakeholderDAO.save(_stakeholder);
250
                        indicatorDAO.delete(id);
251
                    } else {
252
                        // EXCEPTION - Subcategory not found
253
                    }
254
                } else {
255
                    // EXCEPTION - Category not found
256
                }
257
            } else {
258
                // EXCEPTION - Topic not found
259
            }
260
        } else {
261
            // EXCEPTION - Stakeholder not found
262
        }
263
        return true;
264
    }
265

  
266
//    @RequestMapping(value = "/{stakeholder}/{topic}/{category}/{subcategory}/indicator/delete", method = RequestMethod.POST)
267
//    public boolean deleteChartPost(@PathVariable("stakeholder") String stakeholder,
268
//                            @PathVariable("topic") String topic,
269
//                            @PathVariable("category") String category,
270
//                            @PathVariable("subcategory") String subcategory,
271
//                            @RequestBody String indicatorId) {
272
//        //String id = chart.getId();
273
//        return deleteIndicator(stakeholder, topic, category, subcategory, indicatorId);
274
//    }
275

  
276

  
277
    // path variables are alias-es. Each alias must be unique.
278
    @RequestMapping(value = "/{stakeholder}/{topic}/{category}/{subcategory}/indicator/save", method = RequestMethod.POST)
279
    public Indicator saveIndicator(@PathVariable("stakeholder") String stakeholder,
280
                                     @PathVariable("topic") String topic,
281
                                     @PathVariable("category") String category,
282
                                     @PathVariable("subcategory") String subcategory,
283
                                     @RequestBody Indicator indicator) {
284

  
285
        Indicator indicatorSaved = null;
286
        if(indicator.getId() != null) {
287
            log.debug("indicator is already saved");
288
            indicatorSaved = indicatorDAO.save(indicator);
289
        } else {
290
            log.debug("to save indicator");
291
            Stakeholder _stakeholder = stakeholderDAO.findByAlias(stakeholder);
292
            if (_stakeholder != null) {
293
                Topic _topic = _stakeholder.getTopics().stream()
294
                        .filter(current_topic -> current_topic.getAlias().equals(topic))
295
                        .findFirst()
296
                        .orElse(null);
297
                if (_topic != null) {
298
                    Category _category = _topic.getCategories().stream()
299
                            .filter(current_category -> current_category.getAlias().equals(category))
300
                            .findFirst()
301
                            .orElse(null);
302
                    if (_category != null) {
303
                        SubCategory _subCategory = _category.getSubCategories().stream()
304
                                .filter(current_subCategory -> current_subCategory.getAlias().equals(subcategory))
305
                                .findFirst()
306
                                .orElse(null);
307
                        if (_subCategory != null) {
308
                            indicatorSaved = indicatorDAO.save(indicator);
309

  
310
                            List<String> indicators = null;
311

  
312
                            if (indicator.hasType("chart")) {
313
                                indicators = _subCategory.getCharts();
314
                            } else if (indicator.hasType("number")) {
315
                                indicators = _subCategory.getNumbers();
316
                            }
317

  
318
                            String indicatorId;
319
                            if (indicator.getId() != null) {
320
                                indicatorId = indicators.stream()
321
                                        .filter(current_indicator -> current_indicator.equals(indicator.getId()))
322
                                        .findFirst()
323
                                        .orElse(null);
324

  
325
                                if (indicatorId == null) {   // indicator is not already at this position
326
                                    indicators.add(indicator.getId());
327
                                }
328
                            }
329
                            stakeholderDAO.save(_stakeholder);
330
                        } else {
331
                            // EXCEPTION - Subcategory not found
332
                        }
333
                    } else {
334
                        // EXCEPTION - Category not found
335
                    }
336
                } else {
337
                    // EXCEPTION - Topic not found
338
                }
339
            } else {
340
                // EXCEPTION - Stakeholder not found
341
            }
342
        }
343

  
344
        return indicatorSaved;
345
    }
346

  
347

  
348
    // The following are not supposed to be used
349

  
350
    // should i delete indicators that were in the list but they are not in the new list?
351
    @RequestMapping(value = "/{stakeholder}/{topic}/{category}/{subcategory}/charts/save", method = RequestMethod.POST)
352
    public List<Indicator> saveCharts(@PathVariable("stakeholder") String stakeholder,
353
                                     @PathVariable("topic") String topic,
354
                                     @PathVariable("category") String category,
355
                                     @PathVariable("subcategory") String subcategory,
356
                                     @RequestBody List<Indicator> charts) {
357
        log.debug(charts);
358
        log.debug(charts.size());
359
        log.debug(charts.getClass().getName());
360
        log.debug(charts.get(0).getClass().getName());
361
        return saveIndicators(stakeholder, topic, category, subcategory, charts, "chart");
362
    }
363

  
364
    // should i delete indicators that were in the list but they are not in the new list?
365
    @RequestMapping(value = "/{stakeholder}/{topic}/{category}/{subcategory}/numbers/save", method = RequestMethod.POST)
366
    public List<Indicator> saveNumbers(@PathVariable("stakeholder") String stakeholder,
367
                                      @PathVariable("topic") String topic,
368
                                      @PathVariable("category") String category,
369
                                      @PathVariable("subcategory") String subcategory,
370
                                      @RequestBody List<Indicator> numbers) {
371
        return saveIndicators(stakeholder, topic, category, subcategory, numbers, "number");
372
    }
373

  
374
    public List<Indicator> saveIndicators(String stakeholder, String topic,
375
                                          String category, String subcategory,
376
                                          List<Indicator> indicators, String type) {
377
        log.debug("to save indicators: "+indicators.size());
378
        List<Indicator> indicatorsSaved = new ArrayList<>();
379
        for(Indicator indicator : indicators) {
380
            indicatorsSaved.add(indicatorDAO.save(indicator));
381
        }
382
        log.debug("saved indicators: "+indicators.size());
383

  
384
        Stakeholder _stakeholder = stakeholderDAO.findByAlias(stakeholder);
385
        if(_stakeholder != null) {
386
            Topic _topic = _stakeholder.getTopics().stream()
387
                    .filter(current_topic -> current_topic.getAlias().equals(topic))
388
                    .findFirst()
389
                    .orElse(null);
390
            if(_topic != null) {
391
                Category _category = _topic.getCategories().stream()
392
                        .filter(current_category -> current_category.getAlias().equals(category))
393
                        .findFirst()
394
                        .orElse(null);
395
                if(_category != null) {
396
                    SubCategory _subCategory = _category.getSubCategories().stream()
397
                            .filter(current_subCategory -> current_subCategory.getAlias().equals(subcategory))
398
                            .findFirst()
399
                            .orElse(null);
400
                    if(_subCategory != null) {
401
                        List<String> _indicators = null;
402
                        if(type.equals("chart")) {
403
                            _indicators = _subCategory.getCharts();
404
                        } else if(type.equals("number")) {
405
                            _indicators = _subCategory.getNumbers();
406
                        }
407

  
408
                        _indicators.clear();
409
                        for(Indicator indicator : indicators) {
410
                            _indicators.add(indicator.getId());
411
                        }
412
                        stakeholderDAO.save(_stakeholder);
413
                    } else {
414
                        // EXCEPTION - Subcategory not found
415
                    }
416
                } else {
417
                    // EXCEPTION - Vategory not found
418
                }
419
            } else {
420
                // EXCEPTION - Topic not found
421
            }
422
        } else {
423
            // EXCEPTION - Stakeholder not found
424
        }
425

  
426
        return indicatorsSaved;
427
    }
428

  
429

  
430

  
431
    // Remember to check if alias is not already used before saving
432
    @RequestMapping(value = "/{stakeholder}/topic/save", method = RequestMethod.POST)
433
    public Stakeholder saveTopic(@PathVariable("stakeholder") String stakeholder,
434
                                 @RequestBody Topic topic) {
435
        Stakeholder stakeholderSaved = null;
436
        Stakeholder _stakeholder = stakeholderDAO.findByAlias(stakeholder);
437
        if (stakeholder != null) {
438
            List<Topic> topics = _stakeholder.getTopics();
439
            Topic _topic = topics.stream()
440
                    .filter(current_topic -> current_topic.getAlias().equals(topic.getAlias()))
441
                    .findFirst()
442
                    .orElse(null);
443
            if(_topic != null) {
444
                _topic = topic;
445
            } else {
446
                topics.add(topic);
447
                _stakeholder.setTopics(topics);
448
            }
449
            stakeholderSaved = stakeholderDAO.save(_stakeholder);
450
        }
451
        return stakeholderSaved;
452
    }
453

  
454
    @RequestMapping(value = "/{stakeholder}/topics/save", method = RequestMethod.POST)
455
    public Stakeholder saveTopics(@PathVariable("stakeholder") String stakeholder,
456
                                  @RequestBody List<Topic> topics) {
457
        Stakeholder stakeholderSaved = null;
458
        Stakeholder _stakeholder = stakeholderDAO.findByAlias(stakeholder);
459
        if (stakeholder != null) {
460
            _stakeholder.setTopics(topics);
461
            stakeholderSaved = stakeholderDAO.save(_stakeholder);
462
        }
463
        return stakeholderSaved;
464
    }
465

  
466

  
57 467
    @RequestMapping(value = "/stakeholder/dates", method = RequestMethod.GET)
58 468
    public List<Date> getAllStakeholderDates() {
59 469
        List<Stakeholder> profiles = stakeholderDAO.findAll();
......
93 503
        }
94 504
        return profileDates;
95 505
    }
96

  
97

  
98
    @RequestMapping(value = "/stakeholder/save", method = RequestMethod.POST)
99
    public Stakeholder insertStakeholder(@RequestBody Stakeholder stakeholder) {
100
        //Stakeholder stakeholder = new Stakeholder();
101

  
102
        Stakeholder stakeholderSaved = stakeholderDAO.save(stakeholder);
103

  
104
        return stakeholderSaved;
105
    }
106 506
}

Also available in: Unified diff