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

CeON / dataverse / 1371

28 Jun 2024 05:54AM UTC coverage: 25.453% (-0.05%) from 25.503%
1371

push

jenkins

web-flow
Closes #2474: Store the entity id in saml session once user logs in with the identity provider (#2486)

49 of 54 new or added lines in 4 files covered. (90.74%)

860 existing lines in 14 files now uncovered.

17805 of 69953 relevant lines covered (25.45%)

0.25 hits per line

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

0.0
/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/feedback/FeedbackUtil.java
1
package edu.harvard.iq.dataverse.feedback;
2

3
import com.google.common.collect.Lists;
4
import edu.harvard.iq.dataverse.common.BundleUtil;
5
import edu.harvard.iq.dataverse.persistence.DvObject;
6
import edu.harvard.iq.dataverse.persistence.datafile.DataFile;
7
import edu.harvard.iq.dataverse.persistence.dataset.Dataset;
8
import edu.harvard.iq.dataverse.persistence.dataverse.Dataverse;
9

10
import java.util.Collections;
11
import java.util.List;
12
import java.util.logging.Logger;
13
import java.util.stream.Collectors;
14

UNCOV
15
public class FeedbackUtil {
×
16

UNCOV
17
    private static final Logger logger = Logger.getLogger(FeedbackUtil.class.getCanonicalName());
×
18

UNCOV
19
    private static final String NO_DATASET_CONTACT_INTRO = BundleUtil.getStringFromBundle("contact.context.dataset.noContact");
×
20

21
    public static <T extends DvObject> List<Feedback> gatherFeedback(FeedbackInfo<T> feedbackInfo) {
22
        if (feedbackInfo.getFeedbackTarget() == null) {
×
UNCOV
23
            return Lists.newArrayList(getFeedbackToRepoSupport(feedbackInfo));
×
24
        }
25

26
        feedbackInfo.withMessageSubject(BundleUtil.getStringFromBundle("contact.context.subject.dvobject", feedbackInfo.getInstallationBrandName(), feedbackInfo.getMessageSubject()));
×
27

28
        if (feedbackInfo.getFeedbackTarget().isInstanceofDataverse()) {
×
UNCOV
29
            return getFeedbacksToDataverse((FeedbackInfo<Dataverse>) feedbackInfo);
×
30
        } else if (feedbackInfo.getFeedbackTarget().isInstanceofDataset()) {
×
31
            return getFeedbacksToDataset((FeedbackInfo<Dataset>) feedbackInfo);
×
32
        } else {
33
            return getFeedbacksToDataFile((FeedbackInfo<DataFile>) feedbackInfo);
×
34
        }
35
    }
36

37
    private static List<Feedback> getFeedbacksToDataverse(FeedbackInfo<Dataverse> feedbackInfo) {
38
        List<FeedbackContact> dataverseContacts = resolveContactsForDataverse(feedbackInfo);
×
39

40
        String dataverseContextEnding = BundleUtil.getStringFromBundle("contact.context.dataverse.ending",
×
41
                feedbackInfo.getSupportTeamName(),
×
UNCOV
42
                feedbackInfo.getSystemEmail(),
×
43
                feedbackInfo.getDataverseSiteUrl(),
×
44
                feedbackInfo.getFeedbackTarget().getAlias(),
×
45
                feedbackInfo.getSupportTeamName(),
×
46
                feedbackInfo.getSystemEmail());
×
47

48
        if (dataverseContacts.isEmpty()) {
×
49
            String dataverseContextIntroError = BundleUtil.getStringFromBundle("contact.context.dataverse.noContact");
×
50
            return Lists.newArrayList(new Feedback(feedbackInfo.getUserEmail(), feedbackInfo.getSystemEmail(),
×
51
                    feedbackInfo.getMessageSubject(),
×
52
                    dataverseContextIntroError + feedbackInfo.getUserMessage() + dataverseContextEnding));
×
53
        }
54

55
        String placeHolderIfDataverseContactsGetNames = "";
×
56
        String dataverseContextIntro = BundleUtil.getStringFromBundle("contact.context.dataverse.intro",
×
57
                placeHolderIfDataverseContactsGetNames,
UNCOV
58
                feedbackInfo.getUserEmail(),
×
59
                feedbackInfo.getInstallationBrandName(),
×
60
                feedbackInfo.getFeedbackTarget().getAlias());
×
61
        String body = dataverseContextIntro + feedbackInfo.getUserMessage() + dataverseContextEnding;
×
62

63
        return dataverseContacts.stream()
×
64
                .map(dataverseContact ->
×
65
                        new Feedback(feedbackInfo.getUserEmail(), dataverseContact.getEmail(), feedbackInfo.getMessageSubject(), body))
×
66
                .collect(Collectors.toList());
×
67
    }
68

69
    private static List<Feedback> getFeedbacksToDataset(FeedbackInfo<Dataset> feedbackInfo) {
70
        List<FeedbackContact> recipients = resolveContactsForDataset(feedbackInfo);
×
71
        String datasetPid = feedbackInfo.getFeedbackTarget().getGlobalIdString();
×
72

UNCOV
73
        String datasetContextEnding = BundleUtil.getStringFromBundle("contact.context.dataset.ending",
×
74
                feedbackInfo.getSupportTeamName(),
×
75
                feedbackInfo.getSystemEmail(),
×
UNCOV
76
                feedbackInfo.getDataverseSiteUrl(),
×
77
                datasetPid,
UNCOV
78
                feedbackInfo.getSupportTeamName(),
×
79
                feedbackInfo.getSystemEmail());
×
80

81
        if (recipients.isEmpty()) {
×
82
            return Lists.newArrayList(new Feedback(feedbackInfo.getUserEmail(), feedbackInfo.getSystemEmail(), feedbackInfo.getMessageSubject(),
×
83
                    NO_DATASET_CONTACT_INTRO + feedbackInfo.getUserMessage() + datasetContextEnding));
×
84
        }
85

86
        String datasetTitle = feedbackInfo.getFeedbackTarget().getLatestVersion().getParsedTitle();
×
87

88
        return recipients.stream().map(datasetContact -> {
×
89
            String datasetContextIntro = BundleUtil.getStringFromBundle("contact.context.dataset.intro",
×
90
                    getGreeting(datasetContact),
×
91
                    feedbackInfo.getUserEmail(),
×
UNCOV
92
                    feedbackInfo.getInstallationBrandName(),
×
93
                    datasetTitle,
94
                    datasetPid);
UNCOV
95
            String body = datasetContextIntro + feedbackInfo.getUserMessage() + datasetContextEnding;
×
96
            return new Feedback(feedbackInfo.getUserEmail(), datasetContact.getEmail(), feedbackInfo.getMessageSubject(), body);
×
UNCOV
97
        }).collect(Collectors.toList());
×
98
    }
99

100
    private static List<Feedback> getFeedbacksToDataFile(FeedbackInfo<DataFile> feedbackInfo) {
101
        List<FeedbackContact> datasetContacts = resolveContactsForDataFile(feedbackInfo);
×
102

UNCOV
103
        DataFile dataFile = feedbackInfo.getFeedbackTarget();
×
104
        String fileContextEnding = BundleUtil.getStringFromBundle("contact.context.file.ending",
×
UNCOV
105
                feedbackInfo.getSupportTeamName(),
×
UNCOV
106
                feedbackInfo.getSystemEmail(),
×
UNCOV
107
                feedbackInfo.getDataverseSiteUrl(),
×
108
                dataFile.getId().toString(),
×
UNCOV
109
                feedbackInfo.getSupportTeamName(),
×
UNCOV
110
                feedbackInfo.getSystemEmail());
×
111

112
        if (datasetContacts.isEmpty()) {
×
113
            return Lists.newArrayList(new Feedback(feedbackInfo.getUserEmail(), feedbackInfo.getSystemEmail(),
×
114
                    feedbackInfo.getMessageSubject(), NO_DATASET_CONTACT_INTRO + feedbackInfo.getUserMessage() + fileContextEnding));
×
115
        }
116

117
        String filename = dataFile.getFileMetadatas().get(0).getLabel();
×
UNCOV
118
        String datasetTitle = dataFile.getOwner().getLatestVersion().getParsedTitle();
×
UNCOV
119
        String datasetPid = dataFile.getOwner().getGlobalIdString();
×
120

121
        return datasetContacts.stream().map(datasetContact -> {
×
122
            String fileContextIntro = BundleUtil.getStringFromBundle("contact.context.file.intro",
×
123
                    getGreeting(datasetContact),
×
124
                    feedbackInfo.getUserEmail(),
×
125
                    feedbackInfo.getInstallationBrandName(),
×
126
                    filename,
127
                    datasetTitle,
128
                    datasetPid);
129
            String body = fileContextIntro + feedbackInfo.getUserMessage() + fileContextEnding;
×
130

UNCOV
131
            return new Feedback(feedbackInfo.getUserEmail(), datasetContact.getEmail(), feedbackInfo.getMessageSubject(), body);
×
132
        }).collect(Collectors.toList());
×
133
    }
134

135
    private static Feedback getFeedbackToRepoSupport(FeedbackInfo<?> feedbackInfo) {
UNCOV
136
        String noDvObjectContextIntro = BundleUtil.getStringFromBundle("contact.context.support.intro", feedbackInfo.getSupportTeamName(), feedbackInfo.getUserEmail());
×
137
        String noDvObjectContextEnding = BundleUtil.getStringFromBundle("contact.context.support.ending", "");
×
UNCOV
138
        return new Feedback(
×
139
                feedbackInfo.getUserEmail(),
×
140
                feedbackInfo.getSystemEmail(),
×
141
                BundleUtil.getStringFromBundle("contact.context.subject.support", feedbackInfo.getInstallationBrandName(), feedbackInfo.getMessageSubject()),
×
UNCOV
142
                noDvObjectContextIntro + feedbackInfo.getUserMessage() + noDvObjectContextEnding);
×
143
    }
144

145
    public static List<FeedbackContact> resolveContactsForDataverse(FeedbackInfo<Dataverse> feedbackInfo) {
146
        if (feedbackInfo.getRecipient() == null || feedbackInfo.getRecipient() == FeedbackRecipient.DATAVERSE_CONTACT) {
×
UNCOV
147
            return FeedbackContact.fromDataverse(feedbackInfo.getFeedbackTarget());
×
UNCOV
148
        } else if (feedbackInfo.getRecipient() == FeedbackRecipient.SYSTEM_SUPPORT) {
×
UNCOV
149
            return Lists.newArrayList(new FeedbackContact(feedbackInfo.getSystemEmail()));
×
150
        }
151

UNCOV
152
        return Collections.emptyList();
×
153
    }
154

155
    public static List<FeedbackContact> resolveContactsForDataset(FeedbackInfo<Dataset> feedbackInfo) {
UNCOV
156
        if (feedbackInfo.getRecipient() == null || feedbackInfo.getRecipient() == FeedbackRecipient.DATASET_CONTACT) {
×
UNCOV
157
            return FeedbackContact.fromDataset(feedbackInfo.getFeedbackTarget());
×
UNCOV
158
        } else if (feedbackInfo.getRecipient() == FeedbackRecipient.DATAVERSE_CONTACT) {
×
UNCOV
159
            return FeedbackContact.fromDataverse(feedbackInfo.getFeedbackTarget().getOwner());
×
UNCOV
160
        } else if (feedbackInfo.getRecipient() == FeedbackRecipient.SYSTEM_SUPPORT) {
×
161
            return Lists.newArrayList(new FeedbackContact(feedbackInfo.getSystemEmail()));
×
162
        }
163

164
        return Collections.emptyList();
×
165
    }
166

167
    public static List<FeedbackContact> resolveContactsForDataFile(FeedbackInfo<DataFile> feedbackInfo) {
168
        if (feedbackInfo.getRecipient() == null || feedbackInfo.getRecipient() == FeedbackRecipient.DATASET_CONTACT) {
×
169
            return FeedbackContact.fromDataset(feedbackInfo.getFeedbackTarget().getOwner());
×
170
        } else if (feedbackInfo.getRecipient() == FeedbackRecipient.DATAVERSE_CONTACT) {
×
171
            return FeedbackContact.fromDataverse(feedbackInfo.getFeedbackTarget().getOwner().getOwner());
×
172
        } else if (feedbackInfo.getRecipient() == FeedbackRecipient.SYSTEM_SUPPORT) {
×
UNCOV
173
            return Lists.newArrayList(new FeedbackContact(feedbackInfo.getSystemEmail()));
×
174
        }
175

UNCOV
176
        return Collections.emptyList();
×
177
    }
178

179

180
    /**
181
     * When contacts are people we suggest that they be stored as "Simpson,
182
     * Homer" so the idea of this method is that it returns "Homer Simpson", if
183
     * it can.
184
     * <p>
185
     * Contacts don't necessarily have to be people, however. They can be
186
     * organizations. We ran into similar trouble (but for authors) when
187
     * implementing Schema.org JSON-LD support. See getJsonLd on DatasetVersion.
188
     * Some day it might be nice to store whether an author or a contact is a
189
     * person or an organization.
190
     */
191
    private static String getGreeting(FeedbackContact dvObjectContact) {
UNCOV
192
        logger.fine("dvObjectContact: " + dvObjectContact);
×
193
        try {
UNCOV
194
            return dvObjectContact.getName().map(name -> {
×
UNCOV
195
                logger.fine("dvObjectContact name: " + name);
×
UNCOV
196
                String[] lastFirstParts = name.split(",");
×
UNCOV
197
                String last = lastFirstParts[0];
×
UNCOV
198
                String first = lastFirstParts[1];
×
UNCOV
199
                return BundleUtil.getStringFromBundle("contact.context.dataset.greeting.helloFirstLast", first.trim(), last.trim());
×
UNCOV
200
            }).getOrElse(() -> BundleUtil.getStringFromBundle("contact.context.dataset.greeting.organization"));
×
UNCOV
201
        } catch (Exception ex) {
×
UNCOV
202
            logger.warning("problem in getGreeting: " + ex);
×
UNCOV
203
            return BundleUtil.getStringFromBundle("contact.context.dataset.greeting.organization");
×
204
        }
205
    }
206
}
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