Skip to content

Commit 054cafb

Browse files
authored
Merge pull request #3226 from IQSS/3221-unf-fixes-4.5
3221 unf fixes 4.5
2 parents 4cdfd12 + 69f8929 commit 054cafb

File tree

7 files changed

+94
-45
lines changed

7 files changed

+94
-45
lines changed

src/main/java/edu/harvard/iq/dataverse/Dataset.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,11 @@ private DatasetVersion createNewDatasetVersion(Template template) {
242242
dsv.updateDefaultValuesFromTemplate(template);
243243
} else {
244244
latestVersion = getLatestVersionForCopy();
245+
246+
if (latestVersion.getUNF() != null){
247+
dsv.setUNF(latestVersion.getUNF());
248+
}
249+
245250
if (latestVersion.getDatasetFields() != null && !latestVersion.getDatasetFields().isEmpty()) {
246251
dsv.setDatasetFields(dsv.copyDatasetFields(latestVersion.getDatasetFields()));
247252
}

src/main/java/edu/harvard/iq/dataverse/DatasetPage.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2678,6 +2678,12 @@ public void deleteFiles() {
26782678
successMessage = successMessage.replace("{0}", fileNames);
26792679
JsfHelper.addFlashMessage(successMessage);
26802680
}
2681+
2682+
/*
2683+
Do note that if we are deleting any files that have UNFs (i.e.,
2684+
tabular files), we DO NEED TO RECALCULATE the UNF of the version!
2685+
- but we will do this inside the UpdateDatasetCommand.
2686+
*/
26812687
}
26822688

26832689
public String save() {

src/main/java/edu/harvard/iq/dataverse/EjbDataverseEngine.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
1313
import edu.harvard.iq.dataverse.engine.command.exception.CommandException;
1414
import edu.harvard.iq.dataverse.engine.command.exception.PermissionException;
15+
import edu.harvard.iq.dataverse.ingest.IngestServiceBean;
1516
import edu.harvard.iq.dataverse.privateurl.PrivateUrlServiceBean;
1617
import edu.harvard.iq.dataverse.search.IndexServiceBean;
1718
import edu.harvard.iq.dataverse.search.SearchServiceBean;
@@ -69,6 +70,9 @@ public class EjbDataverseEngine {
6970

7071
@EJB
7172
SearchServiceBean searchService;
73+
74+
@EJB
75+
IngestServiceBean ingestService;
7276

7377
@EJB
7478
PermissionServiceBean permissionService;
@@ -271,6 +275,11 @@ public SearchServiceBean search() {
271275
return searchService;
272276
}
273277

278+
@Override
279+
public IngestServiceBean ingest() {
280+
return ingestService;
281+
}
282+
274283
@Override
275284
public PermissionServiceBean permissions() {
276285
return permissionService;

src/main/java/edu/harvard/iq/dataverse/engine/command/CommandContext.java

Lines changed: 48 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import edu.harvard.iq.dataverse.authorization.AuthenticationServiceBean;
2626
import edu.harvard.iq.dataverse.authorization.groups.impl.explicit.ExplicitGroupServiceBean;
2727
import edu.harvard.iq.dataverse.engine.DataverseEngine;
28+
import edu.harvard.iq.dataverse.ingest.IngestServiceBean;
2829
import edu.harvard.iq.dataverse.privateurl.PrivateUrlServiceBean;
2930
import edu.harvard.iq.dataverse.search.SolrIndexServiceBean;
3031
import edu.harvard.iq.dataverse.search.savedsearch.SavedSearchServiceBean;
@@ -39,70 +40,72 @@
3940
* @author michael
4041
*/
4142
public interface CommandContext {
42-
43+
4344
/**
44-
* Note: While this method is not deprecated *yet*, please consider not using it,
45-
* and using a method on the service bean instead. Using the em directly makes
46-
* the command less testable.
47-
*
45+
* Note: While this method is not deprecated *yet*, please consider not
46+
* using it, and using a method on the service bean instead. Using the em
47+
* directly makes the command less testable.
48+
*
4849
* @return the entity manager
4950
*/
50-
public EntityManager em();
51-
52-
public DataverseEngine engine();
53-
54-
public DvObjectServiceBean dvObjects();
55-
56-
public DatasetServiceBean datasets();
57-
58-
public DataverseServiceBean dataverses();
59-
60-
public DataverseRoleServiceBean roles();
61-
62-
public BuiltinUserServiceBean builtinUsers();
63-
64-
public IndexServiceBean index();
51+
public EntityManager em();
52+
53+
public DataverseEngine engine();
54+
55+
public DvObjectServiceBean dvObjects();
56+
57+
public DatasetServiceBean datasets();
58+
59+
public DataverseServiceBean dataverses();
60+
61+
public DataverseRoleServiceBean roles();
62+
63+
public BuiltinUserServiceBean builtinUsers();
64+
65+
public IndexServiceBean index();
6566

6667
public SolrIndexServiceBean solrIndex();
67-
68-
public SearchServiceBean search();
69-
70-
public PermissionServiceBean permissions();
68+
69+
public SearchServiceBean search();
7170

71+
public IngestServiceBean ingest();
72+
73+
public PermissionServiceBean permissions();
74+
7275
public RoleAssigneeServiceBean roleAssignees();
73-
74-
public DataverseFacetServiceBean facets();
75-
76-
public FeaturedDataverseServiceBean featuredDataverses();
77-
78-
public DataFileServiceBean files();
79-
76+
77+
public DataverseFacetServiceBean facets();
78+
79+
public FeaturedDataverseServiceBean featuredDataverses();
80+
81+
public DataFileServiceBean files();
82+
8083
public TemplateServiceBean templates();
81-
84+
8285
public SavedSearchServiceBean savedSearches();
83-
86+
8487
public DataverseFieldTypeInputLevelServiceBean fieldTypeInputLevels();
85-
88+
8689
public DOIEZIdServiceBean doiEZId();
87-
90+
8891
public DOIDataCiteServiceBean doiDataCite();
89-
92+
9093
public HandlenetServiceBean handleNet();
91-
94+
9295
public GuestbookServiceBean guestbooks();
93-
96+
9497
public GuestbookResponseServiceBean responses();
95-
98+
9699
public DataverseLinkingServiceBean dvLinking();
97-
100+
98101
public DatasetLinkingServiceBean dsLinking();
99-
100-
public SettingsServiceBean settings();
101-
102+
103+
public SettingsServiceBean settings();
104+
102105
public ExplicitGroupServiceBean explicitGroups();
103-
106+
104107
public UserNotificationServiceBean notifications();
105-
108+
106109
public AuthenticationServiceBean authentication();
107110

108111
public SystemConfig systemConfig();

src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDatasetCommand.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,13 +137,23 @@ public Dataset save(CommandContext ctxt) throws CommandException {
137137
}
138138

139139
// Remove / delete any files that were removed
140+
141+
// If any of the files that we are deleting has a UNF, we will need to
142+
// re-calculate the UNF of the version - since that is the product
143+
// of the UNFs of the individual files.
144+
boolean recalculateUNF = false;
145+
140146
for (FileMetadata fmd : filesToDelete) {
141147
// check if this file is being used as the default thumbnail
142148
if (fmd.getDataFile().equals(theDataset.getThumbnailFile())) {
143149
logger.info("deleting the dataset thumbnail designation");
144150
theDataset.setThumbnailFile(null);
145151
}
146152

153+
if (fmd.getDataFile().getUnf() != null) {
154+
recalculateUNF = true;
155+
}
156+
147157
if (!fmd.getDataFile().isReleased()) {
148158
// if file is draft (ie. new to this version, delete; otherwise just remove filemetadata object)
149159
ctxt.engine().submit(new DeleteDataFileCommand(fmd.getDataFile(), getRequest()));
@@ -163,6 +173,10 @@ public Dataset save(CommandContext ctxt) throws CommandException {
163173
}
164174
}
165175

176+
if (recalculateUNF) {
177+
ctxt.ingest().recalculateDatasetVersionUNF(theDataset.getEditVersion());
178+
}
179+
166180
String nonNullDefaultIfKeyNotFound = "";
167181
String doiProvider = ctxt.settings().getValueForKey(SettingsServiceBean.Key.DoiProvider, nonNullDefaultIfKeyNotFound);
168182

src/main/java/edu/harvard/iq/dataverse/ingest/IngestServiceBean.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1344,6 +1344,12 @@ public void recalculateDatasetVersionUNF(DatasetVersion version) {
13441344
version.setUNF(datasetUnfValue);
13451345
logger.fine("Recalculated the UNF for the dataset version id="+version.getId()+", new signature: "+datasetUnfValue);
13461346
}
1347+
} else {
1348+
// Of course if no files in the version have UNFs, we need to make sure
1349+
// that the version has the NULL UNF too.
1350+
// Otherwise, the version will still have a UNF if the user deletes
1351+
// all the tabular files from the version!
1352+
version.setUNF(null);
13471353
}
13481354
}
13491355

src/test/java/edu/harvard/iq/dataverse/engine/TestCommandContext.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import edu.harvard.iq.dataverse.authorization.AuthenticationServiceBean;
66
import edu.harvard.iq.dataverse.authorization.groups.impl.explicit.ExplicitGroupServiceBean;
77
import edu.harvard.iq.dataverse.engine.command.CommandContext;
8+
import edu.harvard.iq.dataverse.ingest.IngestServiceBean;
89
import edu.harvard.iq.dataverse.privateurl.PrivateUrlServiceBean;
910
import edu.harvard.iq.dataverse.search.IndexServiceBean;
1011
import edu.harvard.iq.dataverse.search.SearchServiceBean;
@@ -57,6 +58,11 @@ public SearchServiceBean search() {
5758
return null;
5859
}
5960

61+
@Override
62+
public IngestServiceBean ingest() {
63+
return null;
64+
}
65+
6066
@Override
6167
public PermissionServiceBean permissions() {
6268
return null;

0 commit comments

Comments
 (0)