• 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/AbstractCreateDatasetCommand.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.DatasetVersion;
6
import edu.harvard.iq.dataverse.authorization.Permission;
7
import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
8
import edu.harvard.iq.dataverse.dataaccess.DataAccess;
9
import edu.harvard.iq.dataverse.engine.command.CommandContext;
10
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
11
import edu.harvard.iq.dataverse.engine.command.RequiredPermissions;
12
import edu.harvard.iq.dataverse.engine.command.exception.CommandException;
13
import edu.harvard.iq.dataverse.pidproviders.PidProvider;
14
import static edu.harvard.iq.dataverse.util.StringUtil.isEmpty;
15
import java.util.Objects;
16
import java.util.logging.Logger;
17

18
/**;
19
 * An abstract base class for commands that creates {@link Dataset}s.
20
 *
21
 * @author michael
22
 */
23
@RequiredPermissions(Permission.AddDataset)
24
public abstract class AbstractCreateDatasetCommand extends AbstractDatasetCommand<Dataset> {
25
    
26
    private static final Logger logger = Logger.getLogger(AbstractCreateDatasetCommand.class.getCanonicalName());
×
27
    
28
    final protected boolean harvested;
29
    final protected boolean validate;
30
    
31
    public AbstractCreateDatasetCommand(Dataset theDataset, DataverseRequest aRequest) {
32
        this(theDataset, aRequest, false);
×
33
    }
×
34

35
    public AbstractCreateDatasetCommand(Dataset theDataset, DataverseRequest aRequest, boolean isHarvested) {
36
        super(aRequest, theDataset);
×
37
        harvested=isHarvested;
×
38
        this.validate = true;
×
39
    }
×
40

41
    public AbstractCreateDatasetCommand(Dataset theDataset, DataverseRequest aRequest, boolean isHarvested, boolean validate) {
42
        super(aRequest, theDataset);
×
43
        harvested=isHarvested;
×
44
        this.validate = validate;
×
45
    }
×
46
   
47
    protected void additionalParameterTests(CommandContext ctxt) throws CommandException {
48
        // base class - do nothing.
49
    }
×
50
    
51
    protected DatasetVersion getVersionToPersist( Dataset theDataset ) {
52
        return theDataset.getLatestVersion();
×
53
    }
54
    
55
    /**
56
     * Called after the dataset has been persisted, but before the persistence context
57
     * has been flushed. 
58
     * @param theDataset The em-managed dataset.
59
     * @param ctxt 
60
     * @throws edu.harvard.iq.dataverse.engine.command.exception.CommandException 
61
     */
62
    protected void postPersist( Dataset theDataset, CommandContext ctxt ) throws CommandException {
63
        // base class - default to nothing.
64
    }
×
65
    
66

67
    protected void postDBFlush( Dataset theDataset, CommandContext ctxt ) throws CommandException {
68
        // base class - default to nothing.
69
    }
×
70
    
71
    protected abstract void handlePid( Dataset theDataset, CommandContext ctxt ) throws CommandException ;
72
    
73
    @Override
74
    public Dataset execute(CommandContext ctxt) throws CommandException {
75
        
76
        additionalParameterTests(ctxt);
×
77
        
78
        Dataset theDataset = getDataset();
×
79
        PidProvider pidProvider = ctxt.dvObjects().getEffectivePidGenerator(theDataset);
×
80
        
81
        if ( isEmpty(theDataset.getIdentifier()) ) {
×
82
            pidProvider.generatePid(theDataset);
×
83
        }
84
        
85
        DatasetVersion dsv = getVersionToPersist(theDataset);
×
86
        // This re-uses the state setup logic of CreateDatasetVersionCommand, but
87
        // without persisting the new version, or altering its files. 
88
        new CreateDatasetVersionCommand(getRequest(), theDataset, dsv, validate).prepareDatasetAndVersion();
×
89
        
90
        if(!harvested) {
×
91
            checkSystemMetadataKeyIfNeeded(dsv, null);
×
92
        }
93

NEW
94
        registerExternalVocabValuesIfAny(ctxt, dsv);
×
95
        
96
        theDataset.setCreator((AuthenticatedUser) getRequest().getUser());
×
97
        
98
        theDataset.setCreateDate(getTimestamp());
×
99

100
        theDataset.setModificationTime(getTimestamp());
×
101
        for (DataFile dataFile: theDataset.getFiles() ){
×
102
            dataFile.setCreator((AuthenticatedUser) getRequest().getUser());
×
103
            dataFile.setCreateDate(theDataset.getCreateDate());
×
104
        }
×
105
        
106
        if (theDataset.getProtocol()==null) {
×
107
            theDataset.setProtocol(pidProvider.getProtocol());
×
108
        }
109
        if (theDataset.getAuthority()==null) {
×
110
            theDataset.setAuthority(pidProvider.getAuthority());
×
111
        }
112
        if (theDataset.getStorageIdentifier() == null) {
×
113
                String driverId = theDataset.getEffectiveStorageDriverId();
×
114
                theDataset.setStorageIdentifier(driverId  + DataAccess.SEPARATOR + theDataset.getAuthorityForFileStorage() + "/" + theDataset.getIdentifierForFileStorage());
×
115
        }
116
        if (theDataset.getIdentifier()==null) {
×
117
            pidProvider.generatePid(theDataset);
×
118
        }
119
        
120
        // Attempt the registration if importing dataset through the API, or the app (but not harvest)
121
        handlePid(theDataset, ctxt);
×
122
        
123
        ctxt.em().persist(theDataset);
×
124
        
125
        postPersist(theDataset, ctxt);
×
126
        
127
        createDatasetUser(ctxt);
×
128
        
129
        theDataset = ctxt.em().merge(theDataset); // store last updates
×
130
        
131
        // DB updates - done.
132
        
133
        // Now we need the acutal dataset id, so we can start indexing.
134
        ctxt.em().flush();
×
135
        
136
        //Use for code that requires database ids
137
        postDBFlush(theDataset, ctxt);
×
138
        
139
        ctxt.index().asyncIndexDataset(theDataset, true);
×
140
                 
141
        return theDataset;
×
142
    }
143

144
    @Override
145
    public int hashCode() {
146
        return 97 + Objects.hashCode(getDataset());
×
147
    }
148

149
    @Override
150
    public boolean equals(Object obj) {
151
        if (obj == null) {
×
152
            return false;
×
153
        }
154
        if (!(obj instanceof AbstractCreateDatasetCommand)) {
×
155
            return false;
×
156
        }
157
        final AbstractCreateDatasetCommand other = (AbstractCreateDatasetCommand) obj;
×
158
        return Objects.equals(getDataset(), other.getDataset());
×
159
    }
160

161
    @Override
162
    public String toString() {
163
        return "[DatasetCreate dataset:" + getDataset().getId() + "]";
×
164
    }
165

166
}
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