Skip to content

Commit

Permalink
Refactor DatasetVersionDifference to use proper types (IQSS#775)
Browse files Browse the repository at this point in the history
Instead of using `Object[]` with various types and needing knowledge of
the type and meaning of the members of the array, use SummaryData and
BlockData.

Also, don't use raw types and unchecked conversions.
  • Loading branch information
bencomp committed Jul 31, 2015
1 parent 7dfd71a commit 9bf891e
Show file tree
Hide file tree
Showing 3 changed files with 169 additions and 69 deletions.
22 changes: 11 additions & 11 deletions src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ public void setLicense(License license) {

@OneToMany(mappedBy = "datasetVersion", cascade = {CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST})
@OrderBy("label") // this is not our preferred ordering, which is with the AlphaNumericComparator, but does allow the files to be grouped by category
private List<FileMetadata> fileMetadatas = new ArrayList();
private List<FileMetadata> fileMetadatas = new ArrayList<>();

public List<FileMetadata> getFileMetadatas() {
return fileMetadatas;
Expand All @@ -162,7 +162,7 @@ public void setFileMetadatas(List<FileMetadata> fileMetadatas) {

@OneToMany(mappedBy = "datasetVersion", orphanRemoval = true, cascade = {CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST})
//@OrderBy("datasetField.displayOrder")
private List<DatasetField> datasetFields = new ArrayList();
private List<DatasetField> datasetFields = new ArrayList<>();

public List<DatasetField> getDatasetFields() {
return datasetFields;
Expand Down Expand Up @@ -635,8 +635,8 @@ public boolean isMinorUpdate() {
if (this.getFileMetadatas().size() != this.getDataset().getReleasedVersion().getFileMetadatas().size()){
return false;
} else {
List <DataFile> current = new ArrayList();
List <DataFile> previous = new ArrayList();
List <DataFile> current = new ArrayList<>();
List <DataFile> previous = new ArrayList<>();
for (FileMetadata fmdc : this.getFileMetadatas()){
current.add(fmdc.getDataFile());
}
Expand Down Expand Up @@ -734,7 +734,7 @@ public String getProductionDate() {

public List<DatasetAuthor> getDatasetAuthors() {
//todo get "List of Authors" from datasetfieldvalue table
List retList = new ArrayList();
List<DatasetAuthor> retList = new ArrayList<>();
for (DatasetField dsf : this.getDatasetFields()) {
Boolean addAuthor = true;
if (dsf.getDatasetFieldType().getName().equals(DatasetFieldConstant.author)) {
Expand Down Expand Up @@ -953,7 +953,7 @@ public String getRootDataverseNameforCitation(){

public List<DatasetDistributor> getDatasetDistributors() {
//todo get distributors from DatasetfieldValues
return new ArrayList();
return new ArrayList<DatasetDistributor>();
}

public void setDatasetDistributors(List<DatasetDistributor> distributors) {
Expand Down Expand Up @@ -1023,7 +1023,7 @@ private DatasetField initDatasetField(DatasetField dsf) {

public List<DatasetField> initDatasetFields() {
//retList - Return List of values
List<DatasetField> retList = new ArrayList();
List<DatasetField> retList = new ArrayList<>();
//Running into null on create new dataset
if (this.getDatasetFields() != null) {
for (DatasetField dsf : this.getDatasetFields()) {
Expand Down Expand Up @@ -1085,7 +1085,7 @@ public String getReturnToDatasetURL(String serverName, Dataset dset) {
;

public List<DatasetField> copyDatasetFields(List<DatasetField> copyFromList) {
List<DatasetField> retList = new ArrayList();
List<DatasetField> retList = new ArrayList<>();

for (DatasetField sourceDsf : copyFromList) {
//the copy needs to have the current version
Expand All @@ -1100,7 +1100,7 @@ public List<DatasetField> getFlatDatasetFields() {
}

private List<DatasetField> getFlatDatasetFields(List<DatasetField> dsfList) {
List<DatasetField> retList = new LinkedList();
List<DatasetField> retList = new LinkedList<>();
for (DatasetField dsf : dsfList) {
retList.add(dsf);
if (dsf.getDatasetFieldType().isCompound()) {
Expand Down Expand Up @@ -1138,7 +1138,7 @@ public String getSemanticVersion() {
}

public List<ConstraintViolation> validateRequired() {
List<ConstraintViolation> returnListreturnList = new ArrayList();
List<ConstraintViolation> returnListreturnList = new ArrayList<>();
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
for (DatasetField dsf : this.getFlatDatasetFields()) {
Expand All @@ -1155,7 +1155,7 @@ public List<ConstraintViolation> validateRequired() {
}

public Set<ConstraintViolation> validate() {
Set<ConstraintViolation> returnSet = new HashSet();
Set<ConstraintViolation> returnSet = new HashSet<>();

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Expand Down
184 changes: 142 additions & 42 deletions src/main/java/edu/harvard/iq/dataverse/DatasetVersionDifference.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@ public class DatasetVersionDifference {

private DatasetVersion newVersion;
private DatasetVersion originalVersion;
private List<List> detailDataByBlock = new ArrayList<>();
private List<List<DatasetField[]>> 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();
private List<FileMetadata> addedFiles = new ArrayList<>();
private List<FileMetadata> removedFiles = new ArrayList<>();
private List<FileMetadata> changedFileMetadata = new ArrayList<>();
private List<String[]> changedTermsAccess = new ArrayList<>();
private List<SummaryData> summaryDataForNote = new ArrayList<>();
private List<BlockData> blockDataForNote = new ArrayList<>();
String noFileDifferencesFoundLabel = "";

public DatasetVersionDifference(DatasetVersion newVersion, DatasetVersion originalVersion) {
Expand Down Expand Up @@ -101,7 +101,7 @@ public DatasetVersionDifference(DatasetVersion newVersion, DatasetVersion origin

//Sort within blocks by datasetfieldtype dispaly order then....
//sort via metadatablock order - citation first...
for (List blockList : detailDataByBlock) {
for (List<DatasetField[]> blockList : detailDataByBlock) {
Collections.sort(blockList, new Comparator<DatasetField[]>() {
public int compare(DatasetField[] l1, DatasetField[] l2) {
DatasetField dsfa = l1[0]; //(DatasetField[]) l1.get(0);
Expand All @@ -112,10 +112,10 @@ public int compare(DatasetField[] l1, DatasetField[] l2) {
}
});
}
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);
Collections.sort(detailDataByBlock, new Comparator<List<DatasetField[]>>() {
public int compare(List<DatasetField[]> l1, List<DatasetField[]> l2) {
DatasetField dsfa[] = l1.get(0);
DatasetField dsfb[] = 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));
Expand All @@ -128,7 +128,7 @@ public int compare(List l1, List l2) {

private void getTermsDifferences() {

changedTermsAccess = new ArrayList();
changedTermsAccess = new ArrayList<>();
if (!StringUtil.nullToEmpty(newVersion.getTermsOfUse()).equals(StringUtil.nullToEmpty(originalVersion.getTermsOfUse()))) {
String diffLabel = ResourceBundle.getBundle("Bundle").getString("file.dataFilesTab.terms.list.termsOfUse.header");
changedTermsAccess = addToTermsChangedList(changedTermsAccess, diffLabel, StringUtil.nullToEmpty(originalVersion.getTermsOfUse()), StringUtil.nullToEmpty(newVersion.getTermsOfUse()));
Expand Down Expand Up @@ -195,7 +195,7 @@ private void getTermsDifferences() {

}

private List addToTermsChangedList(List listIn, String label, String origVal, String newVal) {
private List<String[]> addToTermsChangedList(List<String[]> listIn, String label, String origVal, String newVal) {
String[] diffArray;
diffArray = new String[3];
diffArray[0] = label;
Expand All @@ -206,7 +206,7 @@ private List addToTermsChangedList(List listIn, String label, String origVal, St
}


private void addToList(List listIn, DatasetField dsfo, DatasetField dsfn) {
private void addToList(List<DatasetField[]> listIn, DatasetField dsfo, DatasetField dsfn) {
DatasetField[] dsfArray;
dsfArray = new DatasetField[2];
dsfArray[0] = dsfo;
Expand All @@ -224,8 +224,8 @@ private void addToSummary(DatasetField dsfo, DatasetField dsfn) {
dsfn.setDatasetFieldType(dsfo.getDatasetFieldType());
}
boolean addedToAll = false;
for (List blockList : detailDataByBlock) {
DatasetField dsft[] = (DatasetField[]) blockList.get(0);
for (List<DatasetField[]> blockList : detailDataByBlock) {
DatasetField dsft[] = blockList.get(0);
if (dsft[0].getDatasetFieldType().getMetadataBlock().equals(dsfo.getDatasetFieldType().getMetadataBlock())) {
addToList(blockList, dsfo, dsfn);
addedToAll = true;
Expand All @@ -241,33 +241,25 @@ private void addToSummary(DatasetField dsfo, DatasetField dsfn) {
private void updateBlockSummary(DatasetField dsf, int added, int deleted, int changed) {

boolean addedToAll = false;
for (Object[] blockList : blockDataForNote) {
DatasetField dsft = (DatasetField) blockList[0];
for (BlockData blockList : blockDataForNote) {
DatasetField dsft = blockList.getDatasetField();
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;
blockList.increaseAdded(added);
blockList.increaseDeleted(deleted);
blockList.increaseChanged(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);
BlockData bn = new BlockData(dsf, added, deleted, changed);
blockDataForNote.add(bn);
}

}

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);
SummaryData note = new SummaryData(dsfo, added, deleted, changed);
summaryDataForNote.add(note);
}

private boolean compareFileMetadatas(FileMetadata fmdo, FileMetadata fmdn) {
Expand Down Expand Up @@ -396,11 +388,11 @@ public String getFileNote() {
return retString;
}

public List<List> getDetailDataByBlock() {
public List<List<DatasetField[]>> getDetailDataByBlock() {
return detailDataByBlock;
}

public void setDetailDataByBlock(List<List> detailDataByBlock) {
public void setDetailDataByBlock(List<List<DatasetField[]>> detailDataByBlock) {
this.detailDataByBlock = detailDataByBlock;
}

Expand Down Expand Up @@ -444,28 +436,28 @@ public void setChangedFileMetadata(List<FileMetadata> changedFileMetadata) {
this.changedFileMetadata = changedFileMetadata;
}

public List<Object[]> getSummaryDataForNote() {
public List<SummaryData> getSummaryDataForNote() {
return summaryDataForNote;
}

public List<Object[]> getBlockDataForNote() {
public List<BlockData> getBlockDataForNote() {
return blockDataForNote;
}

public void setSummaryDataForNote(List<Object[]> summaryDataForNote) {
public void setSummaryDataForNote(List<SummaryData> summaryDataForNote) {
this.summaryDataForNote = summaryDataForNote;
}

public void setBlockDataForNote(List<Object[]> blockDataForNote) {
public void setBlockDataForNote(List<BlockData> blockDataForNote) {
this.blockDataForNote = blockDataForNote;
}


public List<List> getChangedTermsAccess() {
public List<String[]> getChangedTermsAccess() {
return changedTermsAccess;
}

public void setChangedTermsAccess(List<List> changedTermsAccess) {
public void setChangedTermsAccess(List<String[]> changedTermsAccess) {
this.changedTermsAccess = changedTermsAccess;
}

Expand Down Expand Up @@ -992,4 +984,112 @@ public String getNoFileDifferencesFoundLabel() {
public void setNoFileDifferencesFoundLabel(String noFileDifferencesFoundLabel) {
this.noFileDifferencesFoundLabel = noFileDifferencesFoundLabel;
}

/**
* Representation of a version difference summary.
*/
public class SummaryData {
private DatasetField dsf;
private int added, deleted, changed;

private SummaryData(DatasetField dsfo, int added, int deleted, int changed) {
this.dsf = dsfo;
this.added = added;
this.deleted = deleted;
this.changed = changed;
}

public DatasetField getDatasetField() {
return dsf;
}

public void setDatasetField(DatasetField dsf) {
this.dsf = dsf;
}

public int getAdded() {
return added;
}

public void setAdded(int added) {
this.added = added;
}

public int getDeleted() {
return deleted;
}

public void setDeleted(int deleted) {
this.deleted = deleted;
}

public int getChanged() {
return changed;
}

public void setChanged(int changed) {
this.changed = changed;
}

}

/**
* Representation of a version difference of a value in a metadata block.
*/
public class BlockData {
private DatasetField dsf;
private int added, deleted, changed;

private BlockData(DatasetField dsfo, int added, int deleted, int changed) {
this.dsf = dsfo;
this.added = added;
this.deleted = deleted;
this.changed = changed;
}

public DatasetField getDatasetField() {
return dsf;
}

public void setDatasetField(DatasetField dsf) {
this.dsf = dsf;
}

public int getAdded() {
return added;
}

public void setAdded(int added) {
this.added = added;
}

public int getDeleted() {
return deleted;
}

public void setDeleted(int deleted) {
this.deleted = deleted;
}

public int getChanged() {
return changed;
}

public void setChanged(int changed) {
this.changed = changed;
}

private void increaseAdded(int added) {
this.added += added;
}

private void increaseDeleted(int deleted) {
this.deleted += deleted;
}

private void increaseChanged(int changed) {
this.changed += changed;
}

}
}
Loading

0 comments on commit 9bf891e

Please sign in to comment.