• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

IQSS / dataverse / #23675

06 Nov 2024 04:11PM CUT coverage: 22.4% (+0.5%) from 21.856%
#23675

Pull #10945

github

stevenwinship
Merge branch 'develop' into 10888-add-api-for-comparing-dataset-versions
Pull Request #10945: Add API endpoint for comparing Dataset Versions

106 of 135 new or added lines in 4 files covered. (78.52%)

693 existing lines in 2 files now uncovered.

19361 of 86432 relevant lines covered (22.4%)

0.22 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

43.55
/src/main/java/edu/harvard/iq/dataverse/DatasetVersionDifference.java
1
package edu.harvard.iq.dataverse;
2

3
import edu.harvard.iq.dataverse.datavariable.DataVariable;
4
import edu.harvard.iq.dataverse.datavariable.VarGroup;
5
import edu.harvard.iq.dataverse.datavariable.VariableMetadataUtil;
6
import edu.harvard.iq.dataverse.util.StringUtil;
7

8
import java.text.SimpleDateFormat;
9
import java.util.*;
10
import java.util.logging.Logger;
11

12
import edu.harvard.iq.dataverse.util.json.NullSafeJsonBuilder;
13
import jakarta.json.Json;
14
import jakarta.json.JsonArrayBuilder;
15
import jakarta.json.JsonObjectBuilder;
16
import org.apache.commons.lang3.StringUtils;
17
import edu.harvard.iq.dataverse.util.BundleUtil;
18

19
/**
20
 *
21
 * @author skraffmiller
22
 */
23
public final class DatasetVersionDifference {
24
    private static final Logger logger = Logger.getLogger(DatasetVersionDifference.class.getCanonicalName());
1✔
25

26
    private DatasetVersion newVersion;
27
    private DatasetVersion originalVersion;
28
    private List<List<DatasetField[]>> detailDataByBlock = new ArrayList<>();
1✔
29
    private List<datasetFileDifferenceItem> datasetFilesDiffList;
30
    private List<datasetReplaceFileItem> datasetFilesReplacementList;
31
    private List<FileMetadata> addedFiles = new ArrayList<>();
1✔
32
    private List<FileMetadata> removedFiles = new ArrayList<>();
1✔
33
    private List<FileMetadata> changedFileMetadata = new ArrayList<>();
1✔
34
    private Map<FileMetadata, Map<String,List<String>>> changedFileMetadataDiff = new HashMap<>();
1✔
35
    private List<FileMetadata> changedVariableMetadata = new ArrayList<>();
1✔
36
    private List<FileMetadata[]> replacedFiles = new ArrayList<>();
1✔
37
    private List<String[]> changedTermsAccess = new ArrayList<>();
1✔
38
    private List<Object[]> summaryDataForNote = new ArrayList<>();
1✔
39
    private List<Object[]> blockDataForNote = new ArrayList<>();
1✔
40

41
    private VariableMetadataUtil variableMetadataUtil;
42
    
43
    private List<DifferenceSummaryGroup> differenceSummaryGroups = new ArrayList<>();
1✔
44

45
    public List<DifferenceSummaryGroup> getDifferenceSummaryGroups() {
46
        return differenceSummaryGroups;
×
47
    }
48

49
    public void setDifferenceSummaryGroups(List<DifferenceSummaryGroup> differenceSummaryGroups) {
UNCOV
50
        this.differenceSummaryGroups = differenceSummaryGroups;
×
51
    }
×
52

53
    public DatasetVersionDifference(DatasetVersion newVersion, DatasetVersion originalVersion) {
1✔
54
        setOriginalVersion(originalVersion);
1✔
55
        setNewVersion(newVersion);
1✔
56
        //Compare Data
57
        for (DatasetField dsfo : originalVersion.getDatasetFields()) {
1✔
58
            boolean deleted = true;
×
59
            for (DatasetField dsfn : newVersion.getDatasetFields()) {
×
UNCOV
60
                if (dsfo.getDatasetFieldType().equals(dsfn.getDatasetFieldType())) {
×
61
                    deleted = false;
×
62
                    if (dsfo.getDatasetFieldType().isPrimitive()) {
×
63
                        if (!dsfo.getDatasetFieldType().getFieldType().equals("email")) {
×
UNCOV
64
                            compareValues(dsfo, dsfn, false);
×
65
                        }
66
                    } else {
67
                        compareValues(dsfo, dsfn, true);
×
68
                    }
69
                    break; //if found go to next dataset field
×
70
                }
71
            }
×
72
            if (deleted && !dsfo.isEmpty()) {
×
UNCOV
73
                if (dsfo.getDatasetFieldType().isPrimitive()) {
×
UNCOV
74
                    if (dsfo.getDatasetFieldType().isControlledVocabulary()) {
×
75
                        updateBlockSummary(dsfo, 0, dsfo.getControlledVocabularyValues().size(), 0);
×
76
                    } else {
77
                        updateBlockSummary(dsfo, 0, dsfo.getDatasetFieldValues().size(), 0);
×
78
                    }
79
                } else {
80
                    updateBlockSummary(dsfo, 0, dsfo.getDatasetFieldCompoundValues().size(), 0);
×
81
                }
82
                addToSummary(dsfo, null);
×
83
            }
UNCOV
84
        }
×
85
        for (DatasetField dsfn : newVersion.getDatasetFields()) {
1✔
86
            boolean added = true;
1✔
87
            for (DatasetField dsfo : originalVersion.getDatasetFields()) {
1✔
88
                if (dsfo.getDatasetFieldType().equals(dsfn.getDatasetFieldType())) {
×
UNCOV
89
                    added = false;
×
90
                    break;
×
91
                }
92
            }
×
93

94
            if (added && !dsfn.isEmpty()) {
1✔
95
                if (dsfn.getDatasetFieldType().isPrimitive()){
1✔
96
                   if (dsfn.getDatasetFieldType().isControlledVocabulary()) {
1✔
97
                       updateBlockSummary(dsfn, dsfn.getControlledVocabularyValues().size(), 0, 0);
×
98
                   } else {
99
                       updateBlockSummary(dsfn, dsfn.getDatasetFieldValues().size(), 0, 0);
1✔
100
                   }                  
101
                } else {
102
                   updateBlockSummary(dsfn, dsfn.getDatasetFieldCompoundValues().size(), 0, 0);
×
103
                }
104
                addToSummary(null, dsfn);
1✔
105
            }
106
        }
1✔
107
        
108
        // TODO: ? 
109
        // It looks like we are going through the filemetadatas in both versions, 
110
        // *sequentially* (i.e. at the cost of O(N*M)), to select the lists of 
111
        // changed, deleted and added files between the 2 versions... But why 
112
        // are we doing it, if we are doing virtually the same thing inside 
113
        // the initDatasetFilesDifferenceList(), below - but in a more efficient 
114
        // way (sorting both lists, then goint through them in parallel, at the 
115
        // cost of (N+M) max.? 
116
        // -- 4.6 Nov. 2016
117
        
118
        for (FileMetadata fmdo : originalVersion.getFileMetadatas()) {
1✔
119
            boolean deleted = true;
1✔
120
            for (FileMetadata fmdn : newVersion.getFileMetadatas()) {
1✔
121
                if (fmdo.getDataFile().equals(fmdn.getDataFile())) {
1✔
122
                    deleted = false;
1✔
123
                    Map<String, List<String>> fileMetadataDiff = compareFileMetadatas(fmdo, fmdn);
1✔
124
                    if (!fileMetadataDiff.isEmpty()) {
1✔
125
                        changedFileMetadata.add(fmdo);
1✔
126
                        changedFileMetadata.add(fmdn);
1✔
127
                        // TODO: find a better key for the map. needs to be something that doesn't change
128
                        changedFileMetadataDiff.put(fmdo, fileMetadataDiff);
1✔
129
                    }
130
                    if (!variableMetadataUtil.compareVariableMetadata(fmdo,fmdn) || !compareVarGroup(fmdo, fmdn)) {
1✔
131
                        changedVariableMetadata.add(fmdo);
×
132
                        changedVariableMetadata.add(fmdn);
×
133
                    }
134
                    break;
135
                }
136
            }
1✔
137
            if (deleted) {
1✔
138
                removedFiles.add(fmdo);
1✔
139
            }
140
        }
1✔
141
        for (FileMetadata fmdn : newVersion.getFileMetadatas()) {
1✔
142
            boolean added = true;
1✔
143
            for (FileMetadata fmdo : originalVersion.getFileMetadatas()) {
1✔
144
                if (fmdo.getDataFile().equals(fmdn.getDataFile())) {
1✔
145
                    added = false;
1✔
146
                    break;
1✔
147
                }
148
            }
1✔
149
            if (added) {
1✔
150
                addedFiles.add(fmdn);
1✔
151
            }
152
        }        
1✔
153
        getReplacedFiles();
1✔
154
        initDatasetFilesDifferencesList();
1✔
155

156
        //Sort within blocks by datasetfieldtype display order
157
        for (List<DatasetField[]> blockList : detailDataByBlock) {
1✔
158
            Collections.sort(blockList, (DatasetField[] l1, DatasetField[] l2) -> {
1✔
UNCOV
159
                    DatasetField dsfa = l1[0];  //(DatasetField[]) l1.get(0);
×
160
                    DatasetField dsfb = l2[0];
×
161
                    int a = dsfa.getDatasetFieldType().getDisplayOrder();
×
162
                    int b = dsfb.getDatasetFieldType().getDisplayOrder();
×
UNCOV
163
                return Integer.valueOf(a).compareTo(b);
×
164
            });
165
        }
1✔
166
        //Sort existing compoundValues by datasetfieldtype display order
167
        for (List<DatasetField[]> blockList : detailDataByBlock) {
1✔
168
            for (DatasetField[] dfarr : blockList) {
1✔
169
                for (DatasetField df : dfarr) {
1✔
170
                    for (DatasetFieldCompoundValue dfcv : df.getDatasetFieldCompoundValues()) {
1✔
171
                        Collections.sort(dfcv.getChildDatasetFields(), DatasetField.DisplayOrder);
×
UNCOV
172
                    }
×
173
                }
174
            }
1✔
175
        }
1✔
176
        //Sort via metadatablock order
177
        Collections.sort(detailDataByBlock, (List l1, List l2) -> {
1✔
178
                DatasetField dsfa[] = (DatasetField[]) l1.get(0);
×
179
                DatasetField dsfb[] = (DatasetField[]) l2.get(0);
×
180
                int a = dsfa[0].getDatasetFieldType().getMetadataBlock().getId().intValue();
×
UNCOV
181
                int b = dsfb[0].getDatasetFieldType().getMetadataBlock().getId().intValue();
×
182
            return Integer.valueOf(a).compareTo(b);
×
183
        });
184
        getTermsDifferences();
1✔
185
    }
1✔
186
    
187
    private void getReplacedFiles() {
188
        if (addedFiles.isEmpty() || removedFiles.isEmpty()) {
1✔
189
            return;
×
190
        }
191
        List<FileMetadata> addedToReplaced = new ArrayList<>();
1✔
192
        List<FileMetadata> removedToReplaced = new ArrayList<>();
1✔
193
        for (FileMetadata added : addedFiles) {
1✔
194
            DataFile addedDF = added.getDataFile();
1✔
195
            Long replacedId = addedDF.getPreviousDataFileId();
1✔
196
            if (added.getDataFile().getPreviousDataFileId() != null){
1✔
197
            }
198
            for (FileMetadata removed : removedFiles) {
1✔
199
                DataFile test = removed.getDataFile();
1✔
200
                if (test.getId().equals(replacedId)) {                  
1✔
201
                    addedToReplaced.add(added);
1✔
202
                    removedToReplaced.add(removed);
1✔
203
                    FileMetadata[] replacedArray = new FileMetadata[2];
1✔
204
                    replacedArray[0] = removed;
1✔
205
                    replacedArray[1] = added;
1✔
206
                    replacedFiles.add(replacedArray);
1✔
207
                }
208
            }
1✔
209
        }
1✔
210
        if(addedToReplaced.isEmpty()){
1✔
211
        } else{
212
            addedToReplaced.stream().forEach((delete) -> {
1✔
213
                addedFiles.remove(delete);
1✔
214
            });
1✔
215
            removedToReplaced.stream().forEach((delete) -> {
1✔
216
                removedFiles.remove(delete);
1✔
217
            });
1✔
218
        }
219
    }
1✔
220
       
221
    private void getTermsDifferences() {
222

223
        changedTermsAccess = new ArrayList<>();
1✔
224
        if (newVersion.getTermsOfUseAndAccess() != null && originalVersion.getTermsOfUseAndAccess() != null) {
1✔
225
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getTermsOfUse()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getTermsOfUse()))) {
1✔
UNCOV
226
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.header");
×
227
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getTermsOfUse()), StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getTermsOfUse()));
×
228
            }
229
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getConfidentialityDeclaration()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getConfidentialityDeclaration()))) {
1✔
UNCOV
230
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.declaration");
×
231
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getConfidentialityDeclaration()),
×
232
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getConfidentialityDeclaration()));
×
233
            }
234
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getSpecialPermissions()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getSpecialPermissions()))) {
1✔
235
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.permissions");
×
UNCOV
236
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getSpecialPermissions()),
×
237
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getSpecialPermissions()));
×
238
            }
239
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getRestrictions()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getRestrictions()))) {
1✔
240
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.restrictions");
×
UNCOV
241
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getRestrictions()),
×
242
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getRestrictions()));
×
243

244
            }
245
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getCitationRequirements()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getCitationRequirements()))) {
1✔
UNCOV
246
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.citationRequirements");
×
247
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getCitationRequirements()),
×
248
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getCitationRequirements()));
×
249
            }
250
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDepositorRequirements()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDepositorRequirements()))) {
1✔
UNCOV
251
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.depositorRequirements");
×
UNCOV
252
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDepositorRequirements()),
×
253
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDepositorRequirements()));
×
254
            }
255
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getConditions()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getConditions()))) {
1✔
256
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.conditions");
×
UNCOV
257
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getConditions()),
×
258
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getConditions()));
×
259
            }
260
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDisclaimer()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDisclaimer()))) {
1✔
261
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.disclaimer");
1✔
262
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDisclaimer()), StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDisclaimer()));
1✔
263
            }
264

265
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getTermsOfAccess()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getTermsOfAccess()))) {
1✔
266
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.termsOfsAccess");
×
UNCOV
267
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getTermsOfAccess()),
×
268
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getTermsOfAccess()));
×
269
            }
270
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDataAccessPlace()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDataAccessPlace()))) {
1✔
UNCOV
271
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.dataAccessPlace");
×
UNCOV
272
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDataAccessPlace()),
×
273
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDataAccessPlace()));
×
274
            }
275
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getOriginalArchive()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getOriginalArchive()))) {
1✔
276
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.originalArchive");
×
UNCOV
277
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getOriginalArchive()),
×
278
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getOriginalArchive()));
×
279
            }
280
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getAvailabilityStatus()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getAvailabilityStatus()))) {
1✔
281
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.availabilityStatus");
×
UNCOV
282
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getAvailabilityStatus()),
×
283
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getAvailabilityStatus()));
×
284
            }
285
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getContactForAccess()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getContactForAccess()))) {
1✔
286
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.contactForAccess");
×
UNCOV
287
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getContactForAccess()),
×
288
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getContactForAccess()));
×
289
            }
290
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getSizeOfCollection()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getSizeOfCollection()))) {
1✔
291
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.sizeOfCollection");
×
UNCOV
292
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getSizeOfCollection()),
×
293
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getSizeOfCollection()));
×
294
            }
295
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getStudyCompletion()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getStudyCompletion()))) {
1✔
296
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.studyCompletion");
×
UNCOV
297
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getStudyCompletion()),
×
298
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getStudyCompletion()));
×
299
            }
300
        }
301

302
        if (newVersion.getTermsOfUseAndAccess() != null && originalVersion.getTermsOfUseAndAccess() == null) {
1✔
303
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getTermsOfUse()).isEmpty()) {
×
304
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.header");
×
305
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "", StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getTermsOfUse()));
×
306
            }
UNCOV
307
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getConfidentialityDeclaration()).isEmpty()){
×
UNCOV
308
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.declaration");
×
UNCOV
309
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
×
310
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getConfidentialityDeclaration()));
×
311
            }
312
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getSpecialPermissions()).isEmpty()){
×
313
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.permissions");
×
UNCOV
314
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
×
315
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getSpecialPermissions()));
×
316
            }
317
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getRestrictions()).isEmpty()){
×
318
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.restrictions");
×
UNCOV
319
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
×
320
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getRestrictions()));
×
321
            }
322
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getCitationRequirements()).isEmpty()){
×
323
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.citationRequirements");
×
UNCOV
324
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
×
325
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getCitationRequirements()));
×
326
            }
327
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDepositorRequirements()).isEmpty()){
×
328
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.depositorRequirements");
×
UNCOV
329
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
×
330
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDepositorRequirements()));
×
331
            }
332
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getConditions()).isEmpty()){
×
333
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.conditions");
×
UNCOV
334
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
×
335
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getConditions()));
×
336
            }
337
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDisclaimer()).isEmpty()){
×
338
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.disclaimer");
×
UNCOV
339
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "", StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDisclaimer()));
×
340
            }
341
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getTermsOfAccess()).isEmpty()){
×
342
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.termsOfsAccess");
×
343
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
×
UNCOV
344
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getTermsOfAccess()));
×
345
            }
346
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDataAccessPlace()).isEmpty()){
×
347
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.dataAccessPlace");
×
UNCOV
348
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
×
349
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDataAccessPlace()));
×
350
            }
351
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getOriginalArchive()).isEmpty()){
×
352
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.originalArchive");
×
UNCOV
353
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
×
354
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getOriginalArchive()));
×
355
            }
356
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getAvailabilityStatus()).isEmpty()){
×
357
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.availabilityStatus");
×
UNCOV
358
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
×
359
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getAvailabilityStatus()));
×
360
            }
361
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getContactForAccess()).isEmpty()){
×
362
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.contactForAccess");
×
363
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
×
364
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getContactForAccess()));
×
365
            }
366
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getSizeOfCollection()).isEmpty()){
×
367
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.sizeOfCollection");
×
368
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
×
UNCOV
369
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getSizeOfCollection()));
×
370
            }
371
            if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getStudyCompletion()).isEmpty()){
×
372
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.studyCompletion");
×
373
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
×
374
                        StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getStudyCompletion()));
×
375
            }            
376
        }        
377

378
        if (newVersion.getTermsOfUseAndAccess() == null && originalVersion.getTermsOfUseAndAccess() != null) {
1✔
379
            if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getTermsOfUse()).isEmpty()) {
×
380
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.header");
×
381
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getTermsOfUse()), "");
×
382
            }
383
            if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getConfidentialityDeclaration()).isEmpty()){
×
384
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.declaration");
×
385
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel,
×
386
                        StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getConfidentialityDeclaration()), "");
×
387
            }
388
            if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getSpecialPermissions()).isEmpty()){
×
389
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.permissions");
×
390
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel,
×
391
                        StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getSpecialPermissions()), "");
×
392
            }
UNCOV
393
            if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getRestrictions()).isEmpty()){
×
UNCOV
394
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.restrictions");
×
395
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, 
×
396
                        StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getRestrictions()), "");
×
397
            }
398
            if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getCitationRequirements()).isEmpty()){
×
UNCOV
399
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.citationRequirements");
×
400
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, 
×
401
                        StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getCitationRequirements()), "");
×
402
            }
403
            if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDepositorRequirements()).isEmpty()){
×
UNCOV
404
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.depositorRequirements");
×
405
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, 
×
406
                        StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDepositorRequirements()), "");
×
407
            }
408
            if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getConditions()).isEmpty()){
×
UNCOV
409
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.conditions");
×
410
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, 
×
411
                        StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getConditions()), "");
×
412
            }
413
            if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDisclaimer()).isEmpty()){
×
UNCOV
414
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfUse.addInfo.disclaimer");
×
415
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel,  StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDisclaimer()), "");
×
416
            }
417
            if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getTermsOfAccess()).isEmpty()){
×
418
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.termsOfsAccess");
×
UNCOV
419
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, 
×
420
                        StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getTermsOfAccess()), "");
×
421
            }
422
            if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDataAccessPlace()).isEmpty()){
×
423
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.dataAccessPlace");
×
UNCOV
424
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, 
×
425
                        StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDataAccessPlace()), "");
×
426
            }
427
            if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getOriginalArchive()).isEmpty()){
×
428
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.originalArchive");
×
UNCOV
429
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, 
×
430
                        StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getOriginalArchive()), "");
×
431
            }
432
            if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getAvailabilityStatus()).isEmpty()){
×
UNCOV
433
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.availabilityStatus");
×
434
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, 
×
435
                        StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getAvailabilityStatus()), "");
×
436
            }
437
            if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getContactForAccess()).isEmpty()){
×
UNCOV
438
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.contactForAccess");
×
439
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, 
×
440
                        StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getContactForAccess()), "");
×
441
            }
442
            if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getSizeOfCollection()).isEmpty()){
×
UNCOV
443
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.sizeOfCollection");
×
444
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, 
×
445
                        StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getSizeOfCollection()), "");
×
446
            }
447
            if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getStudyCompletion()).isEmpty()){
×
UNCOV
448
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.terms.list.termsOfAccess.addInfo.studyCompletion");
×
449
                changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, 
×
450
                        StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getStudyCompletion()), "");
×
451
            }            
452
        }               
453
    }
1✔
454
    
455
    private DifferenceSummaryItem createSummaryItem(){
456
        return null;
×
457
    }
458
    
459
    private List addToSummaryGroup(String displayName, DifferenceSummaryItem differenceSummaryItem){
460
        
461
        return null;
×
462
    }
463

464
    private List<String[]> addToTermsChangedList(List<String[]> listIn, String label, String origVal, String newVal) {
465
        String[] diffArray;
466
        diffArray = new String[3];
1✔
467
        diffArray[0] = label;
1✔
468
        diffArray[1] = origVal;
1✔
469
        diffArray[2] = newVal;
1✔
470
        listIn.add(diffArray);
1✔
471
        return listIn;
1✔
472
    }
473

474

475
    private void addToList(List<DatasetField[]> listIn, DatasetField dsfo, DatasetField dsfn) {
476
        DatasetField[] dsfArray;
477
        dsfArray = new DatasetField[2];
1✔
478
        dsfArray[0] = dsfo;
1✔
479
        dsfArray[1] = dsfn;
1✔
480
        listIn.add(dsfArray);
1✔
481
    }
1✔
482

483
    private void addToSummary(DatasetField dsfo, DatasetField dsfn) {
484
        if (dsfo == null) {
1✔
485
            dsfo = new DatasetField();
1✔
486
            dsfo.setDatasetFieldType(dsfn.getDatasetFieldType());
1✔
487
        }
488
        if (dsfn == null) {
1✔
UNCOV
489
            dsfn = new DatasetField();
×
UNCOV
490
            dsfn.setDatasetFieldType(dsfo.getDatasetFieldType());
×
491
        }
492
        boolean addedToAll = false;
1✔
493
        for (List<DatasetField[]> blockList : detailDataByBlock) {
1✔
494
            DatasetField dsft[] = blockList.get(0);
×
495
            if (dsft[0].getDatasetFieldType().getMetadataBlock().equals(dsfo.getDatasetFieldType().getMetadataBlock())) {
×
496
                addToList(blockList, dsfo, dsfn);
×
497
                addedToAll = true;
×
498
            }
UNCOV
499
        }
×
500
        if (!addedToAll) {
1✔
501
            List<DatasetField[]> newList = new ArrayList<>();
1✔
502
            addToList(newList, dsfo, dsfn);
1✔
503
            detailDataByBlock.add(newList);
1✔
504
        }
505
    }
1✔
506

507
    private void updateBlockSummary(DatasetField dsf, int added, int deleted, int changed) {
508
        boolean addedToAll = false;
1✔
509
        for (Object[] blockList : blockDataForNote) {
1✔
510
            DatasetField dsft = (DatasetField) blockList[0];
×
511
            if (dsft.getDatasetFieldType().getMetadataBlock().equals(dsf.getDatasetFieldType().getMetadataBlock())) {
×
512
                blockList[1] = (Integer) blockList[1] + added;
×
513
                blockList[2] = (Integer) blockList[2] + deleted;
×
514
                blockList[3] = (Integer) blockList[3] + changed;
×
UNCOV
515
                addedToAll = true;
×
516
            }
517
        }
×
518
        if (!addedToAll) {
1✔
519
            Object[] newArray = new Object[4];
1✔
520
            newArray[0] = dsf;
1✔
521
            newArray[1] = added;
1✔
522
            newArray[2] = deleted;
1✔
523
            newArray[3] = changed;
1✔
524
            blockDataForNote.add(newArray);
1✔
525
        }
526
    }
1✔
527

528
    private void addToNoteSummary(DatasetField dsfo, int added, int deleted, int changed) {
529
        Object[] noteArray = new Object[4];
×
530
        noteArray[0] = dsfo;
×
531
        noteArray[1] = added;
×
532
        noteArray[2] = deleted;
×
UNCOV
533
        noteArray[3] = changed;
×
534
        summaryDataForNote.add(noteArray);
×
535
    }
×
536

537
    private boolean compareVarGroup(FileMetadata fmdo, FileMetadata fmdn) {
538
        List<VarGroup> vglo = fmdo.getVarGroups();
1✔
539
        List<VarGroup> vgln = fmdn.getVarGroups();
1✔
540

541
        if (vglo.size() != vgln.size()) {
1✔
UNCOV
542
            return false;
×
543
        }
544
        int count = 0;
1✔
545
        for (VarGroup vgo : vglo) {
1✔
546
            for (VarGroup vgn : vgln) {
×
547
                if (!variableMetadataUtil.checkDiff(vgo.getLabel(), vgn.getLabel())) {
×
548
                    Set<DataVariable> dvo = vgo.getVarsInGroup();
×
549
                    Set<DataVariable> dvn = vgn.getVarsInGroup();
×
550
                    if (dvo.equals(dvn)) {
×
551
                        count++;
×
552
                    } else {
UNCOV
553
                        return false;
×
554
                    }
555
                }
556
            }
×
UNCOV
557
        }
×
558
        if (count == vglo.size()) {
1✔
559
            return true;
1✔
560
        } else {
561
            return false;
×
562
        }
563
    }
564

565
    public static Map<String,List<String>> compareFileMetadatas(FileMetadata fmdo, FileMetadata fmdn) {
566
        Map<String,List<String>> fileMetadataChanged = new HashMap<>();
1✔
567
        boolean equals = true;
1✔
568
        if (!StringUtils.equals(StringUtil.nullToEmpty(fmdo.getDescription()), StringUtil.nullToEmpty(fmdn.getDescription()))) {
1✔
NEW
UNCOV
569
            equals = false;
×
NEW
570
            fileMetadataChanged.put("Description",
×
NEW
UNCOV
571
                    List.of(StringUtil.nullToEmpty(fmdo.getDescription()), StringUtil.nullToEmpty(fmdn.getDescription())));
×
572
        }
573

574
        if (!StringUtils.equals(fmdo.getCategoriesByName().toString(), fmdn.getCategoriesByName().toString())) {
1✔
NEW
575
            equals = false;
×
NEW
576
            fileMetadataChanged.put("Categories",
×
NEW
UNCOV
577
                    List.of(fmdo.getCategoriesByName().toString(), fmdn.getCategoriesByName().toString()));
×
578
        }
579
        
580
        if (!StringUtils.equals(fmdo.getLabel(), fmdn.getLabel())) {
1✔
NEW
UNCOV
581
            equals = false;
×
NEW
UNCOV
582
            fileMetadataChanged.put("Label",
×
NEW
UNCOV
583
                    List.of(fmdo.getLabel(), fmdn.getLabel()));
×
584
        }
585
        
586
        if (!StringUtils.equals(fmdo.getProvFreeForm(), fmdn.getProvFreeForm())) {
1✔
NEW
UNCOV
587
            equals = false;
×
NEW
588
            fileMetadataChanged.put("ProvFreeForm",
×
NEW
589
                    List.of(fmdo.getProvFreeForm(), fmdn.getProvFreeForm()));
×
590
        }
591

592
        if (fmdo.isRestricted() != fmdn.isRestricted()) {
1✔
593
            equals = false;
1✔
594
            fileMetadataChanged.put("isRestricted",
1✔
595
                    List.of(String.valueOf(fmdo.isRestricted()), String.valueOf(fmdn.isRestricted())));
1✔
596
        }
597

598
        return fileMetadataChanged;
1✔
599
    }
600
    
601
    private void compareValues(DatasetField originalField, DatasetField newField, boolean compound) {
UNCOV
602
        String originalValue = "";
×
UNCOV
603
        String newValue = "";
×
604
        int countOriginal = 0;
×
605
        int countNew = 0;
×
606
        int totalAdded = 0;
×
607
        int totalDeleted = 0;
×
608
        int totalChanged = 0;
×
609
        int loopIndex = 0;
×
610

611
        if (compound) {
×
UNCOV
612
            for (DatasetFieldCompoundValue datasetFieldCompoundValueOriginal : originalField.getDatasetFieldCompoundValues()) {
×
613
                if (newField.getDatasetFieldCompoundValues().size() >= loopIndex + 1) {
×
614
                    for (DatasetField dsfo : datasetFieldCompoundValueOriginal.getChildDatasetFields()) {
×
615
                        if (!dsfo.getDisplayValue().isEmpty()) {
×
616
                            originalValue += dsfo.getDisplayValue() + ", ";
×
617
                        }
618
                    }
×
UNCOV
619
                    for (DatasetField dsfn : newField.getDatasetFieldCompoundValues().get(loopIndex).getChildDatasetFields()) {
×
620
                        if (!dsfn.getDisplayValue().isEmpty()) {
×
621
                            newValue += dsfn.getDisplayValue() + ", ";
×
622
                        }
623
                    }
×
UNCOV
624
                    if (originalValue.isEmpty() && !newValue.isEmpty()) {
×
625
                        totalAdded++;
×
626
                    } else if (!newValue.isEmpty() && !originalValue.trim().equals(newValue.trim())) {
×
627
                        totalChanged++;
×
628
                    }
629
                }
UNCOV
630
                loopIndex++;
×
UNCOV
631
            }
×
632
            countNew = newField.getDatasetFieldCompoundValues().size();
×
633
            countOriginal = originalField.getDatasetFieldCompoundValues().size();
×
634
        } else {
635
            int index = 0;
×
UNCOV
636
            for (String valString : originalField.getValues()) {
×
637
                if (valString != null && !valString.isEmpty()) {
×
638
                    countOriginal++;
×
639
                }
640
            }
×
UNCOV
641
            for (String valString : newField.getValues()) {
×
642
                if (valString != null && !valString.isEmpty()) {
×
643
                    countNew++;
×
644
                }
645
            }
×
UNCOV
646
            String nString = "";
×
647
            originalValue = originalField.getDisplayValue();
×
648
            newValue = newField.getDisplayValue();
×
649
            for (String oString : originalField.getValues()) {
×
650
                if (newField.getValues().size() >= (index + 1)) {
×
651
                    nString = newField.getValues().get(index);
×
652
                }
653
                if (nString != null && oString != null && !oString.trim().equals(nString.trim())) {
×
UNCOV
654
                    totalChanged++;
×
655
                }
656
            }
×
UNCOV
657
            if (originalValue.equalsIgnoreCase(newValue)) {
×
658
                totalChanged = 0;
×
659
            }
660
        }
661
        
UNCOV
662
        if (countNew > countOriginal) {
×
UNCOV
663
            totalAdded = countNew - countOriginal;
×
664
        }
665

UNCOV
666
        if (countOriginal > countNew) {
×
UNCOV
667
            totalDeleted = countOriginal - countNew;
×
668
        }
669
        if ((totalAdded + totalDeleted + totalChanged) > 0) {
×
UNCOV
670
            if (originalField.getDatasetFieldType().isDisplayOnCreate()) {
×
671
                addToNoteSummary(originalField, totalAdded, totalDeleted, totalChanged);
×
672
                addToSummary(originalField, newField);
×
673
            } else {
674
                updateBlockSummary(originalField, totalAdded, totalDeleted, totalChanged);
×
UNCOV
675
                addToSummary(originalField, newField);
×
676
            }
677
        }
UNCOV
678
    }
×
679

680
    public String getFileNote() {
UNCOV
681
        String retString = "";
×
682

683
        if (addedFiles.size() > 0) {
×
UNCOV
684
            retString = BundleUtil.getStringFromBundle("dataset.version.file.added", Arrays.asList(addedFiles.size()+""));
×
685
        }
686

UNCOV
687
        if (removedFiles.size() > 0) {
×
UNCOV
688
            if (retString.isEmpty()) {
×
689
                retString = BundleUtil.getStringFromBundle("dataset.version.file.removed", Arrays.asList(removedFiles.size()+""));
×
690
            } else {
691
                retString += BundleUtil.getStringFromBundle("dataset.version.file.removed2", Arrays.asList(removedFiles.size()+""));
×
692
            }
693
        }
694
        
UNCOV
695
        if (replacedFiles.size() > 0) {
×
UNCOV
696
            if (retString.isEmpty()) {
×
697
                retString = BundleUtil.getStringFromBundle("dataset.version.file.replaced", Arrays.asList(replacedFiles.size()+""));
×
698
            } else {
699
                retString += BundleUtil.getStringFromBundle("dataset.version.file.replaced2", Arrays.asList(replacedFiles.size()+""));
×
700
            }
701
        }
702
        
703

UNCOV
704
        if (changedFileMetadata.size() > 0) {
×
UNCOV
705
            if (retString.isEmpty()) {
×
706
                retString = BundleUtil.getStringFromBundle("dataset.version.file.changed", Arrays.asList(changedFileMetadata.size() / 2+""));
×
707
            } else {
708
                retString += BundleUtil.getStringFromBundle("dataset.version.file.changed2", Arrays.asList(changedFileMetadata.size() / 2+""));
×
709
            }
710
        }
711

UNCOV
712
        if (changedVariableMetadata.size()  > 0) {
×
UNCOV
713
            if (retString.isEmpty()) {
×
714
                retString = BundleUtil.getStringFromBundle("dataset.version.variablemetadata.changed", Arrays.asList(changedVariableMetadata.size() / 2+""));
×
715
            } else {
716
                retString += BundleUtil.getStringFromBundle("dataset.version.variablemetadata.changed2", Arrays.asList(changedVariableMetadata.size() / 2+""));
×
717
            }
718
        }
719

UNCOV
720
        if (!retString.isEmpty()) {
×
UNCOV
721
            retString += ")";
×
722
        }
723

UNCOV
724
        return retString;
×
725
    }
726
    
727
    public List<datasetReplaceFileItem> getDatasetFilesReplacementList() {
UNCOV
728
        return datasetFilesReplacementList;
×
729
    }
730

731
    public void setDatasetFilesReplacementList(List<datasetReplaceFileItem> datasetFilesReplacementList) {
UNCOV
732
        this.datasetFilesReplacementList = datasetFilesReplacementList;
×
UNCOV
733
    }
×
734

735
    public List<List<DatasetField[]>> getDetailDataByBlock() {
UNCOV
736
        return detailDataByBlock;
×
737
    }
738

739
    public void setDetailDataByBlock(List<List<DatasetField[]>> detailDataByBlock) {
UNCOV
740
        this.detailDataByBlock = detailDataByBlock;
×
UNCOV
741
    }
×
742

743
    public List<FileMetadata> getAddedFiles() {
UNCOV
744
        return addedFiles;
×
745
    }
746

747
    public void setAddedFiles(List<FileMetadata> addedFiles) {
UNCOV
748
        this.addedFiles = addedFiles;
×
UNCOV
749
    }
×
750

751
    public List<FileMetadata> getRemovedFiles() {
UNCOV
752
        return removedFiles;
×
753
    }
754

755
    public void setRemovedFiles(List<FileMetadata> removedFiles) {
UNCOV
756
        this.removedFiles = removedFiles;
×
UNCOV
757
    }
×
758

759
    public DatasetVersion getNewVersion() {
UNCOV
760
        return newVersion;
×
761
    }
762

763
    public void setNewVersion(DatasetVersion newVersion) {
764
        this.newVersion = newVersion;
1✔
765
    }
1✔
766

767
    public DatasetVersion getOriginalVersion() {
UNCOV
768
        return originalVersion;
×
769
    }
770

771
    public void setOriginalVersion(DatasetVersion originalVersion) {
772
        this.originalVersion = originalVersion;
1✔
773
    }
1✔
774

775
    public List<FileMetadata> getChangedFileMetadata() {
UNCOV
776
        return changedFileMetadata;
×
777
    }
778

779
    public void setChangedFileMetadata(List<FileMetadata> changedFileMetadata) {
UNCOV
780
        this.changedFileMetadata = changedFileMetadata;
×
UNCOV
781
    }
×
782

783
    public List<Object[]> getSummaryDataForNote() {
UNCOV
784
        return summaryDataForNote;
×
785
    }
786

787
    public List<Object[]> getBlockDataForNote() {
UNCOV
788
        return blockDataForNote;
×
789
    }
790

791
    public void setSummaryDataForNote(List<Object[]> summaryDataForNote) {
UNCOV
792
        this.summaryDataForNote = summaryDataForNote;
×
UNCOV
793
    }
×
794

795
    public void setBlockDataForNote(List<Object[]> blockDataForNote) {
UNCOV
796
        this.blockDataForNote = blockDataForNote;
×
UNCOV
797
    }
×
798
    
799
    
800
    public List<String[]> getChangedTermsAccess() {
UNCOV
801
        return changedTermsAccess;
×
802
    }
803

804
    public void setChangedTermsAccess(List<String[]> changedTermsAccess) {
UNCOV
805
        this.changedTermsAccess = changedTermsAccess;
×
UNCOV
806
    }
×
807

808
    private void initDatasetFilesDifferencesList() {
809
        datasetFilesDiffList = new ArrayList<>();
1✔
810
        datasetFilesReplacementList = new ArrayList <>();
1✔
811
        
812
        // Study Files themselves are version-less;
813
        // In other words, 2 different versions can have different sets of
814
        // study files, but the files themselves don't have versions.
815
        // So in order to find the differences between the 2 sets of study
816
        // files in 2 versions we can just go through the lists of the
817
        // files and compare the ids. If both versions have the file with
818
        // the same file id, it is the same file.
819
        // UPDATE: in addition to the above, even when the 2 versions share the
820
        // same study file, the file metadatas ARE version-specific, so some of
821
        // the fields there (filename, etc.) may be different. If this is the
822
        // case, we want to display these differences as well.
823

824
        int i = 0;
1✔
825
        int j = 0;
1✔
826

827
        FileMetadata fm1;
828
        FileMetadata fm2;
829
        
830
        // We also have to be careful sorting this FileMetadatas. If we sort the 
831
        // lists as they are still attached to their respective versions, we may end
832
        // up messing up the page, which was rendered based on the specific order 
833
        // of these in the working version! 
834
        // So the right way of doing this is to create defensive copies of the
835
        // lists; extra memory, but safer. 
836
        // -- L.A. Nov. 2016
837
        
838
        List<FileMetadata> fileMetadatasNew = new ArrayList<>(newVersion.getFileMetadatas());
1✔
839
        List<FileMetadata> fileMetadatasOriginal = new ArrayList<>(originalVersion.getFileMetadatas());
1✔
840
        
841
        if (!replacedFiles.isEmpty()) {
1✔
842
            
843
            replacedFiles.stream().map((replacedPair) -> {
1✔
844
                FileMetadata replacedFile = replacedPair[0];
1✔
845
                FileMetadata newFile = replacedPair[1];
1✔
846
                fileMetadatasNew.remove(newFile);
1✔
847
                fileMetadatasOriginal.remove(replacedFile);
1✔
848
                datasetFileDifferenceItem fdi = selectFileMetadataDiffs(replacedFile, newFile);
1✔
849
                datasetReplaceFileItem fdr = new datasetReplaceFileItem();
1✔
850
                String diffLabel = BundleUtil.getStringFromBundle("file.dataFilesTab.versions.replaced");
1✔
851
                fdr.setLeftColumn(diffLabel);
1✔
852
                fdr.setFdi(fdi);
1✔
853
                fdr.setFile1Id(replacedFile.getDataFile().getId().toString());
1✔
854
                if (newFile.getDataFile().getId() != null) {
1✔
855
                    fdr.setFile2Id(newFile.getDataFile().getId().toString());
1✔
856
                }
857
                fdr.setFile1ChecksumType(replacedFile.getDataFile().getChecksumType());
1✔
858
                fdr.setFile2ChecksumType(newFile.getDataFile().getChecksumType());
1✔
859
                fdr.setFile1ChecksumValue(replacedFile.getDataFile().getChecksumValue());
1✔
860
                fdr.setFile2ChecksumValue(newFile.getDataFile().getChecksumValue());
1✔
861
                return fdr;
1✔
862
            }).forEach((fdr) -> {
1✔
863
                datasetFilesReplacementList.add(fdr);
1✔
864
            });
1✔
865

866
        }
867

868
        Collections.sort(fileMetadatasOriginal, (FileMetadata l1, FileMetadata l2) -> {
1✔
869
            FileMetadata fm3 = l1; //(DatasetField[]) l1.get(0);
1✔
870
            FileMetadata fm4 = l2;
1✔
871
            int a = fm3.getDataFile().getId().intValue();
1✔
872
            int b = fm4.getDataFile().getId().intValue();
1✔
873
            return Integer.valueOf(a).compareTo(b);
1✔
874
        });
875

876
        // Here's a potential problem: this new version may have been created
877
        // specifically because new files are being added to the dataset. 
878
        // In which case there may be files associated with this new version 
879
        // with no database ids - since they haven't been saved yet. 
880
        // So if we try to sort the files in the version the way we did above, 
881
        // by ID, it may fail with a null pointer. 
882
        // To solve this, we should simply check if the file has the id; and if not, 
883
        // sort it higher than any file with an id - because it is a most recently
884
        // added file. Since we are only doing this for the purposes of generating
885
        // version differences, this should be OK. 
886
        //   -- L.A. Aug. 2014
887

888
        Collections.sort(fileMetadatasNew, (FileMetadata l1, FileMetadata l2) -> {
1✔
889
            FileMetadata fm3 = l1; //(DatasetField[]) l1.get(0);
1✔
890
            FileMetadata fm4 = l2;
1✔
891
            Long a = fm3.getDataFile().getId();
1✔
892
            Long b = fm4.getDataFile().getId();
1✔
893
                if (a == null && b == null) {
1✔
894
                    return 0;
×
895
                } else if (a == null) {
1✔
896
                    return 1;
×
897
                } else if (b == null) {
1✔
898
                    return -1;
×
899
                }
900
                return a.compareTo(b);
1✔
901
        });
902

903
        while (i < fileMetadatasOriginal.size()
1✔
904
                && j < fileMetadatasNew.size()) {
1✔
905
            fm1 = fileMetadatasOriginal.get(i);
1✔
906
            fm2 = fileMetadatasNew.get(j);
1✔
907

908
            if (fm2.getDataFile().getId() != null && fm1.getDataFile().getId().compareTo(fm2.getDataFile().getId()) == 0) {
1✔
909
                // The 2 versions share the same study file;
910
                // Check if the metadata information is identical in the 2 versions
911
                // of the metadata:
912
                if (fileMetadataIsDifferent(fm1, fm2)) {
1✔
913
                    datasetFileDifferenceItem fdi = selectFileMetadataDiffs(fm1, fm2);
1✔
914
                    fdi.setFileId(fm1.getDataFile().getId().toString());
1✔
915
                    fdi.setFileChecksumType(fm1.getDataFile().getChecksumType());
1✔
916
                    fdi.setFileChecksumValue(fm1.getDataFile().getChecksumValue());
1✔
917
                    datasetFilesDiffList.add(fdi);
1✔
918
                }
919
                i++;
1✔
920
                j++;
1✔
921
            } else if (fm2.getDataFile().getId() != null && fm1.getDataFile().getId().compareTo(fm2.getDataFile().getId()) > 0) {
1✔
922
                datasetFileDifferenceItem fdi = selectFileMetadataDiffs(null, fm2);
×
923
                fdi.setFileId(fm2.getDataFile().getId().toString());
×
924
                fdi.setFileChecksumType(fm2.getDataFile().getChecksumType());
×
925
                fdi.setFileChecksumValue(fm2.getDataFile().getChecksumValue());
×
926
                datasetFilesDiffList.add(fdi);
×
927

928
                j++;
×
929
            } else if (fm2.getDataFile().getId() == null || fm1.getDataFile().getId().compareTo(fm2.getDataFile().getId()) < 0) {
1✔
930
                datasetFileDifferenceItem fdi = selectFileMetadataDiffs(fm1, null);
1✔
931
                fdi.setFileId(fm1.getDataFile().getId().toString());
1✔
932
                fdi.setFileChecksumType(fm1.getDataFile().getChecksumType());
1✔
933
                fdi.setFileChecksumValue(fm1.getDataFile().getChecksumValue());
1✔
934
                datasetFilesDiffList.add(fdi);
1✔
935

936
                i++;
1✔
937
            }
1✔
938
        }
939

940
        // We've reached the end of at least one file list.
941
        // Whatever files are left on either of the 2 lists are automatically "different"
942
        // between the 2 versions.
943
        while (i < fileMetadatasOriginal.size()) {
1✔
UNCOV
944
            fm1 = fileMetadatasOriginal.get(i);
×
945
            datasetFileDifferenceItem fdi = selectFileMetadataDiffs(fm1, null);
×
946
            fdi.setFileId(fm1.getDataFile().getId().toString());
×
947
            fdi.setFileChecksumType(fm1.getDataFile().getChecksumType());
×
948
            fdi.setFileChecksumValue(fm1.getDataFile().getChecksumValue());
×
949
            datasetFilesDiffList.add(fdi);
×
950

951
            i++;
×
UNCOV
952
        }
×
953

954
        while (j < fileMetadatasNew.size()) {
1✔
955
            fm2 = fileMetadatasNew.get(j);
1✔
956
            datasetFileDifferenceItem fdi = selectFileMetadataDiffs(null, fm2);
1✔
957
            if (fm2.getDataFile().getId() != null) {
1✔
958
                fdi.setFileId(fm2.getDataFile().getId().toString());
1✔
959
            } else {
960
                fdi.setFileId("[UNASSIGNED]");
×
961
            }
962
            if (fm2.getDataFile().getChecksumValue() != null) {
1✔
963
                fdi.setFileChecksumType(fm2.getDataFile().getChecksumType());
1✔
964
                fdi.setFileChecksumValue(fm2.getDataFile().getChecksumValue());
1✔
965
            } else {
966
                /**
967
                 * @todo What should we do here? checksumValue is set to
968
                 * "nullable = false" so it should never be non-null. Let's set
969
                 * it to "null" and see if this code path is ever reached. If
970
                 * not, the null check above can probably be safely removed.
971
                 */
UNCOV
972
                fdi.setFileChecksumType(null);
×
UNCOV
973
                fdi.setFileChecksumValue("[UNASSIGNED]");
×
974
            }
975
            datasetFilesDiffList.add(fdi);
1✔
976

977
            j++;
1✔
978
        }
1✔
979
    }
1✔
980

981
    private boolean fileMetadataIsDifferent(FileMetadata fm1, FileMetadata fm2) {
982
        if (fm1 == null){
1✔
UNCOV
983
            return fm2 != null;
×
984
        }
985
        if (fm2 == null) {
1✔
UNCOV
986
            return true;
×
987
        }
988

989
        // Both are non-null metadata objects.
990
        // We simply go through the 5 metadata fields, if any one of them
991
        // is different between the 2 versions, we declare the objects
992
        // different.
993
        String value1;
994
        String value2;
995

996
        // filename:
997
        value1 = fm1.getLabel();
1✔
998
        value2 = fm2.getLabel();
1✔
999

1000
        if (value1 == null || value1.isEmpty() || value1.equals(" ")) {
1✔
UNCOV
1001
            value1 = "";
×
1002
        }
1003
        if (value2 == null || value2.isEmpty() || value2.equals(" ")) {
1✔
UNCOV
1004
            value2 = "";
×
1005
        }
1006

1007
        if (!value1.equals(value2)) {
1✔
UNCOV
1008
            return true;
×
1009
        }
1010

1011
        // file type:
1012
        value1 = fm1.getDataFile().getFriendlyType();
1✔
1013
        value2 = fm2.getDataFile().getFriendlyType();
1✔
1014

1015
        if (value1 == null || value1.isEmpty() || value1.equals(" ")) {
1✔
1016
            value1 = "";
1✔
1017
        }
1018
        if (value2 == null || value2.isEmpty() || value2.equals(" ")) {
1✔
1019
            value2 = "";
1✔
1020
        }
1021

1022
        if (!value1.equals(value2)) {
1✔
UNCOV
1023
            return true;
×
1024
        }
1025

1026
        // file size:
1027
        /*
1028
         value1 = FileUtil.byteCountToDisplaySize(new File(fm1.getStudyFile().getFileSystemLocation()).length());
1029
         value2 = FileUtil.byteCountToDisplaySize(new File(fm2.getStudyFile().getFileSystemLocation()).length());
1030

1031
         if (value1 == null || value1.isEmpty() || value1.equals(" ")) {
1032
         value1 = "";
1033
         }
1034
         if (value2 == null || value2.isEmpty() || value2.equals(" ")) {
1035
         value2 = "";
1036
         }
1037

1038
         if(!value1.equals(value2)) {
1039
         return true;
1040
         }
1041
         */
1042
        // file category:
1043
        value1 = fm1.getCategoriesByName().toString();
1✔
1044
        value2 = fm2.getCategoriesByName().toString();
1✔
1045

1046
        if (value1 == null || value1.isEmpty() || value1.equals(" ")) {
1✔
UNCOV
1047
            value1 = "";
×
1048
        }
1049
        if (value2 == null || value2.isEmpty() || value2.equals(" ")) {
1✔
UNCOV
1050
            value2 = "";
×
1051
        }
1052

1053
        if (!value1.equals(value2)) {
1✔
UNCOV
1054
            return true;
×
1055
        }
1056

1057
        // file description:
1058
        value1 = fm1.getDescription();
1✔
1059
        value2 = fm2.getDescription();
1✔
1060

1061
        if (value1 == null || value1.isEmpty() || value1.equals(" ")) {
1✔
UNCOV
1062
            value1 = "";
×
1063
        }
1064
        if (value2 == null || value2.isEmpty() || value2.equals(" ")) {
1✔
UNCOV
1065
            value2 = "";
×
1066
        }
1067

1068
        if (!value1.equals(value2)) {
1✔
UNCOV
1069
            return true;
×
1070
        }
1071
        
1072
        // Provenance Freeform Text
1073
        value1 = fm1.getProvFreeForm();
1✔
1074
        value2 = fm2.getProvFreeForm();
1✔
1075
        
1076
        if (value1 == null || value1.isEmpty() || value1.equals(" ")) {
1✔
1077
            value1 = "";
1✔
1078
        }
1079
        if (value2 == null || value2.isEmpty() || value2.equals(" ")) {
1✔
1080
            value2 = "";
1✔
1081
        }
1082

1083
        if (!value1.equals(value2)) {
1✔
UNCOV
1084
            return true;
×
1085
        }
1086
        
1087
        // File restrictions
1088
        return fm1.isRestricted() != fm2.isRestricted();
1✔
1089
    }
1090

1091
    private datasetFileDifferenceItem selectFileMetadataDiffs(FileMetadata fm1, FileMetadata fm2) {
1092
        datasetFileDifferenceItem fdi = new datasetFileDifferenceItem();
1✔
1093

1094
        if (fm2 == null) {
1✔
1095
            if (fm1 == null) {
1✔
1096
                // this should never happen; but if it does,
1097
                // we return an empty diff object.
1098

UNCOV
1099
                return fdi;
×
1100
            }
1101
            fdi.setFileName1(fm1.getLabel());
1✔
1102
            fdi.setFileType1(fm1.getDataFile().getFriendlyType());
1✔
1103
            //fdi.setFileSize1(FileUtil. (new File(fm1.getDataFile().getFileSystemLocation()).length()));
1104

1105
            // deprecated: fdi.setFileCat1(fm1.getCategory());
1106
            fdi.setFileDesc1(fm1.getDescription());
1✔
1107
            if(!fm1.getCategoriesByName().isEmpty()){
1✔
1108
                fdi.setFileCat1(fm1.getCategoriesByName().toString());
×
1109
            }
1110

1111
            fdi.setFileProvFree1(fm1.getProvFreeForm());
1✔
1112
            fdi.setFileRest1(BundleUtil.getStringFromBundle(getAccessLabel(fm1)));
1✔
1113
            fdi.setFile2Empty(true);
1✔
1114

1115
        } else if (fm1 == null) {
1✔
1116
            fdi.setFile1Empty(true);
1✔
1117

1118
            fdi.setFileName2(fm2.getLabel());
1✔
1119
            fdi.setFileType2(fm2.getDataFile().getFriendlyType());
1✔
1120
            
1121
            //fdi.setFileSize2(FileUtil.byteCountToDisplaySize(new File(fm2.getStudyFile().getFileSystemLocation()).length()));
1122
            // deprecated: fdi.setFileCat2(fm2.getCategory());
1123
            fdi.setFileDesc2(fm2.getDescription());
1✔
1124
            if(!fm2.getCategoriesByName().isEmpty()){
1✔
1125
                fdi.setFileCat2(fm2.getCategoriesByName().toString());
×
1126
            }
1127
            fdi.setFileProvFree2(fm2.getProvFreeForm());
1✔
1128
            fdi.setFileRest2(BundleUtil.getStringFromBundle(getAccessLabel(fm2)));
1✔
1129
        } else {
1130
            // Both are non-null metadata objects.
1131
            // We simply go through the 5 metadata fields, if any are
1132
            // different between the 2 versions, we add them to the
1133
            // difference object:
1134

1135
            String value1;
1136
            String value2;
1137

1138
            // filename:
1139
            value1 = fm1.getLabel();
1✔
1140
            value2 = fm2.getLabel();
1✔
1141

1142
            if (value1 == null || value1.isEmpty() || value1.equals(" ")) {
1✔
UNCOV
1143
                value1 = "";
×
1144
            }
1145
            if (value2 == null || value2.isEmpty() || value2.equals(" ")) {
1✔
UNCOV
1146
                value2 = "";
×
1147
            }
1148

1149
            if (!value1.equals(value2)) {
1✔
1150

1151
                fdi.setFileName1(value1);
1✔
1152
                fdi.setFileName2(value2);
1✔
1153
            }
1154

1155
            // NOTE:
1156
            // fileType and fileSize will always be the same
1157
            // for the same studyFile! -- so no need to check for differences in
1158
            // these 2 items.
1159
            // file category:
1160
            value1 = fm1.getCategoriesByName().toString();
1✔
1161
            value2 = fm2.getCategoriesByName().toString();
1✔
1162
            if (value1 == null || value1.isEmpty() || value1.equals(" ")) {
1✔
1163
                value1 = "";
×
1164
            }
1165
            if (value2 == null || value2.isEmpty() || value2.equals(" ")) {
1✔
UNCOV
1166
                value2 = "";
×
1167
            }
1168

1169
            if (!value1.equals(value2)) {
1✔
UNCOV
1170
                fdi.setFileCat1(value1);
×
1171
                fdi.setFileCat2(value2);
×
1172
            } 
1173

1174
            // file description:
1175
            value1 = fm1.getDescription();
1✔
1176
            value2 = fm2.getDescription();
1✔
1177

1178
            if (value1 == null || value1.isEmpty() || value1.equals(" ")) {
1✔
UNCOV
1179
                value1 = "";
×
1180
            }
1181
            if (value2 == null || value2.isEmpty() || value2.equals(" ")) {
1✔
UNCOV
1182
                value2 = "";
×
1183
            }
1184

1185
            if (!value1.equals(value2)) {
1✔
1186

1187
                fdi.setFileDesc1(value1);
1✔
1188
                fdi.setFileDesc2(value2);
1✔
1189
            }
1190

1191
            // provenance freeform
1192
            value1 = fm1.getProvFreeForm();
1✔
1193
            value2 = fm2.getProvFreeForm();
1✔
1194

1195
            if (value1 == null || value1.isEmpty() || value1.equals(" ")) {
1✔
1196
                value1 = "";
1✔
1197
            }
1198
            if (value2 == null || value2.isEmpty() || value2.equals(" ")) {
1✔
1199
                value2 = "";
1✔
1200
            }
1201

1202
            if (!value1.equals(value2)) {
1✔
1203

1204
                fdi.setFileProvFree1(value1);
×
UNCOV
1205
                fdi.setFileProvFree2(value2);
×
1206
            }
1207
            
1208
            // file restricted:
1209
            if (fm1.isRestricted() != fm2.isRestricted() || fm1.getDataFile().getEmbargo() != fm2.getDataFile().getEmbargo()) {
1✔
1210
                fdi.setFileRest1(BundleUtil.getStringFromBundle(getAccessLabel(fm1)));
1✔
1211
                fdi.setFileRest2(BundleUtil.getStringFromBundle(getAccessLabel(fm2)));
1✔
1212
            }
1213
        }
1214
        return fdi;
1✔
1215
    }
1216
    
1217
    private String getAccessLabel(FileMetadata fm) {
1218
        boolean embargoed = fm.getDataFile().getEmbargo()!=null;
1✔
1219
        boolean restricted = fm.isRestricted();
1✔
1220
        if (embargoed && restricted) return "embargoedandrestricted";
1✔
1221
        if(embargoed) return "embargoed";
1✔
1222
        if(restricted) return "restricted";
1✔
1223
        return "public";
1✔
1224
    }
1225

1226
    public String getEditSummaryForLog() {
1227
        
UNCOV
1228
        String retVal = "";        
×
1229
        
1230
        retVal = System.lineSeparator() + this.newVersion.getTitle() + " (" + this.originalVersion.getDataset().getIdentifier() + ") was updated " + new Date();
×
1231
        
1232
        String valueString = "";
×
UNCOV
1233
        String groupString = "";
×
1234
        
1235
        //Metadata differences displayed by Metdata block
UNCOV
1236
        if (!this.detailDataByBlock.isEmpty()) {
×
UNCOV
1237
            for (List<DatasetField[]> blocks : detailDataByBlock) {
×
1238
                groupString = System.lineSeparator() + " " + BundleUtil.getStringFromBundle("dataset.versionDifferences.metadataBlock")  ;
×
1239
                String blockDisplay = " " +  blocks.get(0)[0].getDatasetFieldType().getMetadataBlock().getDisplayName() + ": " +  System.lineSeparator();
×
1240
                groupString += blockDisplay;
×
1241
                for (DatasetField[] dsfArray : blocks) {
×
1242
                    valueString = " " + BundleUtil.getStringFromBundle("dataset.versionDifferences.field") + ": ";
×
1243
                    String title = dsfArray[0].getDatasetFieldType().getTitle();
×
1244
                    valueString += title;
×
1245
                    String oldValue = " " + BundleUtil.getStringFromBundle("dataset.versionDifferences.changed") + " " + BundleUtil.getStringFromBundle("dataset.versionDifferences.from") + ": ";
×
1246
                    
1247
                    if (!dsfArray[0].isEmpty()) {
×
UNCOV
1248
                        if (dsfArray[0].getDatasetFieldType().isPrimitive()) {
×
1249
                            oldValue += dsfArray[0].getRawValue();
×
1250
                        } else {
1251
                            oldValue += dsfArray[0].getCompoundRawValue();
×
1252
                        }
1253
                    }
UNCOV
1254
                    valueString += oldValue;
×
1255
                    
1256
                    String newValue = " " + BundleUtil.getStringFromBundle("dataset.versionDifferences.to") + ": ";
×
UNCOV
1257
                    if (!dsfArray[1].isEmpty()) {
×
1258
                        if (dsfArray[1].getDatasetFieldType().isPrimitive()) {
×
1259
                            newValue += dsfArray[1].getRawValue();
×
1260
                        } else {
1261
                            newValue += dsfArray[1].getCompoundRawValue();
×
1262
                        }
1263

1264
                    }
UNCOV
1265
                    valueString += newValue;
×
UNCOV
1266
                    groupString += valueString + System.lineSeparator();
×
1267
                }
×
1268
                retVal += groupString + System.lineSeparator();
×
1269
            }
×
1270
        }
1271
        
1272
        // File Differences
UNCOV
1273
        String fileDiff = System.lineSeparator() + BundleUtil.getStringFromBundle("file.viewDiffDialog.files.header") + ": " + System.lineSeparator();
×
UNCOV
1274
        if(!this.getDatasetFilesDiffList().isEmpty()){
×
1275
           
1276
            String itemDiff;
1277
            
UNCOV
1278
            for (datasetFileDifferenceItem item : this.getDatasetFilesDiffList()) {
×
UNCOV
1279
                itemDiff = BundleUtil.getStringFromBundle("file.viewDiffDialog.fileID") + ": " + item.fileId; 
×
1280
                
1281
                if (item.fileName1 != null || item.fileName2 != null) {
×
UNCOV
1282
                    itemDiff = System.lineSeparator() + " " + BundleUtil.getStringFromBundle("file.viewDiffDialog.fileName") + ": ";
×
1283
                    itemDiff += item.fileName1 != null ? item.fileName1 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable");
×
1284
                    itemDiff += " : ";
×
1285
                    itemDiff += item.fileName2 != null ? item.fileName2 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable") + " ";
×
1286
                }
1287

UNCOV
1288
                if (item.fileType1 != null || item.fileType2 != null) {
×
UNCOV
1289
                    itemDiff += System.lineSeparator() + " " + BundleUtil.getStringFromBundle("file.viewDiffDialog.fileType") + ": ";
×
1290
                    itemDiff += item.fileType1 != null ? item.fileType1 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable");
×
1291
                    itemDiff += " : ";
×
1292
                    itemDiff += item.fileType2 != null ? item.fileType2 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable") + " ";
×
1293
                }
1294

UNCOV
1295
                if (item.fileSize1 != null || item.fileSize2 != null) {
×
UNCOV
1296
                    itemDiff += System.lineSeparator() + " " + BundleUtil.getStringFromBundle("file.viewDiffDialog.fileSize") + ": ";
×
1297
                    itemDiff += item.fileSize1 != null ? item.fileSize1 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable");
×
1298
                    itemDiff += " : ";
×
1299
                    itemDiff += item.fileSize2 != null ? item.fileSize2 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable") + " ";
×
1300
                }
1301
                
UNCOV
1302
                if (item.fileCat1 != null || item.fileCat2 != null) {
×
UNCOV
1303
                    itemDiff += System.lineSeparator() + " " + BundleUtil.getStringFromBundle("file.viewDiffDialog.category") + ": ";
×
1304
                    itemDiff += item.fileCat1 != null ? item.fileCat1 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable");
×
1305
                    itemDiff += " : ";
×
1306
                    itemDiff += item.fileCat2 != null ? item.fileCat2 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable") + " ";
×
1307
                }
1308
                
UNCOV
1309
                if (item.fileDesc1 != null || item.fileDesc2 != null) {
×
UNCOV
1310
                    itemDiff += System.lineSeparator() + " " + BundleUtil.getStringFromBundle("file.viewDiffDialog.description") + ": ";
×
1311
                    itemDiff += item.fileDesc1 != null ? item.fileDesc1 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable");
×
1312
                    itemDiff += " : ";
×
1313
                    itemDiff += item.fileDesc2 != null ? item.fileDesc2 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable") + " ";
×
1314
                }
1315

UNCOV
1316
                if (item.fileProvFree1 != null || item.fileProvFree2 != null) {
×
UNCOV
1317
                    itemDiff += System.lineSeparator() + " " + BundleUtil.getStringFromBundle("file.viewDiffDialog.provDescription") + ": ";
×
1318
                    itemDiff += item.fileProvFree1 != null ? item.fileProvFree1 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable");
×
1319
                    itemDiff += " : ";
×
1320
                    itemDiff += item.fileProvFree2 != null ? item.fileProvFree2 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable") + " ";
×
1321
                }
1322
                
UNCOV
1323
                if (item.fileRest1 != null || item.fileRest2 != null) {
×
UNCOV
1324
                    itemDiff += System.lineSeparator() + " " + BundleUtil.getStringFromBundle("file.viewDiffDialog.fileAccess") + ": ";
×
1325
                    itemDiff += item.fileRest1 != null ? item.fileRest1 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable");
×
1326
                    itemDiff += " : ";
×
1327
                    itemDiff += item.fileRest2 != null ? item.fileRest2 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable") + " ";
×
1328

1329
                }
1330
                
UNCOV
1331
                fileDiff += itemDiff;
×
UNCOV
1332
            }
×
1333
                     
1334
            retVal += fileDiff;
×
1335
        }
1336
        
UNCOV
1337
        String fileReplaced = System.lineSeparator() + BundleUtil.getStringFromBundle("file.viewDiffDialog.filesReplaced")+ ": "+ System.lineSeparator();
×
UNCOV
1338
        if(!this.getDatasetFilesReplacementList().isEmpty()){          
×
1339
            String itemDiff;          
1340
            for (datasetReplaceFileItem item : this.getDatasetFilesReplacementList()) {
×
UNCOV
1341
                itemDiff = "";
×
1342
                itemDiff = System.lineSeparator() + " " + BundleUtil.getStringFromBundle("file.viewDiffDialog.fileName") + ": ";
×
1343
                itemDiff += item.fdi.fileName1 != null ? item.fdi.fileName1 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable");
×
1344
                itemDiff += " : ";
×
1345
                itemDiff += item.fdi.fileName2 != null ? item.fdi.fileName2 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable");
×
1346
                itemDiff += System.lineSeparator() + " " + BundleUtil.getStringFromBundle("file.viewDiffDialog.fileType") + ": ";
×
1347
                itemDiff += item.fdi.fileType1 != null ? item.fdi.fileType1 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable");
×
1348
                itemDiff += " : ";
×
1349
                itemDiff += item.fdi.fileType2 != null ? item.fdi.fileType2 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable") + " ";
×
1350
                itemDiff += System.lineSeparator() + " " + BundleUtil.getStringFromBundle("file.viewDiffDialog.fileSize") + ": ";
×
1351
                itemDiff += item.fdi.fileSize1 != null ? item.fdi.fileSize1 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable");
×
1352
                itemDiff += " : ";
×
1353
                itemDiff += item.fdi.fileSize2 != null ? item.fdi.fileSize2 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable") + " ";
×
1354
                itemDiff += System.lineSeparator() + " " + BundleUtil.getStringFromBundle("file.viewDiffDialog.category") + ": ";
×
1355
                itemDiff += item.fdi.fileCat1 != null ? item.fdi.fileCat1 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable");
×
1356
                itemDiff += " : ";
×
1357
                itemDiff += item.fdi.fileCat2 != null ? item.fdi.fileCat2 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable") + " ";
×
1358
                itemDiff += System.lineSeparator() + " " + BundleUtil.getStringFromBundle("file.viewDiffDialog.description") + ": ";
×
1359
                itemDiff += item.fdi.fileDesc1 != null ? item.fdi.fileDesc1 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable");
×
1360
                itemDiff += " : ";
×
1361
                itemDiff += item.fdi.fileDesc2 != null ? item.fdi.fileDesc2 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable") + " ";
×
1362
                itemDiff += System.lineSeparator() + " " + BundleUtil.getStringFromBundle("file.viewDiffDialog.provDescription") + ": ";
×
1363
                itemDiff += item.fdi.fileProvFree1 != null ? item.fdi.fileProvFree1 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable");
×
1364
                itemDiff += " : ";
×
1365
                itemDiff += item.fdi.fileProvFree2 != null ? item.fdi.fileProvFree2 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable") + " ";
×
1366
                itemDiff += System.lineSeparator() + " " + BundleUtil.getStringFromBundle("file.viewDiffDialog.fileAccess") + ": ";
×
1367
                itemDiff += item.fdi.fileRest1 != null ? item.fdi.fileRest1 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable");
×
1368
                itemDiff += " : ";
×
1369
                itemDiff += item.fdi.fileRest2 != null ? item.fdi.fileRest2 : BundleUtil.getStringFromBundle("file.viewDiffDialog.notAvailable") + " ";
×
1370
                fileReplaced += itemDiff;
×
1371
            }           
×
1372
            retVal += fileReplaced;
×
1373
        }
1374
        
UNCOV
1375
        String termsOfUseDiff = System.lineSeparator() + "Terms of Use and Access Changes: "+ System.lineSeparator();
×
1376
        
1377
        if (!this.changedTermsAccess.isEmpty()){
×
UNCOV
1378
            for (String[] blocks : changedTermsAccess) {
×
1379
               String itemDiff = System.lineSeparator() + blocks[0] + " " + BundleUtil.getStringFromBundle("dataset.versionDifferences.changed") + " " + BundleUtil.getStringFromBundle("dataset.versionDifferences.from") + ": ";
×
1380
               itemDiff += blocks[1];
×
1381
               itemDiff += " " + BundleUtil.getStringFromBundle("dataset.versionDifferences.to") + ": "+  blocks[2];
×
1382
               termsOfUseDiff +=itemDiff;
×
1383
            }
×
1384
            retVal +=termsOfUseDiff;
×
1385
        }
1386
        
UNCOV
1387
        return retVal;
×
1388
    }
1389
    
1390
    
UNCOV
1391
    public class DifferenceSummaryGroup {
×
1392
        
1393
        private String displayName;
1394
        private String type;
1395
        private List<DifferenceSummaryItem> differenceSummaryItems;
1396

1397
        public String getDisplayName() {
UNCOV
1398
            return displayName;
×
1399
        }
1400

1401
        public void setDisplayName(String displayName) {
UNCOV
1402
            this.displayName = displayName;
×
UNCOV
1403
        }
×
1404

1405
        public String getType() {
UNCOV
1406
            return type;
×
1407
        }
1408

1409
        public void setType(String type) {
UNCOV
1410
            this.type = type;
×
UNCOV
1411
        }
×
1412

1413
        public List<DifferenceSummaryItem> getDifferenceSummaryItems() {
UNCOV
1414
            return differenceSummaryItems;
×
1415
        }
1416

1417
        public void setDifferenceSummaryItems(List<DifferenceSummaryItem> differenceSummaryItems) {
UNCOV
1418
            this.differenceSummaryItems = differenceSummaryItems;
×
UNCOV
1419
        }
×
1420
    }
1421
    
UNCOV
1422
    public class DifferenceSummaryItem {
×
1423
        private String displayName;
1424
        private int changed;
1425
        private int added;
1426
        private int deleted;
1427
        private int replaced;
1428
        private boolean multiple;
1429

1430
        public String getDisplayName() {
UNCOV
1431
            return displayName;
×
1432
        }
1433

1434
        public void setDisplayName(String displayName) {
UNCOV
1435
            this.displayName = displayName;
×
UNCOV
1436
        }
×
1437

1438
        public int getChanged() {
UNCOV
1439
            return changed;
×
1440
        }
1441

1442
        public void setChanged(int changed) {
UNCOV
1443
            this.changed = changed;
×
UNCOV
1444
        }
×
1445

1446
        public int getAdded() {
UNCOV
1447
            return added;
×
1448
        }
1449

1450
        public void setAdded(int added) {
UNCOV
1451
            this.added = added;
×
UNCOV
1452
        }
×
1453

1454
        public int getDeleted() {
UNCOV
1455
            return deleted;
×
1456
        }
1457

1458
        public void setDeleted(int deleted) {
UNCOV
1459
            this.deleted = deleted;
×
UNCOV
1460
        }
×
1461

1462
        public int getReplaced() {
UNCOV
1463
            return replaced;
×
1464
        }
1465

1466
        public void setReplaced(int replaced) {
UNCOV
1467
            this.replaced = replaced;
×
UNCOV
1468
        }
×
1469

1470
        public boolean isMultiple() {
UNCOV
1471
            return multiple;
×
1472
        }
1473

1474
        public void setMultiple(boolean multiple) {
UNCOV
1475
            this.multiple = multiple;
×
UNCOV
1476
        }
×
1477
    }
1478
    
1479
    public class datasetReplaceFileItem {
1✔
1480

1481
        public datasetFileDifferenceItem getFdi() {
UNCOV
1482
            return fdi;
×
1483
        }
1484

1485
        public void setFdi(datasetFileDifferenceItem fdi) {
1486
            this.fdi = fdi;
1✔
1487
        }
1✔
1488

1489
        public String getLeftColumn() {
UNCOV
1490
            return leftColumn;
×
1491
        }
1492

1493
        public void setLeftColumn(String leftColumn) {
1494
            this.leftColumn = leftColumn;
1✔
1495
        }
1✔
1496

1497
        public String getFile1Id() {
UNCOV
1498
            return file1Id;
×
1499
        }
1500

1501
        public void setFile1Id(String file1Id) {
1502
            this.file1Id = file1Id;
1✔
1503
        }
1✔
1504

1505
        public String getFile2Id() {
UNCOV
1506
            return file2Id;
×
1507
        }
1508

1509
        public void setFile2Id(String file2Id) {
1510
            this.file2Id = file2Id;
1✔
1511
        }
1✔
1512

1513
        public DataFile.ChecksumType getFile1ChecksumType() {
UNCOV
1514
            return file1ChecksumType;
×
1515
        }
1516

1517
        public void setFile1ChecksumType(DataFile.ChecksumType file1ChecksumType) {
1518
            this.file1ChecksumType = file1ChecksumType;
1✔
1519
        }
1✔
1520

1521
        public DataFile.ChecksumType getFile2ChecksumType() {
UNCOV
1522
            return file2ChecksumType;
×
1523
        }
1524

1525
        public void setFile2ChecksumType(DataFile.ChecksumType file2ChecksumType) {
1526
            this.file2ChecksumType = file2ChecksumType;
1✔
1527
        }
1✔
1528

1529
        public String getFile1ChecksumValue() {
UNCOV
1530
            return file1ChecksumValue;
×
1531
        }
1532

1533
        public void setFile1ChecksumValue(String file1ChecksumValue) {
1534
            this.file1ChecksumValue = file1ChecksumValue;
1✔
1535
        }
1✔
1536

1537
        public String getFile2ChecksumValue() {
UNCOV
1538
            return file2ChecksumValue;
×
1539
        }
1540

1541
        public void setFile2ChecksumValue(String file2ChecksumValue) {
1542
            this.file2ChecksumValue = file2ChecksumValue;
1✔
1543
        }
1✔
1544
        private datasetFileDifferenceItem fdi;
1545
        private String leftColumn;
1546
        private String file1Id;
1547
        private String file2Id;
1548
        private DataFile.ChecksumType file1ChecksumType;
1549
        private DataFile.ChecksumType file2ChecksumType;
1550
        private String file1ChecksumValue;
1551
        private String file2ChecksumValue;                
1552
    }
1553

1554
    public class datasetFileDifferenceItem {
1555

1556
        public datasetFileDifferenceItem() {
1✔
1557
        }
1✔
1558

1559
        private String fileId;
1560
        private DataFile.ChecksumType fileChecksumType;
1561
        private String fileChecksumValue;
1562

1563
        private String fileName1;
1564
        private String fileType1;
1565
        private String fileSize1;
1566
        private String fileCat1;
1567
        private String fileDesc1;
1568
        private String fileProvFree1;
1569
        private String fileRest1;
1570
        
1571
        private String fileName2;
1572
        private String fileType2;
1573
        private String fileSize2;
1574
        private String fileCat2;
1575
        private String fileDesc2;
1576
        private String fileProvFree2;
1577
        private String fileRest2;
1578

1579
        public String getFileProvFree1() {
UNCOV
1580
            return fileProvFree1;
×
1581
        }
1582

1583
        public void setFileProvFree1(String fileProvFree1) {
1584
            this.fileProvFree1 = fileProvFree1;
1✔
1585
        }
1✔
1586

1587
        public String getFileProvFree2() {
UNCOV
1588
            return fileProvFree2;
×
1589
        }
1590

1591
        public void setFileProvFree2(String fileProvFree2) {
1592
            this.fileProvFree2 = fileProvFree2;
1✔
1593
        }
1✔
1594
        
1595
        public String getFileRest1() {
UNCOV
1596
            return fileRest1;
×
1597
        }
1598

1599
        public void setFileRest1(String fileRest1) {
1600
            this.fileRest1 = fileRest1;
1✔
1601
        }
1✔
1602

1603
        public String getFileRest2() {
UNCOV
1604
            return fileRest2;
×
1605
        }
1606

1607
        public void setFileRest2(String fileRest2) {
1608
            this.fileRest2 = fileRest2;
1✔
1609
        }
1✔
1610

1611
        private boolean file1Empty = false;
1✔
1612
        private boolean file2Empty = false;
1✔
1613

1614
        public String getFileId() {
UNCOV
1615
            return fileId;
×
1616
        }
1617

1618
        public void setFileId(String fid) {
1619
            this.fileId = fid;
1✔
1620
        }
1✔
1621

1622
        public String getFileName1() {
UNCOV
1623
            return fileName1;
×
1624
        }
1625

1626
        public void setFileName1(String fn) {
1627
            this.fileName1 = fn;
1✔
1628
        }
1✔
1629

1630
        public String getFileType1() {
UNCOV
1631
            return fileType1;
×
1632
        }
1633

1634
        public void setFileType1(String ft) {
1635
            this.fileType1 = ft;
1✔
1636
        }
1✔
1637

1638
        public String getFileSize1() {
UNCOV
1639
            return fileSize1;
×
1640
        }
1641

1642
        public void setFileSize1(String fs) {
UNCOV
1643
            this.fileSize1 = fs;
×
1644
        }
×
1645

1646
        public String getFileCat1() {
1647
            return fileCat1;
×
1648
        }
1649

1650
        public void setFileCat1(String fc) {
1651
            this.fileCat1 = fc;
×
1652
        }
×
1653

1654
        public String getFileDesc1() {
1655
            return fileDesc1;
×
1656
        }
1657

1658
        public void setFileDesc1(String fd) {
1659
            this.fileDesc1 = fd;
1✔
1660
        }
1✔
1661

1662
        public String getFileName2() {
1663
            return fileName2;
×
1664
        }
1665

1666
        public void setFileName2(String fn) {
1667
            this.fileName2 = fn;
1✔
1668
        }
1✔
1669

1670
        public String getFileType2() {
1671
            return fileType2;
×
1672
        }
1673

1674
        public void setFileType2(String ft) {
1675
            this.fileType2 = ft;
1✔
1676
        }
1✔
1677

1678
        public String getFileSize2() {
1679
            return fileSize2;
×
1680
        }
1681

1682
        public void setFileSize2(String fs) {
1683
            this.fileSize2 = fs;
×
1684
        }
×
1685

1686
        public String getFileCat2() {
1687
            return fileCat2;
×
1688
        }
1689

1690
        public void setFileCat2(String fc) {
1691
            this.fileCat2 = fc;
×
1692
        }
×
1693

1694
        public String getFileDesc2() {
1695
            return fileDesc2;
×
1696
        }
1697

1698
        public void setFileDesc2(String fd) {
1699
            this.fileDesc2 = fd;
1✔
1700
        }
1✔
1701

1702
        public boolean isFile1Empty() {
1703
            return file1Empty;
×
1704
        }
1705

1706
        public boolean isFile2Empty() {
1707
            return file2Empty;
×
1708
        }
1709

1710
        public void setFile1Empty(boolean state) {
1711
            file1Empty = state;
1✔
1712
        }
1✔
1713

1714
        public void setFile2Empty(boolean state) {
1715
            file2Empty = state;
1✔
1716
        }
1✔
1717

1718
        public DataFile.ChecksumType getFileChecksumType() {
1719
            return fileChecksumType;
×
1720
        }
1721

1722
        public void setFileChecksumType(DataFile.ChecksumType fileChecksumType) {
1723
            this.fileChecksumType = fileChecksumType;
1✔
1724
        }
1✔
1725

1726
        public String getFileChecksumValue() {
1727
            return fileChecksumValue;
×
1728
        }
1729

1730
        public void setFileChecksumValue(String fileChecksumValue) {
1731
            this.fileChecksumValue = fileChecksumValue;
1✔
1732
        }
1✔
1733
    }
1734

1735
    public List<datasetFileDifferenceItem> getDatasetFilesDiffList() {
1736
        return datasetFilesDiffList;
×
1737
    }
1738

1739
    public void setDatasetFilesDiffList(List<datasetFileDifferenceItem> datasetFilesDiffList) {
1740
        this.datasetFilesDiffList = datasetFilesDiffList;
×
1741
    }
×
1742

1743
    /*
1744
     * Static methods to compute which blocks have changes between the two
1745
     * DatasetVersions. Currently used to assess whether 'system metadatablocks'
1746
     * (protected by a separate key) have changed. (Simplified from the methods
1747
     * above that track all the individual changes)
1748
     * 
1749
     */
1750
    public static Set<MetadataBlock> getBlocksWithChanges(DatasetVersion newVersion, DatasetVersion originalVersion) {
1751
        Set<MetadataBlock> changedBlockSet = new HashSet<MetadataBlock>();
1✔
1752

1753
        // Compare Data
1754
        List<DatasetField> newDatasetFields = new LinkedList<DatasetField>(newVersion.getDatasetFields());
1✔
1755
        if (originalVersion == null) {
1✔
1756
            // Every field is new, just list blocks used
1757
            Iterator<DatasetField> dsfnIter = newDatasetFields.listIterator();
×
1758
            while (dsfnIter.hasNext()) {
×
1759
                DatasetField dsfn = dsfnIter.next();
×
1760
                if (!changedBlockSet.contains(dsfn.getDatasetFieldType().getMetadataBlock())) {
×
1761
                    changedBlockSet.add(dsfn.getDatasetFieldType().getMetadataBlock());
×
1762
                }
1763
            }
×
1764

1765
        } else {
×
1766
            List<DatasetField> originalDatasetFields = new LinkedList<DatasetField>(originalVersion.getDatasetFields());
1✔
1767
            Iterator<DatasetField> dsfoIter = originalDatasetFields.listIterator();
1✔
1768
            while (dsfoIter.hasNext()) {
1✔
1769
                DatasetField dsfo = dsfoIter.next();
1✔
1770
                boolean deleted = true;
1✔
1771
                Iterator<DatasetField> dsfnIter = newDatasetFields.listIterator();
1✔
1772

1773
                while (dsfnIter.hasNext()) {
1✔
UNCOV
1774
                    DatasetField dsfn = dsfnIter.next();
×
1775
                    if (dsfo.getDatasetFieldType().equals(dsfn.getDatasetFieldType())) {
×
UNCOV
1776
                        deleted = false;
×
UNCOV
1777
                        if (!changedBlockSet.contains(dsfo.getDatasetFieldType().getMetadataBlock())) {
×
UNCOV
1778
                            logger.fine("Checking " + dsfo.getDatasetFieldType().getName());
×
1779
                            if (dsfo.getDatasetFieldType().isPrimitive()) {
×
1780
                                if (fieldsAreDifferent(dsfo, dsfn, false)) {
×
UNCOV
1781
                                    logger.fine("Adding block for " + dsfo.getDatasetFieldType().getName());
×
UNCOV
1782
                                    changedBlockSet.add(dsfo.getDatasetFieldType().getMetadataBlock());
×
1783
                                }
1784
                            } else {
UNCOV
1785
                                if (fieldsAreDifferent(dsfo, dsfn, true)) {
×
UNCOV
1786
                                    logger.fine("Adding block for " + dsfo.getDatasetFieldType().getName());
×
1787
                                    changedBlockSet.add(dsfo.getDatasetFieldType().getMetadataBlock());
×
1788
                                }
1789
                            }
1790
                        }
1791
                        dsfnIter.remove();
×
UNCOV
1792
                        break; // if found go to next dataset field
×
1793
                    }
UNCOV
1794
                }
×
1795

1796
                if (deleted) {
1✔
1797
                    logger.fine("Adding block for deleted " + dsfo.getDatasetFieldType().getName());
1✔
1798
                    changedBlockSet.add(dsfo.getDatasetFieldType().getMetadataBlock());
1✔
1799
                }
1800
                dsfoIter.remove();
1✔
1801
            }
1✔
1802
            // Only fields left are non-matching ones but they may be empty
1803
            for (DatasetField dsfn : newDatasetFields) {
1✔
1804
                if (!dsfn.isEmpty()) {
×
UNCOV
1805
                    logger.fine("Adding block for added " + dsfn.getDatasetFieldType().getName());
×
UNCOV
1806
                    changedBlockSet.add(dsfn.getDatasetFieldType().getMetadataBlock());
×
1807
                }
UNCOV
1808
            }
×
1809
        }
1810
        return changedBlockSet;
1✔
1811
    }
1812

1813
    private static boolean fieldsAreDifferent(DatasetField originalField, DatasetField newField, boolean compound) {
UNCOV
1814
        String originalValue = "";
×
1815
        String newValue = "";
×
1816

UNCOV
1817
        if (compound) {
×
UNCOV
1818
            for (DatasetFieldCompoundValue datasetFieldCompoundValueOriginal : originalField
×
1819
                    .getDatasetFieldCompoundValues()) {
×
1820
                int loopIndex = 0;
×
UNCOV
1821
                if (newField.getDatasetFieldCompoundValues().size() >= loopIndex + 1) {
×
UNCOV
1822
                    for (DatasetField dsfo : datasetFieldCompoundValueOriginal.getChildDatasetFields()) {
×
1823
                        if (!dsfo.getDisplayValue().isEmpty()) {
×
UNCOV
1824
                            originalValue += dsfo.getDisplayValue() + ", ";
×
1825
                        }
UNCOV
1826
                    }
×
1827
                    for (DatasetField dsfn : newField.getDatasetFieldCompoundValues().get(loopIndex)
×
1828
                            .getChildDatasetFields()) {
×
UNCOV
1829
                        if (!dsfn.getDisplayValue().isEmpty()) {
×
UNCOV
1830
                            newValue += dsfn.getDisplayValue() + ", ";
×
1831
                        }
UNCOV
1832
                    }
×
UNCOV
1833
                    if (!originalValue.trim().equals(newValue.trim())) {
×
UNCOV
1834
                        return true;
×
1835
                    }
1836
                }
UNCOV
1837
                loopIndex++;
×
UNCOV
1838
            }
×
1839
        } else {
1840
            originalValue = originalField.getDisplayValue();
×
UNCOV
1841
            newValue = newField.getDisplayValue();
×
UNCOV
1842
            if (!originalValue.equalsIgnoreCase(newValue)) {
×
1843
                return true;
×
1844
            }
1845
        }
UNCOV
1846
        return false;
×
1847
    }
1848
    public JsonObjectBuilder compareVersionsAsJson() {
1849
        JsonObjectBuilder job = new NullSafeJsonBuilder();
1✔
1850
        JsonObjectBuilder jobVersion = new NullSafeJsonBuilder();
1✔
1851
        jobVersion.add("versionNumber", originalVersion.getFriendlyVersionNumber());
1✔
1852
        jobVersion.add("lastUpdatedDate", new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(originalVersion.getLastUpdateTime()));
1✔
1853
        job.add("oldVersion", jobVersion);
1✔
1854
        jobVersion = new NullSafeJsonBuilder();
1✔
1855
        jobVersion.add("versionNumber", newVersion.getFriendlyVersionNumber());
1✔
1856
        jobVersion.add("lastUpdatedDate", new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(newVersion.getLastUpdateTime()));
1✔
1857
        job.add("newVersion", jobVersion);
1✔
1858

1859
        if (!this.detailDataByBlock.isEmpty()) {
1✔
1860
            JsonArrayBuilder jabMetadata = Json.createArrayBuilder();
1✔
1861
            for (List<DatasetField[]> blocks : detailDataByBlock) {
1✔
1862
                JsonObjectBuilder jobMetadata = new NullSafeJsonBuilder();
1✔
1863
                JsonArrayBuilder jab = Json.createArrayBuilder();
1✔
1864
                String blockDisplay = blocks.get(0)[0].getDatasetFieldType().getMetadataBlock().getDisplayName();
1✔
1865
                for (DatasetField[] dsfArray : blocks) {
1✔
1866
                    JsonObjectBuilder jb = new NullSafeJsonBuilder();
1✔
1867
                    jb.add("fieldName", dsfArray[0].getDatasetFieldType().getTitle());
1✔
1868
                    if (dsfArray[0].getDatasetFieldType().isPrimitive()) {
1✔
1869
                        jb.add("oldValue", dsfArray[0].getRawValue());
1✔
1870
                    } else {
NEW
UNCOV
1871
                        jb.add("oldValue", dsfArray[0].getCompoundRawValue());
×
1872
                    }
1873
                    if (dsfArray[1].getDatasetFieldType().isPrimitive()) {
1✔
1874
                        jb.add("newValue", dsfArray[1].getRawValue());
1✔
1875
                    } else {
NEW
UNCOV
1876
                        jb.add("newValue", dsfArray[1].getCompoundRawValue());
×
1877
                    }
1878
                    jab.add(jb);
1✔
1879
                }
1✔
1880
                jobMetadata.add("blockName", blockDisplay);
1✔
1881
                jobMetadata.add("changed", jab);
1✔
1882
                jabMetadata.add(jobMetadata);
1✔
1883
            }
1✔
1884
            job.add("metadataChanges", jabMetadata);
1✔
1885
        }
1886

1887
        // Format added, removed, and modified files
1888
        JsonArrayBuilder jabDiffFiles = Json.createArrayBuilder();
1✔
1889
        if (!addedFiles.isEmpty()) {
1✔
1890
            JsonArrayBuilder jab = Json.createArrayBuilder();
1✔
1891
            addedFiles.forEach(f -> {
1✔
1892
                jab.add(filesDiffJson(f));
1✔
1893
            });
1✔
1894
            job.add("filesAdded", jab);
1✔
1895
        }
1896
        if (!removedFiles.isEmpty()) {
1✔
1897
            JsonArrayBuilder jab = Json.createArrayBuilder();
1✔
1898
            removedFiles.forEach(f -> {
1✔
1899
                jab.add(filesDiffJson(f));
1✔
1900
            });
1✔
1901
            job.add("filesRemoved", jab);
1✔
1902
        }
1903
        if (!replacedFiles.isEmpty()) {
1✔
1904
            JsonArrayBuilder jabReplaced = Json.createArrayBuilder();
1✔
1905
            replacedFiles.forEach(fm -> {
1✔
1906
                if (fm.length == 2) {
1✔
1907
                    JsonObjectBuilder jobReplaced = new NullSafeJsonBuilder();
1✔
1908
                    jobReplaced.add("oldFile", filesDiffJson(fm[0]));
1✔
1909
                    jobReplaced.add("newFile", filesDiffJson(fm[1]));
1✔
1910
                    jabReplaced.add(jobReplaced);
1✔
1911
                }
1912
            });
1✔
1913
            job.add("filesReplaced", jabReplaced);
1✔
1914
        }
1915
        if (!changedFileMetadata.isEmpty()) {
1✔
1916
            changedFileMetadataDiff.entrySet().forEach(entry -> {
1✔
1917
                JsonArrayBuilder jab = Json.createArrayBuilder();
1✔
1918
                JsonObjectBuilder jobChanged = new NullSafeJsonBuilder();
1✔
1919
                jobChanged.add("fileName", entry.getKey().getDataFile().getDisplayName());
1✔
1920
                jobChanged.add(entry.getKey().getDataFile().getChecksumType().name(), entry.getKey().getDataFile().getChecksumValue());
1✔
1921
                jobChanged.add("fileId", entry.getKey().getDataFile().getId());
1✔
1922
                entry.getValue().entrySet().forEach(e -> {
1✔
1923
                    JsonObjectBuilder jobDiffField = new NullSafeJsonBuilder();
1✔
1924
                    jobDiffField.add("fieldName",e.getKey());
1✔
1925
                    jobDiffField.add("oldValue",e.getValue().get(0));
1✔
1926
                    jobDiffField.add("newValue",e.getValue().get(1));
1✔
1927
                    jab.add(jobDiffField);
1✔
1928
                });
1✔
1929
                jobChanged.add("changed", jab);
1✔
1930
                jabDiffFiles.add(jobChanged);
1✔
1931
            });
1✔
1932
            job.add("fileChanges", jabDiffFiles);
1✔
1933
        }
1934

1935
        // Format Terms Of Access changes
1936
        if (!changedTermsAccess.isEmpty()) {
1✔
1937
            JsonObjectBuilder jobTOA = new NullSafeJsonBuilder();
1✔
1938
            JsonArrayBuilder jab = Json.createArrayBuilder();
1✔
1939
            changedTermsAccess.forEach(toa -> {
1✔
1940
                JsonObjectBuilder jobValue = new NullSafeJsonBuilder();
1✔
1941
                jobValue.add("fieldName",toa[0]);
1✔
1942
                jobValue.add("oldValue",toa[1]);
1✔
1943
                jobValue.add("newValue",toa[2]);
1✔
1944
                jab.add(jobValue);
1✔
1945
            });
1✔
1946
            jobTOA.add("changed", jab);
1✔
1947
            job.add("TermsOfAccess", jobTOA);
1✔
1948
        }
1949

1950
        return job;
1✔
1951
    }
1952
    private JsonObjectBuilder filesDiffJson(FileMetadata fileMetadata) {
1953
        NullSafeJsonBuilder job = new NullSafeJsonBuilder();
1✔
1954
        DataFile df = fileMetadata.getDataFile();
1✔
1955
        job.add("fileName", df.getDisplayName())
1✔
1956
                .add("filePath", fileMetadata.getDirectoryLabel())
1✔
1957
                .add(df.getChecksumType().name(), df.getChecksumValue())
1✔
1958
                .add("type",df.getContentType())
1✔
1959
                .add("fileId", df.getId())
1✔
1960
                .add("description", fileMetadata.getDescription())
1✔
1961
                .add("isRestricted", df.isRestricted());
1✔
1962
        if (fileMetadata.getCategories() != null && !fileMetadata.getCategories().isEmpty()) {
1✔
NEW
UNCOV
1963
            JsonArrayBuilder jabCategories = Json.createArrayBuilder();
×
NEW
UNCOV
1964
            fileMetadata.getCategories().forEach(c -> jabCategories.add(c.getName()));
×
NEW
1965
            job.add("categories", jabCategories);
×
1966
        }
1967
        if (df.getTags() != null && !df.getTags().isEmpty()) {
1✔
NEW
1968
            JsonArrayBuilder jabTags = Json.createArrayBuilder();
×
NEW
1969
            df.getTags().forEach(t -> jabTags.add(t.getTypeLabel()));
×
NEW
1970
            job.add("tags", jabTags);
×
1971
        }
1972
        return job;
1✔
1973
    }
1974
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc