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

IQSS / dataverse / #22693

03 Jul 2024 01:09PM CUT coverage: 20.626% (-0.09%) from 20.716%
#22693

push

github

web-flow
Merge pull request #10664 from IQSS/develop

merge develop into master for 6.3

195 of 1852 new or added lines in 82 files covered. (10.53%)

72 existing lines in 33 files now uncovered.

17335 of 84043 relevant lines covered (20.63%)

0.21 hits per line

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

0.0
/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDvObjectPIDMetadataCommand.java
1
package edu.harvard.iq.dataverse.engine.command.impl;
2

3
import edu.harvard.iq.dataverse.DataFile;
4
import edu.harvard.iq.dataverse.Dataset;
5
import edu.harvard.iq.dataverse.authorization.Permission;
6
import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
7
import edu.harvard.iq.dataverse.engine.command.AbstractVoidCommand;
8
import edu.harvard.iq.dataverse.engine.command.CommandContext;
9
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
10
import edu.harvard.iq.dataverse.engine.command.RequiredPermissions;
11
import edu.harvard.iq.dataverse.engine.command.exception.CommandException;
12
import edu.harvard.iq.dataverse.engine.command.exception.PermissionException;
13
import edu.harvard.iq.dataverse.pidproviders.PidProvider;
14
import edu.harvard.iq.dataverse.pidproviders.PidUtil;
15
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
16
import edu.harvard.iq.dataverse.util.BundleUtil;
17
import java.sql.Timestamp;
18
import java.util.Collections;
19
import java.util.Date;
20

21
/**
22
 *
23
 * @author skraffmi
24
 * No required permissions because we are enforcing super user status in the execute
25
 */
26
@RequiredPermissions({})
27
public class UpdateDvObjectPIDMetadataCommand extends AbstractVoidCommand {
28

29
    private final Dataset target;
30

31
    public UpdateDvObjectPIDMetadataCommand(Dataset target, DataverseRequest aRequest) {
32
        super(aRequest, target);
×
33
        this.target = target;
×
34
    }
×
35

36
    @Override
37
    protected void executeImpl(CommandContext ctxt) throws CommandException {
38

39

40
        if (!(getUser() instanceof AuthenticatedUser) || !getUser().isSuperuser()) {
×
41
            throw new PermissionException(BundleUtil.getStringFromBundle("datasets.api.updatePIDMetadata.auth.mustBeSuperUser"),
×
42
                    this, Collections.singleton(Permission.EditDataset), target);
×
43
        }
44
        if (!this.target.isReleased()){
×
45
            //This is for the bulk update version of the api.
46
            //We don't want to modify drafts, but we want it to keep going
47
            //the single dataset update api checks for drafts before calling the command
48
            return;
×
49
        }
50
        PidProvider pidProvider = PidUtil.getPidProvider(target.getGlobalId().getProviderId());
×
51
        
52
        try {
NEW
53
            Boolean doiRetString = pidProvider.updateIdentifier(target);
×
54
            if (doiRetString) {
×
55
                target.setGlobalIdCreateTime(new Timestamp(new Date().getTime()));
×
56
                ctxt.em().merge(target);
×
57
                ctxt.em().flush();
×
58
                // When updating, we want to traverse through files even if the dataset itself
59
                // didn't need updating.
60
                boolean isFilePIDsEnabled = ctxt.systemConfig().isFilePIDsEnabledForCollection(target.getOwner());
×
61
                // We will skip trying to update the global identifiers for datafiles if they
62
                // aren't being used.
63
                // If they are, we need to assure that there's an existing PID or, as when
64
                // creating PIDs, that it's possible.
65
                
66
                boolean canCreatePidsForFiles = 
×
67
                                isFilePIDsEnabled && ctxt.dvObjects().getEffectivePidGenerator(target).canCreatePidsLike(target.getGlobalId());
×
68
                
69
                for (DataFile df : target.getFiles()) {
×
70
                    if (isFilePIDsEnabled && // using file PIDs and
×
71
                            (!(df.getIdentifier() == null || df.getIdentifier().isEmpty()) || // identifier exists, or
×
72
                                     canCreatePidsForFiles) // we can create PIDs for files
73
                    ) {
NEW
74
                        doiRetString = pidProvider.updateIdentifier(df);
×
75
                        if (doiRetString) {
×
76
                            df.setGlobalIdCreateTime(new Timestamp(new Date().getTime()));
×
77
                            ctxt.em().merge(df);
×
78
                            ctxt.em().flush();
×
79
                        }
80
                    }
81
                }
×
82
            } else {
83
                //do nothing - we'll know it failed because the global id create time won't have been updated.
84
            }
85
        } catch (Exception e) {
×
86
            //do nothing - item and the problem has been logged
87
        }
×
88
    }
×
89

90
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc