package edu.harvard.iq.dataverse;
import edu.harvard.iq.dataverse.util.StringUtil;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import java.util.ResourceBundle;
/**
*
* @author skraffmiller
*/
public class DatasetVersionDifference {
private DatasetVersion newVersion;
private DatasetVersion originalVersion;
private List<List> detailDataByBlock = new ArrayList<>();
private List<datasetFileDifferenceItem> datasetFilesDiffList;
private List<FileMetadata> addedFiles = new ArrayList();
private List<FileMetadata> removedFiles = new ArrayList();
private List<FileMetadata> changedFileMetadata = new ArrayList();
private List<List> changedTermsAccess = new ArrayList();
private List<Object[]> summaryDataForNote = new ArrayList();
private List<Object[]> blockDataForNote = new ArrayList();
String noFileDifferencesFoundLabel = "";
public DatasetVersionDifference(DatasetVersion newVersion, DatasetVersion originalVersion) {
setOriginalVersion(originalVersion);
setNewVersion(newVersion);
//Compare Data
for (DatasetField dsfo : originalVersion.getDatasetFields()) {
boolean deleted = true;
for (DatasetField dsfn : newVersion.getDatasetFields()) {
if (dsfo.getDatasetFieldType().equals(dsfn.getDatasetFieldType())) {
deleted = false;
if (dsfo.getDatasetFieldType().isPrimitive()) {
if (!dsfo.getDatasetFieldType().getFieldType().equals("email")) {
compareValues(dsfo, dsfn, false);
}
} else {
compareValues(dsfo, dsfn, true);
}
break; //if found go to next dataset field
}
}
if (deleted && !dsfo.isEmpty()) {
updateBlockSummary(dsfo, 0, dsfo.getDatasetFieldValues().size(), 0);
addToSummary(dsfo, null);
}
}
for (DatasetField dsfn : newVersion.getDatasetFields()) {
boolean added = true;
for (DatasetField dsfo : originalVersion.getDatasetFields()) {
if (dsfo.getDatasetFieldType().equals(dsfn.getDatasetFieldType())) {
added = false;
break;
}
}
if (added && !dsfn.isEmpty()) {
if (dsfn.getDatasetFieldType().isPrimitive()){
updateBlockSummary(dsfn, dsfn.getDatasetFieldValues().size(), 0, 0);
} else {
updateBlockSummary(dsfn, dsfn.getDatasetFieldCompoundValues().size(), 0, 0);
}
addToSummary(null, dsfn);
}
}
// TODO: ?
// It looks like we are going through the filemetadatas in both versions,
// *sequentially* (i.e. at the cost of O(N*M)), to select the lists of
// changed, deleted and added files between the 2 versions... But why
// are we doing it, if we are doing virtually the same thing inside
// the initDatasetFilesDifferenceList(), below - but in a more efficient
// way (sorting both lists, then goint through them in parallel, at the
// cost of (N+M) max.?
// -- 4.6 Nov. 2016
for (FileMetadata fmdo : originalVersion.getFileMetadatas()) {
boolean deleted = true;
for (FileMetadata fmdn : newVersion.getFileMetadatas()) {
if (fmdo.getDataFile().equals(fmdn.getDataFile())) {
deleted = false;
if (!compareFileMetadatas(fmdo, fmdn)) {
changedFileMetadata.add(fmdo);
changedFileMetadata.add(fmdn);
}
break;
}
}
if (deleted) {
removedFiles.add(fmdo);
}
}
for (FileMetadata fmdn : newVersion.getFileMetadatas()) {
boolean added = true;
for (FileMetadata fmdo : originalVersion.getFileMetadatas()) {
if (fmdo.getDataFile().equals(fmdn.getDataFile())) {
added = false;
break;
}
}
if (added) {
addedFiles.add(fmdn);
}
}
initDatasetFilesDifferencesList();
//Sort within blocks by datasetfieldtype dispaly order then....
//sort via metadatablock order - citation first...
for (List blockList : detailDataByBlock) {
Collections.sort(blockList, new Comparator<DatasetField[]>() {
public int compare(DatasetField[] l1, DatasetField[] l2) {
DatasetField dsfa = l1[0]; //(DatasetField[]) l1.get(0);
DatasetField dsfb = l2[0];
int a = dsfa.getDatasetFieldType().getDisplayOrder();
int b = dsfb.getDatasetFieldType().getDisplayOrder();
return Integer.valueOf(a).compareTo(Integer.valueOf(b));
}
});
}
Collections.sort(detailDataByBlock, new Comparator<List>() {
public int compare(List l1, List l2) {
DatasetField dsfa[] = (DatasetField[]) l1.get(0);
DatasetField dsfb[] = (DatasetField[]) l2.get(0);
int a = dsfa[0].getDatasetFieldType().getMetadataBlock().getId().intValue();
int b = dsfb[0].getDatasetFieldType().getMetadataBlock().getId().intValue();
return Integer.valueOf(a).compareTo(Integer.valueOf(b));
}
});
getTermsDifferences();
}
private void getTermsDifferences() {
changedTermsAccess = new ArrayList();
if (newVersion.getTermsOfUseAndAccess() != null && originalVersion.getTermsOfUseAndAccess() != null) {
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getTermsOfUse()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getTermsOfUse()))) {
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.header");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getTermsOfUse()), StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getTermsOfUse()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getConfidentialityDeclaration()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getConfidentialityDeclaration()))) {
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.declaration");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getConfidentialityDeclaration()),
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getConfidentialityDeclaration()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getSpecialPermissions()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getSpecialPermissions()))) {
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.permissions");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getSpecialPermissions()),
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getSpecialPermissions()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getRestrictions()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getRestrictions()))) {
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.restrictions");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getRestrictions()),
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getRestrictions()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getCitationRequirements()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getCitationRequirements()))) {
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.citationRequirements");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getCitationRequirements()),
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getCitationRequirements()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDepositorRequirements()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDepositorRequirements()))) {
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.depositorRequirements");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDepositorRequirements()),
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDepositorRequirements()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getConditions()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getConditions()))) {
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.conditions");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getConditions()),
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getConditions()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDisclaimer()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDisclaimer()))) {
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.disclaimer");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDisclaimer()), StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDisclaimer()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getTermsOfAccess()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getTermsOfAccess()))) {
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.termsOfsAccess");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getTermsOfAccess()),
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getTermsOfAccess()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDataAccessPlace()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDataAccessPlace()))) {
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.addInfo.dataAccessPlace");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDataAccessPlace()),
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDataAccessPlace()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getOriginalArchive()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getOriginalArchive()))) {
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.addInfo.originalArchive");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getOriginalArchive()),
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getOriginalArchive()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getAvailabilityStatus()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getAvailabilityStatus()))) {
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.addInfo.availabilityStatus");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getAvailabilityStatus()),
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getAvailabilityStatus()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getContactForAccess()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getContactForAccess()))) {
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.addInfo.contactForAccess");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getContactForAccess()),
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getContactForAccess()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getSizeOfCollection()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getSizeOfCollection()))) {
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.addInfo.sizeOfCollection");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getSizeOfCollection()),
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getSizeOfCollection()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getStudyCompletion()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getStudyCompletion()))) {
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.addInfo.studyCompletion");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getStudyCompletion()),
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getStudyCompletion()));
}
}
if (newVersion.getTermsOfUseAndAccess() != null && originalVersion.getTermsOfUseAndAccess() == null) {
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getTermsOfUse()).isEmpty()) {
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.header");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "", StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getTermsOfUse()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getConfidentialityDeclaration()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.declaration");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getConfidentialityDeclaration()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getSpecialPermissions()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.permissions");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getSpecialPermissions()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getRestrictions()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.restrictions");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getRestrictions()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getCitationRequirements()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.citationRequirements");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getCitationRequirements()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDepositorRequirements()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.depositorRequirements");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDepositorRequirements()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getConditions()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.conditions");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getConditions()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDisclaimer()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.disclaimer");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "", StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDisclaimer()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getTermsOfAccess()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.termsOfsAccess");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getTermsOfAccess()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDataAccessPlace()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.addInfo.dataAccessPlace");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getDataAccessPlace()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getOriginalArchive()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.addInfo.originalArchive");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getOriginalArchive()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getAvailabilityStatus()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.addInfo.availabilityStatus");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getAvailabilityStatus()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getContactForAccess()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.addInfo.contactForAccess");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getContactForAccess()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getSizeOfCollection()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.addInfo.sizeOfCollection");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getSizeOfCollection()));
}
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getStudyCompletion()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.addInfo.studyCompletion");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, "",
StringUtil.nullToEmpty(newVersion.getTermsOfUseAndAccess().getStudyCompletion()));
}
}
if (newVersion.getTermsOfUseAndAccess() == null && originalVersion.getTermsOfUseAndAccess() != null) {
if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getTermsOfUse()).isEmpty()) {
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.header");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getTermsOfUse()), "");
}
if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getConfidentialityDeclaration()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.declaration");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel,
StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getConfidentialityDeclaration()), "");
}
if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getSpecialPermissions()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.permissions");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel,
StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getSpecialPermissions()), "");
}
if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getRestrictions()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.restrictions");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel,
StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getRestrictions()), "");
}
if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getCitationRequirements()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.citationRequirements");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel,
StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getCitationRequirements()), "");
}
if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDepositorRequirements()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.depositorRequirements");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel,
StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDepositorRequirements()), "");
}
if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getConditions()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.conditions");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel,
StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getConditions()), "");
}
if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDisclaimer()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.addInfo.disclaimer");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDisclaimer()), "");
}
if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getTermsOfAccess()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.termsOfsAccess");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel,
StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getTermsOfAccess()), "");
}
if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDataAccessPlace()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.addInfo.dataAccessPlace");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel,
StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getDataAccessPlace()), "");
}
if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getOriginalArchive()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.addInfo.originalArchive");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel,
StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getOriginalArchive()), "");
}
if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getAvailabilityStatus()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.addInfo.availabilityStatus");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel,
StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getAvailabilityStatus()), "");
}
if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getContactForAccess()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.addInfo.contactForAccess");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel,
StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getContactForAccess()), "");
}
if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getSizeOfCollection()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.addInfo.sizeOfCollection");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel,
StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getSizeOfCollection()), "");
}
if (!StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getStudyCompletion()).isEmpty()){
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfAccess.addInfo.studyCompletion");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel,
StringUtil.nullToEmpty(originalVersion.getTermsOfUseAndAccess().getStudyCompletion()), "");
}
}
}
private List addToTermsChangedList(List listIn, String label, String origVal, String newVal) {
String[] diffArray;
diffArray = new String[3];
diffArray[0] = label;
diffArray[1] = origVal;
diffArray[2] = newVal;
listIn.add(diffArray);
return listIn;
}
private void addToList(List listIn, DatasetField dsfo, DatasetField dsfn) {
DatasetField[] dsfArray;
dsfArray = new DatasetField[2];
dsfArray[0] = dsfo;
dsfArray[1] = dsfn;
listIn.add(dsfArray);
}
private void addToSummary(DatasetField dsfo, DatasetField dsfn) {
if (dsfo == null) {
dsfo = new DatasetField();
dsfo.setDatasetFieldType(dsfn.getDatasetFieldType());
}
if (dsfn == null) {
dsfn = new DatasetField();
dsfn.setDatasetFieldType(dsfo.getDatasetFieldType());
}
boolean addedToAll = false;
for (List blockList : detailDataByBlock) {
DatasetField dsft[] = (DatasetField[]) blockList.get(0);
if (dsft[0].getDatasetFieldType().getMetadataBlock().equals(dsfo.getDatasetFieldType().getMetadataBlock())) {
addToList(blockList, dsfo, dsfn);
addedToAll = true;
}
}
if (!addedToAll) {
List<DatasetField[]> newList = new ArrayList<>();
addToList(newList, dsfo, dsfn);
detailDataByBlock.add(newList);
}
}
private void updateBlockSummary(DatasetField dsf, int added, int deleted, int changed) {
boolean addedToAll = false;
for (Object[] blockList : blockDataForNote) {
DatasetField dsft = (DatasetField) blockList[0];
if (dsft.getDatasetFieldType().getMetadataBlock().equals(dsf.getDatasetFieldType().getMetadataBlock())) {
blockList[1] = (Integer) blockList[1] + added;
blockList[2] = (Integer) blockList[2] + deleted;
blockList[3] = (Integer) blockList[3] + changed;
addedToAll = true;
}
}
if (!addedToAll) {
Object[] newArray = new Object[4];
newArray[0] = dsf;
newArray[1] = added;
newArray[2] = deleted;
newArray[3] = changed;
blockDataForNote.add(newArray);
}
}
private void addToNoteSummary(DatasetField dsfo, int added, int deleted, int changed) {
Object[] noteArray = new Object[4];
noteArray[0] = dsfo;
noteArray[1] = added;
noteArray[2] = deleted;
noteArray[3] = changed;
summaryDataForNote.add(noteArray);
}
private boolean compareFileMetadatas(FileMetadata fmdo, FileMetadata fmdn) {
if (!StringUtils.equals(fmdo.getDescription(), fmdn.getDescription())) {
return false;
}
if (!StringUtils.equals(fmdo.getCategoriesByName().toString(), fmdn.getCategoriesByName().toString())) {
return false;
}
if (!StringUtils.equals(fmdo.getLabel(), fmdn.getLabel())) {
return false;
}
return fmdo.isRestricted() == fmdn.isRestricted();
}
private void compareValues(DatasetField originalField, DatasetField newField, boolean compound) {
String originalValue = "";
String newValue = "";
int countOriginal = 0;
int countNew = 0;
int totalAdded = 0;
int totalDeleted = 0;
int totalChanged = 0;
int loopIndex = 0;
if (compound) {
for (DatasetFieldCompoundValue datasetFieldCompoundValueOriginal : originalField.getDatasetFieldCompoundValues()) {
if (newField.getDatasetFieldCompoundValues().size() >= loopIndex + 1) {
for (DatasetField dsfo : datasetFieldCompoundValueOriginal.getChildDatasetFields()) {
if (!dsfo.getDisplayValue().isEmpty()) {
originalValue += dsfo.getDisplayValue() + ", ";
}
}
for (DatasetField dsfn : newField.getDatasetFieldCompoundValues().get(loopIndex).getChildDatasetFields()) {
if (!dsfn.getDisplayValue().isEmpty()) {
newValue += dsfn.getDisplayValue() + ", ";
}
}
if (originalValue.isEmpty() && !newValue.isEmpty()) {
totalAdded++;
} else if (!newValue.isEmpty() && !originalValue.trim().equals(newValue.trim())) {
totalChanged++;
}
}
loopIndex++;
}
countNew = newField.getDatasetFieldCompoundValues().size();
countOriginal = originalField.getDatasetFieldCompoundValues().size();
} else {
int index = 0;
for (String valString : originalField.getValues()) {
if (valString != null && !valString.isEmpty()) {
countOriginal++;
}
}
for (String valString : newField.getValues()) {
if (valString != null && !valString.isEmpty()) {
countNew++;
}
}
String nString = "";
originalValue = originalField.getDisplayValue();
newValue = newField.getDisplayValue();
for (String oString : originalField.getValues()) {
if (newField.getValues().size() >= (index + 1)) {
nString = newField.getValues().get(index);
}
if (nString != null && oString != null && !oString.trim().equals(nString.trim())) {
totalChanged++;
}
}
if (originalValue.equalsIgnoreCase(newValue)) {
totalChanged = 0;
}
}
if (countNew > countOriginal) {
totalAdded = countNew - countOriginal;
}
if (countOriginal > countNew) {
totalDeleted = countOriginal - countNew;
}
if ((totalAdded + totalDeleted + totalChanged) > 0) {
if (originalField.getDatasetFieldType().isDisplayOnCreate()) {
addToNoteSummary(originalField, totalAdded, totalDeleted, totalChanged);
addToSummary(originalField, newField);
} else {
updateBlockSummary(originalField, totalAdded, totalDeleted, totalChanged);
addToSummary(originalField, newField);
}
}
}
public String getFileNote() {
String retString = "";
if (addedFiles.size() > 0) {
retString = "Files (Added: " + addedFiles.size();
}
if (removedFiles.size() > 0) {
if (retString.isEmpty()) {
retString = "Files (Removed: " + removedFiles.size();
} else {
retString += "; Removed: " + removedFiles.size();
}
}
if (changedFileMetadata.size() > 0) {
if (retString.isEmpty()) {
retString = "Files (Changed File Metadata: " + changedFileMetadata.size() / 2;
} else {
retString += "; Changed File Metadata: " + changedFileMetadata.size() / 2;
}
}
if (!retString.isEmpty()) {
retString += ")";
}
return retString;
}
public List<List> getDetailDataByBlock() {
return detailDataByBlock;
}
public void setDetailDataByBlock(List<List> detailDataByBlock) {
this.detailDataByBlock = detailDataByBlock;
}
public List<FileMetadata> getAddedFiles() {
return addedFiles;
}
public void setAddedFiles(List<FileMetadata> addedFiles) {
this.addedFiles = addedFiles;
}
public List<FileMetadata> getRemovedFiles() {
return removedFiles;
}
public void setRemovedFiles(List<FileMetadata> removedFiles) {
this.removedFiles = removedFiles;
}
public DatasetVersion getNewVersion() {
return newVersion;
}
public void setNewVersion(DatasetVersion newVersion) {
this.newVersion = newVersion;
}
public DatasetVersion getOriginalVersion() {
return originalVersion;
}
public void setOriginalVersion(DatasetVersion originalVersion) {
this.originalVersion = originalVersion;
}
public List<FileMetadata> getChangedFileMetadata() {
return changedFileMetadata;
}
public void setChangedFileMetadata(List<FileMetadata> changedFileMetadata) {
this.changedFileMetadata = changedFileMetadata;
}
public List<Object[]> getSummaryDataForNote() {
return summaryDataForNote;
}
public List<Object[]> getBlockDataForNote() {
return blockDataForNote;
}
public void setSummaryDataForNote(List<Object[]> summaryDataForNote) {
this.summaryDataForNote = summaryDataForNote;
}
public void setBlockDataForNote(List<Object[]> blockDataForNote) {
this.blockDataForNote = blockDataForNote;
}
public List<List> getChangedTermsAccess() {
return changedTermsAccess;
}
public void setChangedTermsAccess(List<List> changedTermsAccess) {
this.changedTermsAccess = changedTermsAccess;
}
private void initDatasetFilesDifferencesList() {
datasetFilesDiffList = new ArrayList<datasetFileDifferenceItem>();
// Study Files themselves are version-less;
// In other words, 2 different versions can have different sets of
// study files, but the files themselves don't have versions.
// So in order to find the differences between the 2 sets of study
// files in 2 versions we can just go through the lists of the
// files and compare the ids. If both versions have the file with
// the same file id, it is the same file.
// UPDATE: in addition to the above, even when the 2 versions share the
// same study file, the file metadatas ARE version-specific, so some of
// the fields there (filename, etc.) may be different. If this is the
// case, we want to display these differences as well.
if (originalVersion.getFileMetadatas().size() == 0 && newVersion.getFileMetadatas().size() == 0) {
noFileDifferencesFoundLabel = "No data files in either version of the study";
return;
}
int i = 0;
int j = 0;
FileMetadata fm1;
FileMetadata fm2;
// We also have to be careful sorting this FileMetadatas. If we sort the
// lists as they are still attached to their respective versions, we may end
// up messing up the page, which was rendered based on the specific order
// of these in the working version!
// So the right way of doing this is to create defensive copies of the
// lists; extra memory, but safer.
// -- L.A. Nov. 2016
List<FileMetadata> fileMetadatasNew = new ArrayList<>(newVersion.getFileMetadatas());
List<FileMetadata> fileMetadatasOriginal = new ArrayList<>(originalVersion.getFileMetadatas());
Collections.sort(fileMetadatasOriginal, new Comparator<FileMetadata>() {
public int compare(FileMetadata l1, FileMetadata l2) {
FileMetadata fm1 = l1; //(DatasetField[]) l1.get(0);
FileMetadata fm2 = l2;
int a = fm1.getDataFile().getId().intValue();
int b = fm2.getDataFile().getId().intValue();
return Integer.valueOf(a).compareTo(Integer.valueOf(b));
}
});
// Here's a potential problem: this new version may have been created
// specifically because new files are being added to the dataset.
// In which case there may be files associated with this new version
// with no database ids - since they haven't been saved yet.
// So if we try to sort the files in the version the way we did above,
// by ID, it may fail with a null pointer.
// To solve this, we should simply check if the file has the id; and if not,
// sort it higher than any file with an id - because it is a most recently
// added file. Since we are only doing this for the purposes of generating
// version differences, this should be OK.
// -- L.A. Aug. 2014
Collections.sort(fileMetadatasNew, new Comparator<FileMetadata>() {
public int compare(FileMetadata l1, FileMetadata l2) {
FileMetadata fm1 = l1; //(DatasetField[]) l1.get(0);
FileMetadata fm2 = l2;
Long a = fm1.getDataFile().getId();
Long b = fm2.getDataFile().getId();
if (a == null && b == null) {
return 0;
} else if (a == null) {
return 1;
} else if (b == null) {
return -1;
}
return a.compareTo(b);
}
});
while (i < fileMetadatasOriginal.size()
&& j < fileMetadatasNew.size()) {
fm1 = fileMetadatasOriginal.get(i);
fm2 = fileMetadatasNew.get(j);
if (fm2.getDataFile().getId() != null && fm1.getDataFile().getId().compareTo(fm2.getDataFile().getId()) == 0) {
// The 2 versions share the same study file;
// Check if the metadata information is identical in the 2 versions
// of the metadata:
if (fileMetadataIsDifferent(fm1, fm2)) {
datasetFileDifferenceItem fdi = selectFileMetadataDiffs(fm1, fm2);
fdi.setFileId(fm1.getDataFile().getId().toString());
fdi.setFileChecksumType(fm1.getDataFile().getChecksumType());
fdi.setFileChecksumValue(fm1.getDataFile().getChecksumValue());
datasetFilesDiffList.add(fdi);
}
i++;
j++;
} else if (fm2.getDataFile().getId() != null && fm1.getDataFile().getId().compareTo(fm2.getDataFile().getId()) > 0) {
datasetFileDifferenceItem fdi = selectFileMetadataDiffs(null, fm2);
fdi.setFileId(fm2.getDataFile().getId().toString());
fdi.setFileChecksumType(fm2.getDataFile().getChecksumType());
fdi.setFileChecksumValue(fm2.getDataFile().getChecksumValue());
datasetFilesDiffList.add(fdi);
j++;
} else if (fm2.getDataFile().getId() == null || fm1.getDataFile().getId().compareTo(fm2.getDataFile().getId()) < 0) {
datasetFileDifferenceItem fdi = selectFileMetadataDiffs(fm1, null);
fdi.setFileId(fm1.getDataFile().getId().toString());
fdi.setFileChecksumType(fm1.getDataFile().getChecksumType());
fdi.setFileChecksumValue(fm1.getDataFile().getChecksumValue());
datasetFilesDiffList.add(fdi);
i++;
}
}
// We've reached the end of at least one file list.
// Whatever files are left on either of the 2 lists are automatically "different"
// between the 2 versions.
while (i < fileMetadatasOriginal.size()) {
fm1 = fileMetadatasOriginal.get(i);
datasetFileDifferenceItem fdi = selectFileMetadataDiffs(fm1, null);
fdi.setFileId(fm1.getDataFile().getId().toString());
fdi.setFileChecksumType(fm1.getDataFile().getChecksumType());
fdi.setFileChecksumValue(fm1.getDataFile().getChecksumValue());
datasetFilesDiffList.add(fdi);
i++;
}
while (j < fileMetadatasNew.size()) {
fm2 = fileMetadatasNew.get(j);
datasetFileDifferenceItem fdi = selectFileMetadataDiffs(null, fm2);
if (fm2.getDataFile().getId() != null) {
fdi.setFileId(fm2.getDataFile().getId().toString());
} else {
fdi.setFileId("[UNASSIGNED]");
}
if (fm2.getDataFile().getChecksumValue() != null) {
fdi.setFileChecksumType(fm2.getDataFile().getChecksumType());
fdi.setFileChecksumValue(fm2.getDataFile().getChecksumValue());
} else {
/**
* @todo What should we do here? checksumValue is set to
* "nullable = false" so it should never be non-null. Let's set
* it to "null" and see if this code path is ever reached. If
* not, the null check above can probably be safely removed.
*/
fdi.setFileChecksumType(null);
fdi.setFileChecksumValue("[UNASSIGNED]");
}
datasetFilesDiffList.add(fdi);
j++;
}
if (datasetFilesDiffList.size() == 0) {
noFileDifferencesFoundLabel = "These study versions have identical sets of data files";
}
}
private boolean fileMetadataIsDifferent(FileMetadata fm1, FileMetadata fm2) {
if (fm1 == null && fm2 == null) {
return false;
}
if (fm1 == null && fm2 != null) {
return true;
}
if (fm2 == null && fm1 != null) {
return true;
}
// Both are non-null metadata objects.
// We simply go through the 5 metadata fields, if any one of them
// is different between the 2 versions, we declare the objects
// different.
String value1;
String value2;
// filename:
value1 = fm1.getLabel();
value2 = fm2.getLabel();
if (value1 == null || value1.equals("") || value1.equals(" ")) {
value1 = "";
}
if (value2 == null || value2.equals("") || value2.equals(" ")) {
value2 = "";
}
if (!value1.equals(value2)) {
return true;
}
// file type:
value1 = fm1.getDataFile().getFriendlyType();
value2 = fm2.getDataFile().getFriendlyType();
if (value1 == null || value1.equals("") || value1.equals(" ")) {
value1 = "";
}
if (value2 == null || value2.equals("") || value2.equals(" ")) {
value2 = "";
}
if (!value1.equals(value2)) {
return true;
}
// file size:
/*
value1 = FileUtil.byteCountToDisplaySize(new File(fm1.getStudyFile().getFileSystemLocation()).length());
value2 = FileUtil.byteCountToDisplaySize(new File(fm2.getStudyFile().getFileSystemLocation()).length());
if (value1 == null || value1.equals("") || value1.equals(" ")) {
value1 = "";
}
if (value2 == null || value2.equals("") || value2.equals(" ")) {
value2 = "";
}
if(!value1.equals(value2)) {
return true;
}
*/
// file category:
value1 = fm1.getCategoriesByName().toString();
value2 = fm2.getCategoriesByName().toString();
if (value1 == null || value1.equals("") || value1.equals(" ")) {
value1 = "";
}
if (value2 == null || value2.equals("") || value2.equals(" ")) {
value2 = "";
}
if (!value1.equals(value2)) {
return true;
}
// file description:
value1 = fm1.getDescription();
value2 = fm2.getDescription();
if (value1 == null || value1.equals("") || value1.equals(" ")) {
value1 = "";
}
if (value2 == null || value2.equals("") || value2.equals(" ")) {
value2 = "";
}
if (!value1.equals(value2)) {
return true;
}
//File restrictions
value1 = fm1.isRestricted() ? "Restricted" : "Not Restricted";
value2 = fm2.isRestricted() ? "Restricted" : "Not Restricted";
if (!value1.equals(value2)) {
return true;
}
// if we got this far, the 2 metadatas are identical:
return false;
}
private datasetFileDifferenceItem selectFileMetadataDiffs(FileMetadata fm1, FileMetadata fm2) {
datasetFileDifferenceItem fdi = new datasetFileDifferenceItem();
if (fm1 == null && fm2 == null) {
// this should never happen; but if it does,
// we return an empty diff object.
return fdi;
}
if (fm2 == null) {
fdi.setFileName1(fm1.getLabel());
fdi.setFileType1(fm1.getDataFile().getFriendlyType());
//fdi.setFileSize1(FileUtil. (new File(fm1.getDataFile().getFileSystemLocation()).length()));
// deprecated: fdi.setFileCat1(fm1.getCategory());
fdi.setFileDesc1(fm1.getDescription());
if(!fm1.getCategoriesByName().isEmpty()){
fdi.setFileCat1(fm1.getCategoriesByName().toString());
}
fdi.setFileRest1(fm1.isRestricted() ? "Restricted" : "Not Restricted");
fdi.setFile2Empty(true);
} else if (fm1 == null) {
fdi.setFile1Empty(true);
fdi.setFileName2(fm2.getLabel());
fdi.setFileType2(fm2.getDataFile().getFriendlyType());
//fdi.setFileSize2(FileUtil.byteCountToDisplaySize(new File(fm2.getStudyFile().getFileSystemLocation()).length()));
// deprecated: fdi.setFileCat2(fm2.getCategory());
fdi.setFileDesc2(fm2.getDescription());
if(!fm2.getCategoriesByName().isEmpty()){
fdi.setFileCat2(fm2.getCategoriesByName().toString());
}
fdi.setFileRest2(fm2.isRestricted() ? "Restricted" : "Not Restricted");
} else {
// Both are non-null metadata objects.
// We simply go through the 5 metadata fields, if any are
// different between the 2 versions, we add them to the
// difference object:
String value1;
String value2;
// filename:
value1 = fm1.getLabel();
value2 = fm2.getLabel();
if (value1 == null || value1.equals("") || value1.equals(" ")) {
value1 = "";
}
if (value2 == null || value2.equals("") || value2.equals(" ")) {
value2 = "";
}
if (!value1.equals(value2)) {
fdi.setFileName1(value1);
fdi.setFileName2(value2);
}
// NOTE:
// fileType and fileSize will always be the same
// for the same studyFile! -- so no need to check for differences in
// these 2 items.
// file category:
value1 = fm1.getCategoriesByName().toString();
value2 = fm2.getCategoriesByName().toString();
if (value1 == null || value1.equals("") || value1.equals(" ")) {
value1 = "";
}
if (value2 == null || value2.equals("") || value2.equals(" ")) {
value2 = "";
}
if (!value1.equals(value2)) {
fdi.setFileCat1(value1);
fdi.setFileCat2(value2);
}
// file description:
value1 = fm1.getDescription();
value2 = fm2.getDescription();
if (value1 == null || value1.equals("") || value1.equals(" ")) {
value1 = "";
}
if (value2 == null || value2.equals("") || value2.equals(" ")) {
value2 = "";
}
if (!value1.equals(value2)) {
fdi.setFileDesc1(value1);
fdi.setFileDesc2(value2);
}
value1 = fm1.isRestricted() ? "Restricted" : "Not Restricted";
value2 = fm2.isRestricted() ? "Restricted" : "Not Restricted";
if (!value1.equals(value2)) {
fdi.setFileRest1(value1);
fdi.setFileRest2(value2);
}
}
return fdi;
}
public class datasetFileDifferenceItem {
public datasetFileDifferenceItem() {
}
private String fileId;
private DataFile.ChecksumType fileChecksumType;
private String fileChecksumValue;
private String fileName1;
private String fileType1;
private String fileSize1;
private String fileCat1;
private String fileDesc1;
private String fileRest1;
private String fileName2;
private String fileType2;
private String fileSize2;
private String fileCat2;
private String fileDesc2;
private String fileRest2;
public String getFileRest1() {
return fileRest1;
}
public void setFileRest1(String fileRest1) {
this.fileRest1 = fileRest1;
}
public String getFileRest2() {
return fileRest2;
}
public void setFileRest2(String fileRest2) {
this.fileRest2 = fileRest2;
}
private boolean file1Empty = false;
private boolean file2Empty = false;
public String getFileId() {
return fileId;
}
public void setFileId(String fid) {
this.fileId = fid;
}
public String getFileName1() {
return fileName1;
}
public void setFileName1(String fn) {
this.fileName1 = fn;
}
public String getFileType1() {
return fileType1;
}
public void setFileType1(String ft) {
this.fileType1 = ft;
}
public String getFileSize1() {
return fileSize1;
}
public void setFileSize1(String fs) {
this.fileSize1 = fs;
}
public String getFileCat1() {
return fileCat1;
}
public void setFileCat1(String fc) {
this.fileCat1 = fc;
}
public String getFileDesc1() {
return fileDesc1;
}
public void setFileDesc1(String fd) {
this.fileDesc1 = fd;
}
public String getFileName2() {
return fileName2;
}
public void setFileName2(String fn) {
this.fileName2 = fn;
}
public String getFileType2() {
return fileType2;
}
public void setFileType2(String ft) {
this.fileType2 = ft;
}
public String getFileSize2() {
return fileSize2;
}
public void setFileSize2(String fs) {
this.fileSize2 = fs;
}
public String getFileCat2() {
return fileCat2;
}
public void setFileCat2(String fc) {
this.fileCat2 = fc;
}
public String getFileDesc2() {
return fileDesc2;
}
public void setFileDesc2(String fd) {
this.fileDesc2 = fd;
}
public boolean isFile1Empty() {
return file1Empty;
}
public boolean isFile2Empty() {
return file2Empty;
}
public void setFile1Empty(boolean state) {
file1Empty = state;
}
public void setFile2Empty(boolean state) {
file2Empty = state;
}
public DataFile.ChecksumType getFileChecksumType() {
return fileChecksumType;
}
public void setFileChecksumType(DataFile.ChecksumType fileChecksumType) {
this.fileChecksumType = fileChecksumType;
}
public String getFileChecksumValue() {
return fileChecksumValue;
}
public void setFileChecksumValue(String fileChecksumValue) {
this.fileChecksumValue = fileChecksumValue;
}
}
public List<datasetFileDifferenceItem> getDatasetFilesDiffList() {
return datasetFilesDiffList;
}
public void setDatasetFilesDiffList(List<datasetFileDifferenceItem> datasetFilesDiffList) {
this.datasetFilesDiffList = datasetFilesDiffList;
}
public String getNoFileDifferencesFoundLabel() {
return noFileDifferencesFoundLabel;
}
public void setNoFileDifferencesFoundLabel(String noFileDifferencesFoundLabel) {
this.noFileDifferencesFoundLabel = noFileDifferencesFoundLabel;
}
}