Passed
Push — master ( 634ec8...dcf6e8 )
by Valentyn
08:10
created

createParseWorkout(Workout)   B

Complexity

Conditions 2

Size

Total Lines 65
Code Lines 65

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 65
dl 0
loc 65
rs 8.1454
c 1
b 0
f 0
cc 2

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
package com.osomapps.pt.admin.program;
2
3
import com.osomapps.pt.ResourceNotFoundException;
4
import com.osomapps.pt.programs.ParseExercise;
5
import com.osomapps.pt.programs.ParseExerciseRepository;
6
import com.osomapps.pt.programs.ParseGoal;
7
import com.osomapps.pt.programs.ParseGoalRepository;
8
import com.osomapps.pt.programs.ParsePart;
9
import com.osomapps.pt.programs.ParsePartRepository;
10
import com.osomapps.pt.programs.ParseProgram;
11
import com.osomapps.pt.programs.ParseRound;
12
import com.osomapps.pt.programs.ParseRoundRepository;
13
import com.osomapps.pt.programs.ParseSheets;
14
import com.osomapps.pt.programs.ParseUserGroup;
15
import com.osomapps.pt.programs.ParseUserGroupRepository;
16
import com.osomapps.pt.programs.ParseWarmupWorkoutItem;
17
import com.osomapps.pt.programs.ParseWarmupWorkoutItemRepository;
18
import com.osomapps.pt.programs.ParseWorkout;
19
import com.osomapps.pt.programs.ParseWorkoutItem;
20
import com.osomapps.pt.programs.ParseWorkoutItemRepository;
21
import com.osomapps.pt.programs.ParseWorkoutItemSet;
22
import com.osomapps.pt.programs.ParseWorkoutItemSetRepository;
23
import com.osomapps.pt.programs.ParseWorkoutRepository;
24
import com.osomapps.pt.programs.ProgramRepository;
25
import com.osomapps.pt.xlsx.ExcelSheets;
26
import com.osomapps.pt.xlsx.Workout;
27
import com.osomapps.pt.xlsx.XlsxProgramParser;
28
import java.io.ByteArrayInputStream;
29
import java.io.IOException;
30
import java.io.OutputStream;
31
import java.time.LocalDateTime;
32
import java.util.Arrays;
33
import java.util.Base64;
34
import java.util.Collections;
35
import java.util.List;
36
import java.util.stream.Collectors;
37
import org.apache.commons.lang3.BooleanUtils;
38
import org.apache.commons.lang3.StringUtils;
39
import org.springframework.data.domain.Sort;
40
import org.springframework.stereotype.Service;
41
42
@Service
43
class AdminProgramService {
44
45
    private static final String BASE64_PREFIX = ";base64,";
46
    private static final int BASE64_PREFIX_LENGTH = 8;
47
    private final ProgramRepository programRepository;
48
    private final ParseExerciseRepository parseExerciseRepository;
49
    private final ParseGoalRepository parseGoalRepository;
50
    private final ParseUserGroupRepository parseUserGroupRepository;
51
    private final ParseRoundRepository parseRoundRepository;
52
    private final ParsePartRepository parsePartRepository;
53
    private final ParseWorkoutRepository parseWorkoutRepository;
54
    private final ParseWarmupWorkoutItemRepository parseWarmupWorkoutItemRepository;
55
    private final ParseWorkoutItemRepository parseWorkoutItemRepository;
56
    private final ParseWorkoutItemSetRepository parseWorkoutItemSetRepository;
57
58
    AdminProgramService(
0 ignored issues
show
Comprehensibility introduced by
Constructor has 10 parameters, which is greater than 7 authorized.
Loading history...
59
            ProgramRepository programRepository,
60
            ParseExerciseRepository parseExerciseRepository,
61
            ParseGoalRepository parseGoalRepository,
62
            ParseUserGroupRepository parseUserGroupRepository,
63
            ParseRoundRepository parseRoundRepository,
64
            ParsePartRepository parsePartRepository,
65
            ParseWorkoutRepository parseWorkoutRepository,
66
            ParseWarmupWorkoutItemRepository parseWarmupWorkoutItemRepository,
67
            ParseWorkoutItemRepository parseWorkoutItemRepository,
68
            ParseWorkoutItemSetRepository parseWorkoutItemSetRepository) {
69
        this.programRepository = programRepository;
70
        this.parseExerciseRepository = parseExerciseRepository;
71
        this.parseGoalRepository = parseGoalRepository;
72
        this.parseUserGroupRepository = parseUserGroupRepository;
73
        this.parseRoundRepository = parseRoundRepository;
74
        this.parsePartRepository = parsePartRepository;
75
        this.parseWorkoutRepository = parseWorkoutRepository;
76
        this.parseWarmupWorkoutItemRepository = parseWarmupWorkoutItemRepository;
77
        this.parseWorkoutItemRepository = parseWorkoutItemRepository;
78
        this.parseWorkoutItemSetRepository = parseWorkoutItemSetRepository;
79
    }
80
81
    List<ProgramResponseDTO> findAll() {
82
        return programRepository.findAll(sortByIdAsc()).stream()
83
                .map(program -> programToDto(program))
84
                .collect(Collectors.toList());
85
    }
86
87
    private Sort sortByIdAsc() {
88
        return Sort.by(Sort.Direction.ASC, "id");
89
    }
90
91
    private ProgramResponseDTO programToDto(ParseProgram program) {
92
        return ProgramResponseDTO.builder()
93
                .id(program.getId())
94
                .name(program.getName())
95
                .fileName(program.getFile_name())
96
                .fileSize(program.getFile_size())
97
                .fileType(program.getFile_type())
98
                .dataUrl(program.getData_url())
99
                .updated(program.getUpdated())
100
                .parseExercises(
101
                        program.getParseExercises().stream()
102
                                .map(
103
                                        exercise ->
104
                                                ParseExerciseDTO.builder()
105
                                                        .exercise_id(exercise.getExercise_id())
106
                                                        .exercise_name(exercise.getExercise_name())
107
                                                        .user_group_1_percent(
108
                                                                exercise.getUser_group_1_percent())
109
                                                        .user_group_2_percent(
110
                                                                exercise.getUser_group_2_percent())
111
                                                        .user_group_3_percent(
112
                                                                exercise.getUser_group_3_percent())
113
                                                        .user_group_4_percent(
114
                                                                exercise.getUser_group_4_percent())
115
                                                        .basis_for_calculations(
116
                                                                exercise
117
                                                                        .getBasis_for_calculations())
118
                                                        .build())
119
                                .collect(Collectors.toList()))
120
                .parseGoals(
121
                        program.getParseGoals().stream()
122
                                .map(
123
                                        result ->
124
                                                ParseGoalDTO.builder()
125
                                                        .id(result.getId())
126
                                                        .name(result.getName())
127
                                                        .loops(result.getLoops())
128
                                                        .errors(result.getErrors())
129
                                                        .userGroups(
130
                                                                result.getParseUserGroups().stream()
131
                                                                        .map(
132
                                                                                userGroup ->
133
                                                                                        ParseUserGroupDTO
134
                                                                                                .builder()
135
                                                                                                .id(
136
                                                                                                        userGroup
137
                                                                                                                .getId())
138
                                                                                                .name(
139
                                                                                                        userGroup
140
                                                                                                                .getName())
141
                                                                                                .rounds(
142
                                                                                                        userGroup
143
                                                                                                                                .getParseRounds()
144
                                                                                                                        == null
145
                                                                                                                ? null
146
                                                                                                                : userGroup
147
                                                                                                                        .getParseRounds()
148
                                                                                                                        .stream()
149
                                                                                                                        .map(
150
                                                                                                                                round ->
151
                                                                                                                                        ParseRoundDTO
152
                                                                                                                                                .builder()
153
                                                                                                                                                .id(
154
                                                                                                                                                        round
155
                                                                                                                                                                .getId())
156
                                                                                                                                                .name(
157
                                                                                                                                                        round
158
                                                                                                                                                                .getName())
159
                                                                                                                                                .parts(
160
                                                                                                                                                        round
161
                                                                                                                                                                .getParseParts()
162
                                                                                                                                                                .stream()
163
                                                                                                                                                                .map(
164
                                                                                                                                                                        part ->
165
                                                                                                                                                                                ParsePartDTO
166
                                                                                                                                                                                        .builder()
167
                                                                                                                                                                                        .id(
168
                                                                                                                                                                                                part
169
                                                                                                                                                                                                        .getId())
170
                                                                                                                                                                                        .name(
171
                                                                                                                                                                                                part
172
                                                                                                                                                                                                        .getName())
173
                                                                                                                                                                                        .workouts(
174
                                                                                                                                                                                                part
175
                                                                                                                                                                                                        .getParseWorkouts()
176
                                                                                                                                                                                                        .stream()
177
                                                                                                                                                                                                        .map(
178
                                                                                                                                                                                                                workout ->
179
                                                                                                                                                                                                                        createParseWorkoutDTO(
180
                                                                                                                                                                                                                                workout))
181
                                                                                                                                                                                                        .collect(
182
                                                                                                                                                                                                                Collectors
183
                                                                                                                                                                                                                        .toList()))
184
                                                                                                                                                                                        .build())
185
                                                                                                                                                                .collect(
186
                                                                                                                                                                        Collectors
187
                                                                                                                                                                                .toList()))
188
                                                                                                                                                .build())
189
                                                                                                                        .collect(
190
                                                                                                                                Collectors
191
                                                                                                                                        .toList()))
192
                                                                                                .build())
193
                                                                        .collect(
194
                                                                                Collectors
195
                                                                                        .toList()))
196
                                                        .build())
197
                                .collect(Collectors.toList()))
198
                .build();
199
    }
200
201
    private ParseWorkoutDTO createParseWorkoutDTO(ParseWorkout workout) {
202
        return ParseWorkoutDTO.builder()
203
                .id(workout.getId())
204
                .name(workout.getName())
205
                .warmupWorkoutItem(
206
                        workout.getParseWarmupWorkoutItems() == null
207
                                ? null
208
                                : ParseWarmupWorkoutItemDTO.builder()
209
                                        .id(workout.getParseWarmupWorkoutItems().get(0).getId())
210
                                        .name(workout.getParseWarmupWorkoutItems().get(0).getName())
211
                                        .speed(
212
                                                workout.getParseWarmupWorkoutItems()
213
                                                        .get(0)
214
                                                        .getSpeed())
215
                                        .incline(
216
                                                workout.getParseWarmupWorkoutItems()
217
                                                        .get(0)
218
                                                        .getIncline())
219
                                        .time_in_min(
220
                                                workout.getParseWarmupWorkoutItems()
221
                                                        .get(0)
222
                                                        .getTime_in_min())
223
                                        .build())
224
                .workoutItems(
225
                        workout.getParseWorkoutItems() == null
226
                                ? null
227
                                : workout.getParseWorkoutItems().stream()
228
                                        .map(
229
                                                workoutItem ->
230
                                                        ParseWorkoutItemDTO.builder()
231
                                                                .id(workoutItem.getId())
232
                                                                .name(workoutItem.getName())
233
                                                                .sets(
234
                                                                        workoutItem
235
                                                                                .getParseWorkoutItemSets()
236
                                                                                .stream()
237
                                                                                .map(
238
                                                                                        set ->
239
                                                                                                new ParseWorkoutItemSetDTO()
240
                                                                                                        .setRepetitions(
241
                                                                                                                set
242
                                                                                                                        .getRepetitions())
243
                                                                                                        .setRepetitions_to_failure(
244
                                                                                                                set
245
                                                                                                                        .getRepetitions_to_failure())
246
                                                                                                        .setWeight(
247
                                                                                                                set
248
                                                                                                                        .getWeight())
249
                                                                                                        .setBodyweight(
250
                                                                                                                set
251
                                                                                                                        .getBodyweight())
252
                                                                                                        .setTime_in_min(
253
                                                                                                                set
254
                                                                                                                        .getTime_in_min())
255
                                                                                                        .setSpeed(
256
                                                                                                                set
257
                                                                                                                        .getSpeed())
258
                                                                                                        .setIncline(
259
                                                                                                                set
260
                                                                                                                        .getIncline())
261
                                                                                                        .setResistance(
262
                                                                                                                set
263
                                                                                                                        .getResistance()))
264
                                                                                .collect(
265
                                                                                        Collectors
266
                                                                                                .toList()))
267
                                                                .build())
268
                                        .collect(Collectors.toList()))
269
                .build();
270
    }
271
272
    ProgramResponseDTO findOne(Long id) {
273
        final ParseProgram program = programRepository.findById(id).orElse(null);
274
        if (program == null) {
275
            throw new ResourceNotFoundException("Program with id " + id + " not found");
276
        }
277
        return programToDto(program);
278
    }
279
280
    ProgramResponseDTO create(ProgramRequestDTO programRequestDTO) {
281
        final ParseProgram program = new ParseProgram();
282
        program.setName(programRequestDTO.getName());
283
        program.setFile_name(programRequestDTO.getFileName());
284
        program.setFile_size(programRequestDTO.getFileSize());
285
        program.setFile_type(programRequestDTO.getFileType());
286
        program.setData_url(programRequestDTO.getDataUrl());
287
        final ParseProgram savedProgram = programRepository.save(program);
288
        final ParseSheets parseSheets = parseDataUrlAndSaveGoals(programRequestDTO, savedProgram);
289
        program.setParseExercises(parseSheets.getParseExercises());
290
        program.setParseGoals(parseSheets.getParseGoals());
291
        return programToDto(program);
292
    }
293
294
    private ParseSheets parseDataUrlAndSaveGoals(
295
            ProgramRequestDTO programRequestDTO, final ParseProgram savedProgram) {
296
        final ParseSheets parseSheets = parseDataUrl(programRequestDTO, savedProgram);
297
        parseExerciseRepository.saveAll(parseSheets.getParseExercises());
298
        final List<ParseGoal> savedParseGoals =
299
                parseGoalRepository.saveAll(parseSheets.getParseGoals());
300
        savedParseGoals.forEach(
301
                (parseGoal) -> {
0 ignored issues
show
Java 8 introduced by
Remove useless curly braces around statement
Loading history...
302
                    parseGoal
303
                            .getParseUserGroups()
304
                            .forEach(
305
                                    (parseUserGroup) -> {
306
                                        parseUserGroup.setParseGoal(parseGoal);
307
                                        parseUserGroup
308
                                                .getParseRounds()
309
                                                .forEach(
310
                                                        (parseRound) -> {
311
                                                            parseRound.setParseUserGroup(
312
                                                                    parseUserGroup);
313
                                                            parseRound
314
                                                                    .getParseParts()
315
                                                                    .forEach(
316
                                                                            (parsePart) -> {
317
                                                                                parsePart
318
                                                                                        .setParseRound(
319
                                                                                                parseRound);
320
                                                                                parsePart
321
                                                                                        .getParseWorkouts()
322
                                                                                        .forEach(
323
                                                                                                (parseWorkout) -> {
324
                                                                                                    parseWorkout
325
                                                                                                            .setParsePart(
326
                                                                                                                    parsePart);
327
                                                                                                    if (parseWorkout
328
                                                                                                                    .getParseWarmupWorkoutItems()
329
                                                                                                            != null) {
330
                                                                                                        parseWorkout
331
                                                                                                                .getParseWarmupWorkoutItems()
332
                                                                                                                .forEach(
333
                                                                                                                        (parseWarmupWorkoutItem) -> {
0 ignored issues
show
Java 8 introduced by
Remove useless curly braces around statement
Loading history...
334
                                                                                                                            parseWarmupWorkoutItem
335
                                                                                                                                    .setParseWorkout(
336
                                                                                                                                            parseWorkout);
337
                                                                                                                        });
338
                                                                                                    }
339
                                                                                                    if (parseWorkout
340
                                                                                                                    .getParseWorkoutItems()
341
                                                                                                            != null) {
342
                                                                                                        parseWorkout
343
                                                                                                                .getParseWorkoutItems()
344
                                                                                                                .forEach(
345
                                                                                                                        (parseWorkoutItem) -> {
346
                                                                                                                            parseWorkoutItem
347
                                                                                                                                    .setParseWorkout(
348
                                                                                                                                            parseWorkout);
349
                                                                                                                            parseWorkoutItem
350
                                                                                                                                    .getParseWorkoutItemSets()
351
                                                                                                                                    .forEach(
352
                                                                                                                                            (parseWorkoutItemSet) -> {
0 ignored issues
show
Java 8 introduced by
Remove useless curly braces around statement
Loading history...
353
                                                                                                                                                parseWorkoutItemSet
354
                                                                                                                                                        .setParseWorkoutItem(
355
                                                                                                                                                                parseWorkoutItem);
356
                                                                                                                                            });
357
                                                                                                                        });
358
                                                                                                    }
359
                                                                                                });
360
                                                                            });
361
                                                        });
362
                                    });
363
                });
364
        savedParseGoals.forEach(
365
                (parseGoal) -> {
366
                    parseUserGroupRepository.saveAll(parseGoal.getParseUserGroups());
367
                    parseGoal
368
                            .getParseUserGroups()
369
                            .forEach(
370
                                    (parseUserGroup) -> {
371
                                        parseRoundRepository.saveAll(
372
                                                parseUserGroup.getParseRounds());
373
                                        parseUserGroup
374
                                                .getParseRounds()
375
                                                .forEach(
376
                                                        (parseRound) -> {
377
                                                            parsePartRepository.saveAll(
378
                                                                    parseRound.getParseParts());
379
                                                            parseRound
380
                                                                    .getParseParts()
381
                                                                    .forEach(
382
                                                                            (parsePart) -> {
383
                                                                                parseWorkoutRepository
384
                                                                                        .saveAll(
385
                                                                                                parsePart
386
                                                                                                        .getParseWorkouts());
387
                                                                                parsePart
388
                                                                                        .getParseWorkouts()
389
                                                                                        .forEach(
390
                                                                                                (parseWorkout) -> {
391
                                                                                                    parseWarmupWorkoutItemRepository
392
                                                                                                            .saveAll(
393
                                                                                                                    parseWorkout
394
                                                                                                                            .getParseWarmupWorkoutItems());
395
                                                                                                    parseWorkoutItemRepository
396
                                                                                                            .saveAll(
397
                                                                                                                    parseWorkout
398
                                                                                                                            .getParseWorkoutItems());
399
                                                                                                    parseWorkout
400
                                                                                                            .getParseWorkoutItems()
401
                                                                                                            .forEach(
402
                                                                                                                    parseWorkoutItem -> {
0 ignored issues
show
Java 8 introduced by
Remove useless curly braces around statement
Loading history...
403
                                                                                                                        parseWorkoutItemSetRepository
404
                                                                                                                                .saveAll(
405
                                                                                                                                        parseWorkoutItem
406
                                                                                                                                                .getParseWorkoutItemSets());
407
                                                                                                                    });
408
                                                                                                });
409
                                                                            });
410
                                                        });
411
                                    });
412
                });
413
        return parseSheets;
414
    }
415
416
    ProgramResponseDTO update(Long id, ProgramRequestDTO programRequestDTO) {
417
        final ParseProgram program = programRepository.findById(id).orElse(null);
418
        if (program == null) {
419
            throw new ResourceNotFoundException("Program with id " + id + " not found");
420
        }
421
        program.setName(programRequestDTO.getName());
422
        program.setFile_name(programRequestDTO.getFileName());
423
        program.setFile_size(programRequestDTO.getFileSize());
424
        program.setFile_type(programRequestDTO.getFileType());
425
        program.setData_url(programRequestDTO.getDataUrl());
426
        program.setUpdated(LocalDateTime.now());
427
        parseExerciseRepository.deleteAll(program.getParseExercises());
428
        parseGoalRepository.deleteAll(program.getParseGoals());
429
        final ParseSheets parseSheets = parseDataUrlAndSaveGoals(programRequestDTO, program);
430
        program.setParseExercises(parseSheets.getParseExercises());
431
        program.setParseGoals(parseSheets.getParseGoals());
432
        return programToDto(programRepository.save(program));
433
    }
434
435
    private ParseSheets parseDataUrl(
436
            ProgramRequestDTO programRequestDTO, final ParseProgram program) {
437
        final ByteArrayInputStream arrayInputStream =
438
                dataUrlToInputStream(programRequestDTO.getDataUrl());
439
        final XlsxProgramParser xlsxProgramParser = XlsxProgramParser.of(arrayInputStream);
440
        final ExcelSheets excelSheets = xlsxProgramParser.getExcelSheets();
441
        return new ParseSheets()
442
                .setParseExercises(
443
                        excelSheets.getExcelExercises().stream()
444
                                .map(
445
                                        exercise ->
446
                                                new ParseExercise()
447
                                                        .setExercise_id(exercise.getExercise_id())
448
                                                        .setExercise_name(
449
                                                                exercise.getExercise_name())
450
                                                        .setUser_group_1_percent(
451
                                                                exercise.getUser_group_1_percent())
452
                                                        .setUser_group_2_percent(
453
                                                                exercise.getUser_group_2_percent())
454
                                                        .setUser_group_3_percent(
455
                                                                exercise.getUser_group_3_percent())
456
                                                        .setUser_group_4_percent(
457
                                                                exercise.getUser_group_4_percent())
458
                                                        .setBasis_for_calculations(
459
                                                                exercise
460
                                                                        .getBasis_for_calculations())
461
                                                        .setParseProgram(program))
462
                                .collect(Collectors.toList()))
463
                .setParseGoals(
464
                        excelSheets.getExcelGoals().stream()
465
                                .map(
466
                                        goal ->
467
                                                new ParseGoal()
468
                                                        .setErrors(
469
                                                                StringUtils.abbreviate(
470
                                                                        goal.getErrors().stream()
471
                                                                                .collect(
472
                                                                                        Collectors
473
                                                                                                .joining(
474
                                                                                                        ", ")),
475
                                                                        1000))
476
                                                        .setName(goal.getName())
477
                                                        .setSheet_index(goal.getSheetIndex())
478
                                                        .setLoops(goal.getLoops())
479
                                                        .setParseProgram(program)
480
                                                        .setParseUserGroups(
481
                                                                goal.getUserGroups().stream()
482
                                                                        .map(
483
                                                                                userGroup ->
484
                                                                                        new ParseUserGroup()
485
                                                                                                .setName(
486
                                                                                                        userGroup
487
                                                                                                                .getName())
488
                                                                                                .setParseRounds(
489
                                                                                                        userGroup
490
                                                                                                                .getRounds()
491
                                                                                                                .stream()
492
                                                                                                                .map(
493
                                                                                                                        round ->
494
                                                                                                                                new ParseRound()
495
                                                                                                                                        .setName(
496
                                                                                                                                                round
497
                                                                                                                                                        .getName())
498
                                                                                                                                        .setParseParts(
499
                                                                                                                                                round
500
                                                                                                                                                        .getParts()
501
                                                                                                                                                        .stream()
502
                                                                                                                                                        .map(
503
                                                                                                                                                                part ->
504
                                                                                                                                                                        new ParsePart()
505
                                                                                                                                                                                .setName(
506
                                                                                                                                                                                        part
507
                                                                                                                                                                                                .getName())
508
                                                                                                                                                                                .setParseWorkouts(
509
                                                                                                                                                                                        part
510
                                                                                                                                                                                                .getWorkouts()
511
                                                                                                                                                                                                .stream()
512
                                                                                                                                                                                                .map(
513
                                                                                                                                                                                                        workout ->
514
                                                                                                                                                                                                                createParseWorkout(
515
                                                                                                                                                                                                                        workout))
516
                                                                                                                                                                                                .collect(
517
                                                                                                                                                                                                        Collectors
518
                                                                                                                                                                                                                .toList())))
519
                                                                                                                                                        .collect(
520
                                                                                                                                                                Collectors
521
                                                                                                                                                                        .toList())))
522
                                                                                                                .collect(
523
                                                                                                                        Collectors
524
                                                                                                                                .toList())))
525
                                                                        .collect(
526
                                                                                Collectors
527
                                                                                        .toList())))
528
                                .collect(Collectors.toList()));
529
    }
530
531
    private ParseWorkout createParseWorkout(Workout workout) {
532
        return new ParseWorkout()
533
                .setName(workout.getName())
534
                .setParseWarmupWorkoutItems(
535
                        workout.getWarmup() == null
536
                                ? Collections.emptyList()
537
                                : Arrays.asList(
538
                                        new ParseWarmupWorkoutItem()
539
                                                .setName(workout.getWarmup().getExercise())
540
                                                .setExercise_id(workout.getWarmup().getExerciseId())
541
                                                .setSpeed(workout.getWarmup().getSpeed())
542
                                                .setIncline(workout.getWarmup().getIncline())
543
                                                .setTime_in_min(
544
                                                        workout.getWarmup().getTimeInMin())))
545
                .setParseWorkoutItems(
546
                        workout.getWorkoutItems().stream()
547
                                .map(
548
                                        workoutItem ->
549
                                                new ParseWorkoutItem()
550
                                                        .setColumn_index(
551
                                                                workoutItem.getColumnIndex())
552
                                                        .setRow_index(workoutItem.getRowIndex())
553
                                                        .setName(
554
                                                                workoutItem
555
                                                                        .getInput()
556
                                                                        .getExercise())
557
                                                        .setExercise_id(workoutItem.getExerciseId())
558
                                                        .setParseWorkoutItemSets(
559
                                                                workoutItem.getInput().getSets()
560
                                                                        .stream()
561
                                                                        .map(
562
                                                                                set ->
563
                                                                                        new ParseWorkoutItemSet()
564
                                                                                                .setRepetitions(
565
                                                                                                        set
566
                                                                                                                .getRepetitions())
567
                                                                                                .setRepetitions_to_failure(
568
                                                                                                        BooleanUtils
569
                                                                                                                .isTrue(
570
                                                                                                                        set
571
                                                                                                                                .getRepetitionsToFailure()))
572
                                                                                                .setWeight(
573
                                                                                                        set
574
                                                                                                                .getWeight())
575
                                                                                                .setBodyweight(
576
                                                                                                        BooleanUtils
577
                                                                                                                .isTrue(
578
                                                                                                                        set
579
                                                                                                                                .getBodyweight()))
580
                                                                                                .setTime_in_min(
581
                                                                                                        set
582
                                                                                                                .getTimeInMin())
583
                                                                                                .setSpeed(
584
                                                                                                        set
585
                                                                                                                .getSpeed())
586
                                                                                                .setIncline(
587
                                                                                                        set
588
                                                                                                                .getIncline())
589
                                                                                                .setResistance(
590
                                                                                                        set
591
                                                                                                                .getResistance()))
592
                                                                        .collect(
593
                                                                                Collectors
594
                                                                                        .toList())))
595
                                .collect(Collectors.toList()));
596
    }
597
598
    ByteArrayInputStream dataUrlToInputStream(String dataUrl) {
599
        final String encodedString =
600
                dataUrl.substring(dataUrl.indexOf(BASE64_PREFIX) + BASE64_PREFIX_LENGTH);
601
        return new ByteArrayInputStream(Base64.getDecoder().decode(encodedString));
602
    }
603
604
    void dataUrlToOutputStream(String dataUrl, OutputStream outputStream) {
605
        final String encodedString =
606
                dataUrl.substring(dataUrl.indexOf(BASE64_PREFIX) + BASE64_PREFIX_LENGTH);
607
        try {
608
            outputStream.write(Base64.getDecoder().decode(encodedString));
609
        } catch (IOException | IllegalArgumentException ex) {
0 ignored issues
show
Bug introduced by
Consider removing the empty block or filling it with code. You can also add a comment to explain the empty block.
Loading history...
610
        }
611
    }
612
613
    ProgramResponseDTO delete(Long id) {
614
        final ParseProgram program = programRepository.findById(id).orElse(null);
615
        if (program == null) {
616
            throw new ResourceNotFoundException("Program with id " + id + " not found");
617
        }
618
        final ProgramResponseDTO responseDTO = programToDto(program);
619
        programRepository.delete(program);
620
        return responseDTO;
621
    }
622
}
623