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

IQSS / dataverse / #24958

10 Mar 2025 05:32PM CUT coverage: 22.614%. Remained the same
#24958

Pull #11325

github

stevenwinship
extend size of deaccessionlink column
Pull Request #11325: extend size of deaccessionlink column

20033 of 88586 relevant lines covered (22.61%)

0.23 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/api/BatchImport.java
1
package edu.harvard.iq.dataverse.api;
2

3
import edu.harvard.iq.dataverse.api.auth.AuthRequired;
4
import edu.harvard.iq.dataverse.api.imports.ImportServiceBean;
5
import edu.harvard.iq.dataverse.DatasetFieldServiceBean;
6
import edu.harvard.iq.dataverse.DatasetServiceBean;
7
import edu.harvard.iq.dataverse.Dataverse;
8
import edu.harvard.iq.dataverse.DataverseServiceBean;
9
import edu.harvard.iq.dataverse.MetadataBlockServiceBean;
10

11
import edu.harvard.iq.dataverse.api.imports.ImportException;
12
import edu.harvard.iq.dataverse.api.imports.ImportUtil.ImportType;
13
import edu.harvard.iq.dataverse.authorization.users.User;
14
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
15
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
16
import java.io.IOException;
17
import java.io.PrintWriter;
18
import jakarta.ejb.EJB;
19
import jakarta.ejb.Stateless;
20
import jakarta.json.JsonObjectBuilder;
21
import jakarta.ws.rs.GET;
22
import jakarta.ws.rs.POST;
23
import jakarta.ws.rs.Path;
24
import jakarta.ws.rs.QueryParam;
25
import jakarta.ws.rs.container.ContainerRequestContext;
26
import jakarta.ws.rs.core.Context;
27
import jakarta.ws.rs.core.Response;
28

29
@Stateless
30
@Path("batch")
31
public class BatchImport extends AbstractApiBean {
×
32

33
    @EJB
34
    DatasetServiceBean datasetService;
35
    @EJB
36
    DataverseServiceBean dataverseService;
37
    @EJB
38
    DatasetFieldServiceBean datasetfieldService;
39
    @EJB
40
    MetadataBlockServiceBean metadataBlockService;
41
    @EJB
42
    SettingsServiceBean settingsService;
43
    @EJB
44
    ImportServiceBean importService;
45
    @EJB
46
    BatchServiceBean batchService;
47

48
    @GET
49
    @AuthRequired
50
    @Path("harvest")
51
    public Response harvest(@Context ContainerRequestContext crc, @QueryParam("path") String fileDir, @QueryParam("dv") String parentIdtf, @QueryParam("createDV") Boolean createDV, @QueryParam("key") String apiKey) throws IOException {
52
        try {
53
            return startBatchJob(getRequestAuthenticatedUserOrDie(crc), fileDir, parentIdtf, apiKey, ImportType.HARVEST, createDV);
×
54
        } catch (WrappedResponse wr) {
×
55
            return wr.getResponse();
×
56
        }
57
    }
58

59
    /**
60
     * Import a new Dataset with DDI xml data posted in the request
61
     *
62
     * @param body the xml
63
     * @param parentIdtf the dataverse to import into (id or alias)
64
     * @param apiKey user's api key
65
     * @return import status (including id of the dataset created)
66
     */
67
    @POST
68
    @AuthRequired
69
    @Path("import")
70
    public Response postImport(@Context ContainerRequestContext crc, String body, @QueryParam("dv") String parentIdtf, @QueryParam("key") String apiKey) {
71

72
        DataverseRequest dataverseRequest;
73
        try {
74
            dataverseRequest = createDataverseRequest(getRequestAuthenticatedUserOrDie(crc));
×
75
        } catch (WrappedResponse wr) {
×
76
            return wr.getResponse();
×
77
        }
×
78

79
        if (parentIdtf == null) {
×
80
            parentIdtf = "root";
×
81
        }
82
        Dataverse owner = findDataverse(parentIdtf);
×
83
        if (owner == null) {
×
84
            return error(Response.Status.NOT_FOUND, "Can't find dataverse with identifier='" + parentIdtf + "'");
×
85
        }
86
        try {
87
            PrintWriter cleanupLog = null; // Cleanup log isn't needed for ImportType == NEW. We don't do any data cleanup in this mode.
×
88
            String filename = null;  // Since this is a single input from a POST, there is no file that we are reading from.
×
89
            JsonObjectBuilder status = importService.doImport(dataverseRequest, owner, body, filename, ImportType.NEW, cleanupLog);
×
90
            return this.ok(status);
×
91
        } catch (ImportException | IOException e) {
×
92
            return this.error(Response.Status.BAD_REQUEST, e.getMessage());
×
93
        }
94
    }
95

96
    /**
97
     * Import single or multiple datasets that are in the local filesystem
98
     *
99
     * @param fileDir the absolute path of the file or directory (all files
100
     * within the directory will be imported
101
     * @param parentIdtf the dataverse to import into (id or alias)
102
     * @param apiKey user's api key
103
     * @return import status (including id's of the datasets created)
104
     */
105
    @GET
106
    @AuthRequired
107
    @Path("import")
108
    public Response getImport(@Context ContainerRequestContext crc, @QueryParam("path") String fileDir, @QueryParam("dv") String parentIdtf, @QueryParam("createDV") Boolean createDV, @QueryParam("key") String apiKey) {
109
        try {
110
            return startBatchJob(getRequestAuthenticatedUserOrDie(crc), fileDir, parentIdtf, apiKey, ImportType.NEW, createDV);
×
111
        } catch (WrappedResponse wr) {
×
112
            return wr.getResponse();
×
113
        }
114
    }
115

116
    private Response startBatchJob(User user, String fileDir, String parentIdtf, String apiKey, ImportType importType, Boolean createDV) {
117
        if (createDV == null) {
×
118
            createDV = Boolean.FALSE;
×
119
        }
120
        try {
121
            DataverseRequest dataverseRequest;
122
            dataverseRequest = createDataverseRequest(user);
×
123
            if (parentIdtf == null) {
×
124
                parentIdtf = "root";
×
125
            }
126
            Dataverse owner = findDataverse(parentIdtf);
×
127
            if (owner == null) {
×
128
                if (createDV) {
×
129
                    owner = importService.createDataverse(parentIdtf, dataverseRequest);
×
130
                } else {
131
                    return error(Response.Status.NOT_FOUND, "Can't find dataverse with identifier='" + parentIdtf + "'");
×
132
                }
133
            }
134
            batchService.processFilePath(fileDir, parentIdtf, dataverseRequest, owner, importType, createDV);
×
135

136
        } catch (ImportException e) {
×
137
            return this.error(Response.Status.BAD_REQUEST, "Import Exception, " + e.getMessage());
×
138
        }
×
139
        return this.accepted();
×
140
    }
141

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