Mercurial > hg > LGDataverses
diff src/main/java/edu/harvard/iq/dataverse/DatasetVersionDifference.java @ 10:a50cf11e5178
Rewrite LGDataverse completely upgrading to dataverse4.0
| author | Zoe Hong <zhong@mpiwg-berlin.mpg.de> |
|---|---|
| date | Tue, 08 Sep 2015 17:00:21 +0200 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetVersionDifference.java Tue Sep 08 17:00:21 2015 +0200 @@ -0,0 +1,837 @@ +package edu.harvard.iq.dataverse; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import org.apache.commons.lang.StringUtils; + +/** + * + * @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<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; + if (dsfn.getDatasetFieldType().isPrimitive()) { + for (DatasetField dsfo : originalVersion.getDatasetFields()) { + if (dsfo.getDatasetFieldType().equals(dsfn.getDatasetFieldType())) { + added = false; + break; + } + } + if (added && !dsfn.isEmpty()) { + updateBlockSummary(dsfn, dsfn.getDatasetFieldValues().size(), 0, 0); + addToSummary(null, dsfn); + } + } + } + + 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)); + } + }); + } + + 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.getCategory(), fmdn.getCategory())) { + // return false; + //} + if (!StringUtils.equals(fmdo.getLabel(), fmdn.getLabel())) { + return false; + } + + return true; + } + + 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; + } + + 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; + + Collections.sort(originalVersion.getFileMetadatas(), 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(newVersion.getFileMetadatas(), 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 < originalVersion.getFileMetadatas().size() + && j < newVersion.getFileMetadatas().size()) { + fm1 = originalVersion.getFileMetadatas().get(i); + fm2 = newVersion.getFileMetadatas().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()); + 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()); + 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()); + 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 < originalVersion.getFileMetadatas().size()) { + fm1 = originalVersion.getFileMetadatas().get(i); + datasetFileDifferenceItem fdi = selectFileMetadataDiffs(fm1, null); + fdi.setFileId(fm1.getDataFile().getId().toString()); + datasetFilesDiffList.add(fdi); + + i++; + } + + while (j < newVersion.getFileMetadatas().size()) { + fm2 = newVersion.getFileMetadatas().get(j); + datasetFileDifferenceItem fdi = selectFileMetadataDiffs(null, fm2); + if (fm2.getDataFile().getId() != null) { + fdi.setFileId(fm2.getDataFile().getId().toString()); + } else { + fdi.setFileId("[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: + /*deprecated: value1 = fm1.getCategory(); + value2 = fm2.getCategory(); + + 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; + } + + // 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()); + + 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()); + + } 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: + /* deprecated: value1 = fm1.getCategory(); + value2 = fm2.getCategory(); + + 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); + } + } + return fdi; + } + + public class datasetFileDifferenceItem { + + public datasetFileDifferenceItem() { + } + + private String fileId; + + private String fileName1; + private String fileType1; + private String fileSize1; + private String fileCat1; + private String fileDesc1; + + private String fileName2; + private String fileType2; + private String fileSize2; + private String fileCat2; + private String fileDesc2; + + 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 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; + } +}
