1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 package it.tidalwave.accounting.ui.jobeventexplorer.impl;
27
28 import javax.annotation.Nonnull;
29 import java.util.Collection;
30 import it.tidalwave.accounting.model.spi.JobEventSpi;
31 import it.tidalwave.role.ui.Displayable;
32 import it.tidalwave.role.ui.Presentable;
33 import it.tidalwave.role.ui.PresentationModel;
34 import it.tidalwave.role.ui.PresentationModelAggregate;
35 import it.tidalwave.role.ui.Styleable;
36 import lombok.RequiredArgsConstructor;
37 import static it.tidalwave.accounting.commons.Styleables.RIGHT_ALIGNED;
38 import static it.tidalwave.accounting.model.spi.util.Formatters.MONEY_FORMATTER;
39 import static it.tidalwave.util.Parameters.r;
40
41
42
43
44
45
46 @RequiredArgsConstructor
47 public abstract class JobEventPresentable<TYPE extends JobEventSpi> implements Presentable
48 {
49 protected static final String JOB_EVENT = "Job Event";
50 protected static final String NOTES = "Notes";
51 protected static final String AMOUNT = "Amount";
52 protected static final String HOURLY_RATE = "HourlyRate";
53 protected static final String TIME = "Time";
54 protected static final String DATE = "Date";
55
56 @Nonnull
57 protected final TYPE jobEvent;
58
59 @Override @Nonnull
60 public PresentationModel createPresentationModel (@Nonnull final Collection<Object> instanceRoles)
61 {
62 return PresentationModel.of(jobEvent, r(presentationModelAggregate(), Styleable.of(getStyles()), instanceRoles));
63 }
64
65 @Nonnull
66 protected PresentationModelAggregate presentationModelAggregate()
67 {
68
69 return PresentationModelAggregate.newInstance()
70 .withPmOf(JOB_EVENT, r(Displayable.of(jobEvent.getName())))
71 .withPmOf(NOTES, r(Displayable.of(jobEvent.getDescription())))
72
73 .withPmOf(AMOUNT, r(Displayable.of(MONEY_FORMATTER::format, jobEvent.getEarnings()),
74 RIGHT_ALIGNED));
75 }
76
77 @Nonnull
78 protected abstract Collection<String> getStyles();
79 }