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

CeON / dataverse / 984

pending completion
984

push

jenkins

GitHub
Closes #2335: Split keywords buttons (#2342)

106 of 106 new or added lines in 20 files covered. (100.0%)

21096 of 68964 relevant lines covered (30.59%)

0.31 hits per line

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

2.56
/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java
1
package edu.harvard.iq.dataverse.api.datadeposit;
2

3
import edu.harvard.iq.dataverse.DatasetFieldServiceBean;
4
import edu.harvard.iq.dataverse.common.DatasetFieldConstant;
5
import edu.harvard.iq.dataverse.persistence.dataset.ControlledVocabularyValue;
6
import edu.harvard.iq.dataverse.persistence.dataset.DatasetField;
7
import edu.harvard.iq.dataverse.persistence.dataset.DatasetFieldType;
8
import edu.harvard.iq.dataverse.persistence.dataset.DatasetVersion;
9
import edu.harvard.iq.dataverse.persistence.user.AuthenticatedUser;
10
import edu.harvard.iq.dataverse.persistence.user.User;
11

12
import javax.ejb.EJB;
13
import javax.ejb.Stateless;
14
import java.util.List;
15
import java.util.logging.Logger;
16

17
@Stateless
18
public class SwordServiceBean {
×
19

20
    private static final Logger logger = Logger.getLogger(SwordServiceBean.class.getCanonicalName());
1✔
21

22
    @EJB
23
    DatasetFieldServiceBean datasetFieldService;
24

25
    /**
26
     * Mutate the dataset version, adding a datasetContact (email address) from
27
     * the dataverse that will own the dataset.
28
     */
29
    public void addDatasetContact(DatasetVersion newDatasetVersion, User user) {
30
        DatasetFieldType emailDatasetFieldType = datasetFieldService.findByNameOpt(DatasetFieldConstant.datasetContact);
×
31
        DatasetField emailDatasetField = DatasetField.createNewEmptyDatasetField(emailDatasetFieldType, newDatasetVersion);
×
32

33
        for (DatasetField childField : emailDatasetField.getDatasetFieldsChildren()) {
×
34
            if (DatasetFieldConstant.datasetContactEmail.equals(childField.getTypeName())) {
×
35
                // set the value to the  in user's email
36
                childField.setFieldValue(user.getDisplayInfo().getEmailAddress());
×
37
            }
38
            // We don't see any error from EZID but when using DataCite, we were seeing this error: Response code: 400, [xml] xml error: cvc-minLength-valid: Value '' with length = '0' is not facet-valid with respect to minLength '1' for type '#AnonType_contributorNamecontributorcontributorsresource'.
39
            if (DatasetFieldConstant.datasetContactName.equals(childField.getTypeName())) {
×
40
                childField.setFieldValue(user.getDisplayInfo().getTitle());
×
41
            }
42
        }
×
43

44
        newDatasetVersion.getDatasetFields().add(emailDatasetField);
×
45

46
    }
×
47

48
    /**
49
     * Mutate the dataset version, adding a depositor for the dataset.
50
     */
51
    public void addDatasetDepositor(DatasetVersion newDatasetVersion, User user) {
52
        if (!user.isAuthenticated()) {
×
53
            logger.info("returning early since user is not authenticated");
×
54
            return;
×
55
        }
56
        AuthenticatedUser au = (AuthenticatedUser) user;
×
57
        DatasetFieldType depositorDatasetFieldType = datasetFieldService.findByNameOpt(DatasetFieldConstant.depositor);
×
58
        DatasetField depositorDatasetField = DatasetField.createNewEmptyDatasetField(depositorDatasetFieldType, newDatasetVersion);
×
59
        depositorDatasetField.setFieldValue(au.getLastName() + ", " + au.getFirstName());
×
60

61
        newDatasetVersion.getDatasetFields().add(depositorDatasetField);
×
62
    }
×
63

64
    /**
65
     * If no subject exists, mutate the dataset version, adding "N/A" for the
66
     * subject. Otherwise, leave the dataset alone.
67
     */
68
    public void addDatasetSubjectIfMissing(DatasetVersion datasetVersion) {
69
        DatasetFieldType subjectDatasetFieldType = datasetFieldService.findByNameOpt(DatasetFieldConstant.subject);
×
70

71
        boolean subjectFieldExists = false;
×
72
        List<DatasetField> datasetFields = datasetVersion.getDatasetFields();
×
73
        for (DatasetField datasetField : datasetFields) {
×
74
            logger.fine("datasetField: " + datasetField.getDisplayValue() + " ... " + datasetField.getTypeName());
×
75
            if (datasetField.getTypeName().equals(subjectDatasetFieldType.getName())) {
×
76
                subjectFieldExists = true;
×
77
                logger.fine("subject field exists already");
×
78
                break;
×
79
            }
80
        }
×
81

82
        if (subjectFieldExists) {
×
83
            // return early. nothing to do. dataset already has a subject
84
            logger.fine("returning early because subject exists already");
×
85
            return;
×
86
        }
87

88
        // if we made it here, we must not have a subject, so let's add one
89
        DatasetField subjectDatasetField = DatasetField.createNewEmptyDatasetField(subjectDatasetFieldType, datasetVersion);
×
90
        /**
91
         * @todo Once dataverse has subject
92
         * (https://github.com/IQSS/dataverse/issues/769), we should get subject
93
         * from there for now, we'll use the global NA value. However, there is
94
         * currently oddness in that if you go to edit the title of a dataset
95
         * via the GUI you can not save the dataset without selecting a Subject:
96
         * https://github.com/IQSS/dataverse/issues/1296#issuecomment-70146314
97
         */
98
        ControlledVocabularyValue cvv = datasetFieldService.findNAControlledVocabularyValue();
×
99
        subjectDatasetField.setSingleControlledVocabularyValue(cvv);
×
100

101
        datasetVersion.getDatasetFields().add(subjectDatasetField);
×
102
    }
×
103
}
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

© 2026 Coveralls, Inc