1 package fr.ifremer.dali.ui.swing.content.observation.photo;
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 import fr.ifremer.dali.dto.data.photo.PhotoDTO;
27 import fr.ifremer.dali.ui.swing.content.observation.ObservationUIModel;
28 import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableUIModel;
29 import org.nuiton.jaxx.application.swing.tab.TabContentModel;
30
31 import static org.nuiton.i18n.I18n.n;
32
33
34
35
36 public class PhotosTabUIModel extends AbstractDaliTableUIModel<PhotoDTO, PhotosTableRowModel, PhotosTabUIModel> implements TabContentModel {
37
38
39
40
41 public static final String PROPERTY_OBSERVATION_MODEL = "observationModel";
42
43
44
45 public static final String PROPERTY_PHOTO_INDEX = "selectedPhoto";
46 private ObservationUIModel observationModel;
47
48
49
50 private Integer photoIndex = null;
51 private boolean modelAdjusting;
52
53
54
55
56
57
58 public ObservationUIModel getObservationModel() {
59 return observationModel;
60 }
61
62
63
64
65
66
67 public void setObservationModel(ObservationUIModel observationModel) {
68 this.observationModel = observationModel;
69 firePropertyChange(PROPERTY_OBSERVATION_MODEL, null, observationModel);
70 }
71
72
73
74
75 @Override
76 public boolean isEmpty() {
77 return false;
78 }
79
80
81
82
83 @Override
84 public String getTitle() {
85 return n("dali.photo.title");
86 }
87
88
89
90
91 @Override
92 public String getIcon() {
93 return null;
94 }
95
96
97
98
99 @Override
100 public boolean isCloseable() {
101 return false;
102 }
103
104 public PhotosTableRowModel getSelectedPhoto() {
105 return getPhotoIndex() != null ? getRows().get(getPhotoIndex()) : null;
106 }
107
108
109
110
111
112
113 public Integer getPhotoIndex() {
114 return photoIndex;
115 }
116
117
118
119
120
121
122 public void setPhotoIndex(Integer photoIndex) {
123 Integer oldValue = getPhotoIndex();
124 this.photoIndex = photoIndex != null
125 ? Math.max(getFirstPhotoIndex(), Math.min(getLastPhotoIndex(), photoIndex))
126 : null;
127 firePropertyChange(PROPERTY_PHOTO_INDEX, oldValue, photoIndex);
128 }
129
130
131
132
133
134
135 public int getFirstPhotoIndex() {
136 return 0;
137 }
138
139
140
141
142
143
144 public int getLastPhotoIndex() {
145 return getRowCount() - 1;
146 }
147
148
149
150
151
152
153 public boolean isModelAdjusting() {
154 return modelAdjusting;
155 }
156
157
158
159
160
161
162 public void setModelAdjusting(boolean modelAdjusting) {
163 this.modelAdjusting = modelAdjusting;
164 }
165
166 public boolean isExportEnabled() {
167 return getSelectedRows().stream().anyMatch(PhotosTableRowModel::isFileExists);
168 }
169
170 public boolean isDownloadEnabled() {
171 return getSelectedRows().stream().anyMatch(PhotosTableRowModel::isFileDownloadable);
172 }
173 }