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

CeON / dataverse / 1363

13 May 2024 08:49AM UTC coverage: 25.179% (-0.004%) from 25.183%
1363

push

jenkins

web-flow
Closes #2468: Clean-up empty working directories during clear step (#2471)

1 of 15 new or added lines in 2 files covered. (6.67%)

165 existing lines in 5 files now uncovered.

17523 of 69594 relevant lines covered (25.18%)

0.25 hits per line

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

50.0
/dataverse-webapp/src/main/java/edu/harvard/iq/dataverse/DataverseHeaderFragment.java
1
package edu.harvard.iq.dataverse;
2

3
import edu.harvard.iq.dataverse.common.BundleUtil;
4
import edu.harvard.iq.dataverse.mail.confirmemail.ConfirmEmailServiceBean;
5
import edu.harvard.iq.dataverse.persistence.DvObject;
6
import edu.harvard.iq.dataverse.persistence.datafile.DataFile;
7
import edu.harvard.iq.dataverse.persistence.datafile.FileMetadata;
8
import edu.harvard.iq.dataverse.persistence.dataset.Dataset;
9
import edu.harvard.iq.dataverse.persistence.dataverse.Dataverse;
10
import edu.harvard.iq.dataverse.persistence.user.AuthenticatedUser;
11
import edu.harvard.iq.dataverse.persistence.user.User;
12
import edu.harvard.iq.dataverse.persistence.user.UserNotificationRepository;
13
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
14
import edu.harvard.iq.dataverse.settings.SettingsServiceBean.Key;
15
import edu.harvard.iq.dataverse.users.SamlSessionRegistry;
16
import edu.harvard.iq.dataverse.util.SystemConfig;
17
import org.apache.commons.lang.StringUtils;
18
import org.omnifaces.cdi.ViewScoped;
19

20
import javax.inject.Inject;
21
import javax.inject.Named;
22
import java.io.Serializable;
23
import java.io.UnsupportedEncodingException;
24
import java.net.URLDecoder;
25
import java.util.ArrayList;
26
import java.util.List;
27
import java.util.function.Function;
28
import java.util.logging.Level;
29
import java.util.logging.Logger;
30

31
/**
32
 * @author gdurand
33
 */
34
@ViewScoped
35
@Named
36
public class DataverseHeaderFragment implements Serializable {
37

38
    private static final Logger logger = Logger.getLogger(DataverseHeaderFragment.class.getName());
1✔
39

40
    private DataverseDao dataverseDao;
41
    private SettingsServiceBean settingsService;
42
    private SystemConfig systemConfig;
43
    private DataFileServiceBean datafileService;
44
    private DataverseSession dataverseSession;
45
    private NavigationWrapper navigationWrapper;
46
    private UserNotificationRepository userNotificationRepository;
47
    private ConfirmEmailServiceBean confirmEmailService;
48
    private WidgetWrapper widgetWrapper;
49
    private SamlSessionRegistry samlSessionRegistry;
50

51
    private List<Breadcrumb> breadcrumbs = new ArrayList<>();
1✔
52

53
    private Long unreadNotificationCount;
54

55
    // -------------------- CONSTRUCTORS --------------------
56

57
    @Deprecated
58
    public DataverseHeaderFragment() { }
×
59

60
    @Inject
61
    public DataverseHeaderFragment(DataverseDao dataverseDao, SettingsServiceBean settingsService,
62
                                   SystemConfig systemConfig, DataFileServiceBean datafileService,
63
                                   DataverseSession dataverseSession, NavigationWrapper navigationWrapper,
64
                                   UserNotificationRepository userNotificationRepository, ConfirmEmailServiceBean confirmEmailService,
65
                                   WidgetWrapper widgetWrapper, SamlSessionRegistry samlSessionRegistry) {
1✔
66
        this.dataverseDao = dataverseDao;
1✔
67
        this.settingsService = settingsService;
1✔
68
        this.systemConfig = systemConfig;
1✔
69
        this.datafileService = datafileService;
1✔
70
        this.dataverseSession = dataverseSession;
1✔
71
        this.navigationWrapper = navigationWrapper;
1✔
72
        this.userNotificationRepository = userNotificationRepository;
1✔
73
        this.confirmEmailService = confirmEmailService;
1✔
74
        this.widgetWrapper = widgetWrapper;
1✔
75
        this.samlSessionRegistry = samlSessionRegistry;
1✔
76
    }
1✔
77

78
    // -------------------- GETTERS --------------------
79

80
    public List<Breadcrumb> getBreadcrumbs() {
81
        return breadcrumbs;
1✔
82
    }
83

84
    // -------------------- LOGIC --------------------
85

86
    public void initBreadcrumbs(DvObject dvObject) {
87
        if (dvObject == null) {
1✔
88
            return;
×
89
        }
90
        if (dvObject.getId() != null) {
1✔
91
            initBreadcrumbs(dvObject, null);
1✔
92
        } else {
93
            initBreadcrumbs(dvObject.getOwner(), dvObject instanceof Dataverse ? BundleUtil.getStringFromBundleWithLocale("newDataverse", dataverseSession.getLocale()) :
×
94
                    dvObject instanceof Dataset ? BundleUtil.getStringFromBundleWithLocale("newDataset", dataverseSession.getLocale()) : null);
×
95
        }
96
    }
1✔
97

98
    public void initBreadcrumbsForFileMetadata(FileMetadata fmd) {
99

100
        initBreadcrumbsForFileMetadata(fmd, null);
1✔
101
    }
1✔
102

103
    public void initBreadcrumbsForDataFile(DataFile datafile, String subPage) {
104
        Dataset dataset = datafile.getOwner();
×
105
        Long getDatasetVersionID = dataset.getLatestVersion().getId();
×
106
        FileMetadata fmd = datafileService.findFileMetadataByDatasetVersionIdAndDataFileId(getDatasetVersionID, datafile.getId());
×
107

108
        initBreadcrumbsForFileMetadata(fmd, subPage);
×
109
    }
×
110

111
    public boolean shouldShowUnconfirmedMailInfoBanner() {
112
        return confirmEmailService.hasEffectivelyUnconfirmedMail(dataverseSession.getUser());
×
113
    }
114

115
    public boolean shouldShowAddDatasetButton() {
116
        return !systemConfig.isReadonlyMode() &&
×
117
                (!dataverseSession.getUser().isAuthenticated() || !confirmEmailService.hasEffectivelyUnconfirmedMail(dataverseSession.getUser()));
×
118
    }
119

120
    public boolean shouldShowLoginRedirect() {
UNCOV
121
        return !dataverseSession.getUser().isAuthenticated();
×
122
    }
123

124
    public void initBreadcrumbsForFileMetadata(FileMetadata fmd, String subPage) {
125
        if (fmd == null) {
1✔
UNCOV
126
            return;
×
127
        }
128

129
        breadcrumbs.clear();
1✔
130

131
        String optionalUrlExtension = "&version=" + fmd.getDatasetVersion().getSemanticVersion();
1✔
132
        //First Add regular breadcrumb for the data file
133
        DataFile datafile = fmd.getDataFile();
1✔
134
        breadcrumbs.add(0, buildBreadcrumbForDatafile(datafile, optionalUrlExtension));
1✔
135

136
        //Get the Dataset Owning the Datafile and add version to the breadcrumb
137
        Dataset dataset = datafile.getOwner();
1✔
138

139
        breadcrumbs.add(0, buildBreadcrumbForDataset(dataset, optionalUrlExtension));
1✔
140

141
        // now get Dataverse Owner of the dataset and proceed as usual
142
        Dataverse dataverse = dataset.getOwner();
1✔
143
        while (dataverse != null) {
1✔
144
            breadcrumbs.add(0, buildBreadcrumbForDataverse(dataverse));
1✔
145
            dataverse = dataverse.getOwner();
1✔
146
        }
147

148
        if (subPage != null) {
1✔
UNCOV
149
            breadcrumbs.add(new Breadcrumb(subPage));
×
150
        }
151

152
    }
1✔
153

154
    public Long getUnreadNotificationCount() {
155

UNCOV
156
        if (unreadNotificationCount != null) {
×
157
            return unreadNotificationCount;
×
158
        }
159

160
        User user = dataverseSession.getUser();
×
161
        if (user.isAuthenticated()) {
×
162
            AuthenticatedUser aUser = (AuthenticatedUser) user;
×
UNCOV
163
            unreadNotificationCount = userNotificationRepository.getUnreadNotificationCountByUser(aUser.getId());
×
164
        } else {
×
UNCOV
165
            unreadNotificationCount = 0L;
×
166
        }
UNCOV
167
        return this.unreadNotificationCount;
×
168
    }
169

170
    public void initBreadcrumbs(DvObject dvObject, String subPage) {
171
        breadcrumbs.clear();
1✔
172
        while (dvObject != null) {
1✔
173
            breadcrumbs.add(0, buildBreadcrumbForDvObject(dvObject));
1✔
174
            dvObject = dvObject.getOwner();
1✔
175
        }
176

177
        if (subPage != null) {
1✔
UNCOV
178
            breadcrumbs.add(new Breadcrumb(subPage));
×
179
        }
180
    }
1✔
181

182
    public String logout() {
UNCOV
183
        samlSessionRegistry.unregister(dataverseSession);
×
184
        dataverseSession.setUser(null);
×
UNCOV
185
        dataverseSession.setStatusDismissed(false);
×
186

187
        String redirectPage = navigationWrapper.getPageFromContext();
×
188
        try {
189
            redirectPage = URLDecoder.decode(redirectPage, "UTF-8");
×
190
        } catch (UnsupportedEncodingException ex) {
×
UNCOV
191
            Logger.getLogger(LoginPage.class.getName()).log(Level.SEVERE, null, ex);
×
192
            redirectPage = redirectToRoot();
×
193
        }
×
194

UNCOV
195
        if (StringUtils.isEmpty(redirectPage)) {
×
196
            redirectPage = redirectToRoot();
×
197
        }
198

UNCOV
199
        logger.log(Level.INFO, "Sending user to = " + redirectPage);
×
UNCOV
200
        return redirectPage + (!redirectPage.contains("?") ? "?" : "&") + "faces-redirect=true";
×
201
    }
202

203
    public boolean isSignupAllowed() {
UNCOV
204
        return systemConfig.isSignupAllowed();
×
205
    }
206

207
    public boolean isRootDataverseThemeDisabled(Dataverse dataverse) {
208
        if (dataverse == null) {
×
UNCOV
209
            return false;
×
210
        }
UNCOV
211
        if (dataverse.getOwner() == null) {
×
212
            // We're operating on the root dataverse.
UNCOV
213
            return settingsService.isTrueForKey(Key.DisableRootDataverseTheme);
×
214
        } else {
UNCOV
215
            return false;
×
216
        }
217
    }
218

219
    public String getSignupUrl(String loginRedirect) {
UNCOV
220
        String signUpUrl = settingsService.getValueForKey(Key.SignUpUrl);
×
UNCOV
221
        return signUpUrl + (!signUpUrl.contains("?") ? loginRedirect : loginRedirect.replace("?", "&"));
×
222
    }
223

224
    public String getLoginRedirectPage() {
UNCOV
225
        System.out.println("DEPRECATED call to getLoginRedirectPage method in DataverseHeaderfragment: " + navigationWrapper.getRedirectPage());
×
UNCOV
226
        return navigationWrapper.getRedirectPage();
×
227
    }
228

229
    public void addBreadcrumb(String url, String linkString) {
UNCOV
230
        breadcrumbs.add(new Breadcrumb(url, linkString));
×
231
    }
×
232

233
    public void addBreadcrumb(String text) {
UNCOV
234
        breadcrumbs.add(new Breadcrumb(text));
×
UNCOV
235
    }
×
236

237
    // -------------------- PRIVATE --------------------
238

239
    private Breadcrumb buildBreadcrumbForDvObject(DvObject dvObject) {
240
        if (dvObject.isInstanceofDataverse()) {
1✔
241
            return buildBreadcrumbForDataverse((Dataverse) dvObject);
1✔
242
        } else if (dvObject.isInstanceofDataset()) {
1✔
243
            return buildBreadcrumbForDataset((Dataset) dvObject, null);
1✔
244
        } else if (dvObject.isInstanceofDataFile()) {
1✔
245
            return buildBreadcrumbForDatafile((DataFile) dvObject, null);
1✔
246
        }
UNCOV
247
        throw new IllegalArgumentException("Unknown dvObject type: " + dvObject.getClass().getName());
×
248
    }
249

250
    private <T extends DvObject> Breadcrumb buildBreadcrumb(T dvObject, String optionalUrlExtension,
251
                                                            Function<T, String> urlCreator) {
252
        String url = urlCreator.apply(dvObject) + (optionalUrlExtension == null ? "" : optionalUrlExtension);
1✔
253
        if (widgetWrapper.isWidgetTarget(dvObject)) {
1✔
UNCOV
254
            url = widgetWrapper.wrapURL(url);
×
255
        }
256
        boolean openInNewTab = widgetWrapper.isWidgetView() && !widgetWrapper.isWidgetTarget(dvObject);
1✔
257
        return new Breadcrumb(url, dvObject.getDisplayName(), openInNewTab);
1✔
258
    }
259

260
    private Breadcrumb buildBreadcrumbForDataverse(Dataverse dataverse) {
261
        return buildBreadcrumb(dataverse, null, d -> "/dataverse/" + d.getAlias());
1✔
262
    }
263

264
    private Breadcrumb buildBreadcrumbForDataset(Dataset dataset, String optionalUrlExtension) {
265
        return buildBreadcrumb(dataset, optionalUrlExtension, d -> "/dataset.xhtml?persistentId=" + d.getGlobalIdString());
1✔
266
    }
267

268
    private Breadcrumb buildBreadcrumbForDatafile(DataFile datafile, String optionalUrlExtension) {
269
        return buildBreadcrumb(datafile, optionalUrlExtension, d -> "/file.xhtml?fileId=" + d.getId());
1✔
270
    }
271

272
    private String redirectToRoot() {
UNCOV
273
        return "dataverse.xhtml?alias=" + dataverseDao.findRootDataverse().getAlias();
×
274
    }
275

276

277
    // -------------------- INNER CLASSES --------------------
278

279
    public static class Breadcrumb implements Serializable {
280

281
        private final String breadcrumbText;
282
        private final String url;
283
        private final boolean openUrlInNewTab;
284

285
        public Breadcrumb(String url, String breadcrumbText, boolean openUrlInNewTab) {
1✔
286
            this.url = url;
1✔
287
            this.breadcrumbText = breadcrumbText;
1✔
288
            this.openUrlInNewTab = openUrlInNewTab;
1✔
289
        }
1✔
290

291
        public Breadcrumb(String url, String breadcrumbText) {
UNCOV
292
            this(url, breadcrumbText, false);
×
293
        }
×
294

295
        public Breadcrumb(String breadcrumbText) {
UNCOV
296
            this(null, breadcrumbText, false);
×
UNCOV
297
        }
×
298

299
        public String getBreadcrumbText() {
300
            return breadcrumbText;
1✔
301
        }
302

303
        public String getUrl() {
304
            return url;
1✔
305
        }
306

307
        public boolean isOpenUrlInNewTab() {
UNCOV
308
            return openUrlInNewTab;
×
309
        }
310
    }
311
}
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