• 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

11.07
/dataverse-persistence/src/main/java/edu/harvard/iq/dataverse/persistence/dataverse/Dataverse.java
1
package edu.harvard.iq.dataverse.persistence.dataverse;
2

3
import edu.harvard.iq.dataverse.common.BundleUtil;
4
import edu.harvard.iq.dataverse.common.MarkupChecker;
5
import edu.harvard.iq.dataverse.persistence.DvObject;
6
import edu.harvard.iq.dataverse.persistence.DvObjectContainer;
7
import edu.harvard.iq.dataverse.persistence.dataset.ControlledVocabularyValue;
8
import edu.harvard.iq.dataverse.persistence.dataset.DatasetFieldType;
9
import edu.harvard.iq.dataverse.persistence.dataset.MetadataBlock;
10
import edu.harvard.iq.dataverse.persistence.dataset.Template;
11
import edu.harvard.iq.dataverse.persistence.dataverse.link.DatasetLinkingDataverse;
12
import edu.harvard.iq.dataverse.persistence.dataverse.link.DataverseLinkingDataverse;
13
import edu.harvard.iq.dataverse.persistence.dataverse.link.SavedSearch;
14
import edu.harvard.iq.dataverse.persistence.guestbook.Guestbook;
15
import edu.harvard.iq.dataverse.persistence.harvest.HarvestingClient;
16
import edu.harvard.iq.dataverse.persistence.user.DataverseRole;
17
import org.hibernate.validator.constraints.NotBlank;
18
import org.hibernate.validator.constraints.NotEmpty;
19

20
import javax.persistence.CascadeType;
21
import javax.persistence.Column;
22
import javax.persistence.Entity;
23
import javax.persistence.EnumType;
24
import javax.persistence.Enumerated;
25
import javax.persistence.FetchType;
26
import javax.persistence.Index;
27
import javax.persistence.JoinColumn;
28
import javax.persistence.JoinTable;
29
import javax.persistence.ManyToMany;
30
import javax.persistence.ManyToOne;
31
import javax.persistence.NamedNativeQueries;
32
import javax.persistence.NamedNativeQuery;
33
import javax.persistence.NamedQueries;
34
import javax.persistence.NamedQuery;
35
import javax.persistence.OneToMany;
36
import javax.persistence.OneToOne;
37
import javax.persistence.OrderBy;
38
import javax.persistence.Table;
39
import javax.persistence.Transient;
40
import javax.validation.constraints.NotNull;
41
import javax.validation.constraints.Pattern;
42
import javax.validation.constraints.Size;
43
import java.util.ArrayList;
44
import java.util.HashSet;
45
import java.util.Iterator;
46
import java.util.List;
47
import java.util.Locale;
48
import java.util.Objects;
49
import java.util.Set;
50

51
/**
52
 * @author gdurand
53
 * @author mbarsinai
54
 */
55
@NamedQueries({
56
        @NamedQuery(name = "Dataverse.ownedObjectsById", query = "SELECT COUNT(obj) FROM DvObject obj WHERE obj.owner.id=:id"),
57
        @NamedQuery(name = "Dataverse.findAll", query = "SELECT d FROM Dataverse d order by d.name"),
58
        @NamedQuery(name = "Dataverse.findRoot", query = "SELECT d FROM Dataverse d where d.owner.id=null"),
59
        @NamedQuery(name = "Dataverse.findByAlias", query = "SELECT dv FROM Dataverse dv WHERE LOWER(dv.alias)=:alias"),
60
        @NamedQuery(name = "Dataverse.findByOwnerId", query = "select object(o) from Dataverse as o where o.owner.id =:ownerId order by o.name"),
61
        @NamedQuery(name = "Dataverse.filterByAlias", query = "SELECT dv FROM Dataverse dv WHERE LOWER(dv.alias) LIKE :alias order by dv.alias"),
62
        @NamedQuery(name = "Dataverse.filterByAliasNameAffiliation", query = "SELECT dv FROM Dataverse dv WHERE (LOWER(dv.alias) LIKE :alias) OR (LOWER(dv.name) LIKE :name) OR (LOWER(dv.affiliation) LIKE :affiliation) order by dv.alias"),
63
        @NamedQuery(name = "Dataverse.filterByAliasName", query = "SELECT dv FROM Dataverse dv WHERE (LOWER(dv.alias) LIKE :alias) OR (LOWER(dv.name) LIKE :name) order by dv.alias")
64
})
65
@NamedNativeQueries({
66
        @NamedNativeQuery(name = "Dataverse.findDataForSolrResults2", query =
67
                "SELECT t0.ID, t0.AFFILIATION, t0.ALIAS, t2.ALIAS " +
68
                "FROM DATAVERSE t0 JOIN DVOBJECT t1 ON t0.ID = t1.ID LEFT JOIN DATAVERSE t2 ON t1.OWNER_ID = t2.ID " +
69
                "WHERE t0.ID IN (?, ?)"),
70
        @NamedNativeQuery(name = "Dataverse.findDataForSolrResults6", query =
71
                "SELECT t0.ID, t0.AFFILIATION, t0.ALIAS, t2.ALIAS " +
72
                "FROM DATAVERSE t0 JOIN DVOBJECT t1 ON t0.ID = t1.ID LEFT JOIN DATAVERSE t2 ON t1.OWNER_ID = t2.ID " +
73
                "WHERE t0.ID IN (?, ?, ?, ?, ?, ?)"),
74
        @NamedNativeQuery(name = "Dataverse.findDataForSolrResults10", query =
75
                "SELECT t0.ID, t0.AFFILIATION, t0.ALIAS, t2.ALIAS " +
76
                "FROM DATAVERSE t0 JOIN DVOBJECT t1 ON t0.ID = t1.ID LEFT JOIN DATAVERSE t2 ON t1.OWNER_ID = t2.ID " +
77
                "WHERE t0.ID IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")
78
})
79
@Entity
80
@Table(indexes = {@Index(columnList = "defaultcontributorrole_id")
81
        , @Index(columnList = "defaulttemplate_id")
82
        , @Index(columnList = "alias")
83
        , @Index(columnList = "affiliation")
84
        , @Index(columnList = "dataversetype")
85
        , @Index(columnList = "facetroot")
86
        , @Index(columnList = "guestbookroot")
87
        , @Index(columnList = "metadatablockroot")
88
        , @Index(columnList = "templateroot")
89
        , @Index(columnList = "permissionroot")
90
        , @Index(columnList = "themeroot")})
91
public class Dataverse extends DvObjectContainer {
1✔
92

93
    public enum DataverseType {
×
94
        RESEARCHERS, RESEARCH_PROJECTS, JOURNALS, ORGANIZATIONS_INSTITUTIONS, TEACHING_COURSES, UNCATEGORIZED, LABORATORY, RESEARCH_GROUP, DEPARTMENT
×
95
    }
96

UNCOV
97
    public enum FeaturedDataversesSorting {
×
UNCOV
98
        BY_HAND, BY_NAME_ASC, BY_NAME_DESC, BY_DATASET_COUNT
×
99
    }
100

101
    private static final long serialVersionUID = 1L;
102

103
    @NotBlank(message = "{dataverse.name}")
104
    @Column(nullable = false)
105
    private String name;
106

107
    /**
108
     * @todo add @Column(nullable = false) for the database to enforce non-null
109
     */
110
    @NotBlank(message = "{dataverse.alias}")
111
    @Column(nullable = false, unique = true)
112
    @Size(max = 100, message = "{dataverse.aliasLength}")
113
    @Pattern.List({@Pattern(regexp = "[a-zA-Z0-9\\_\\-]*", message = "{dataverse.nameIllegalCharacters}"),
114
            @Pattern(regexp = ".*\\D.*", message = "{dataverse.aliasNotnumber}")})
115
    private String alias;
116

117
    @Column(name = "description", columnDefinition = "TEXT")
118
    private String description;
119

120
    @Column(name = "additional_description", columnDefinition = "TEXT")
121
    private String additionalDescription;
122

123
    @Enumerated(EnumType.STRING)
124
    @NotNull(message = "{dataverse.category}")
125
    @Column(nullable = false)
126
    private DataverseType dataverseType;
127

128
    /**
129
     * When {@code true}, users are not granted permissions the got for parent
130
     * dataverses.
131
     */
132
    protected boolean permissionRoot;
133

134

135
    public DataverseType getDataverseType() {
136
        return dataverseType;
×
137
    }
138

139
    public void setDataverseType(DataverseType dataverseType) {
UNCOV
140
        this.dataverseType = dataverseType;
×
UNCOV
141
    }
×
142

143
    @Transient
1✔
144
    private final String uncategorizedString = "Uncategorized";
145

146
    public String getFriendlyCategoryName() {
147
        switch (this.dataverseType) {
×
148
            case RESEARCHERS:
149
                return BundleUtil.getStringFromBundle("dataverse.type.selectTab.researcher");
×
150
            case RESEARCH_PROJECTS:
151
                return BundleUtil.getStringFromBundle("dataverse.type.selectTab.research_project");
×
152
            case JOURNALS:
153
                return BundleUtil.getStringFromBundle("dataverse.type.selectTab.journal");
×
154
            case ORGANIZATIONS_INSTITUTIONS:
155
                return BundleUtil.getStringFromBundle("dataverse.type.selectTab.organization_or_institution");
×
156
            case TEACHING_COURSES:
157
                return BundleUtil.getStringFromBundle("dataverse.type.selectTab.teaching_course");
×
158
            case LABORATORY:
159
                return BundleUtil.getStringFromBundle("dataverse.type.selectTab.laboratory");
×
160
            case RESEARCH_GROUP:
161
                return BundleUtil.getStringFromBundle("dataverse.type.selectTab.research_group");
×
162
            case DEPARTMENT:
163
                return BundleUtil.getStringFromBundle("dataverse.type.selectTab.department");
×
164
            case UNCATEGORIZED:
UNCOV
165
                return uncategorizedString;
×
166
            default:
UNCOV
167
                return "";
×
168
        }
169
    }
170

171
    private String getCategoryNameForIndex() {
172
        switch (this.dataverseType) {
×
173
            case RESEARCHERS:
174
                return BundleUtil.getStringFromBundleWithLocale("dataverse.type.selectTab.researcher", Locale.ENGLISH);
×
175
            case RESEARCH_PROJECTS:
176
                return BundleUtil.getStringFromBundleWithLocale("dataverse.type.selectTab.research_project", Locale.ENGLISH);
×
177
            case JOURNALS:
178
                return BundleUtil.getStringFromBundleWithLocale("dataverse.type.selectTab.journal", Locale.ENGLISH);
×
179
            case ORGANIZATIONS_INSTITUTIONS:
180
                return BundleUtil.getStringFromBundleWithLocale("dataverse.type.selectTab.organization_or_institution", Locale.ENGLISH);
×
181
            case TEACHING_COURSES:
182
                return BundleUtil.getStringFromBundleWithLocale("dataverse.type.selectTab.teaching_course", Locale.ENGLISH);
×
183
            case LABORATORY:
184
                return BundleUtil.getStringFromBundleWithLocale("dataverse.type.selectTab.laboratory", Locale.ENGLISH);
×
185
            case RESEARCH_GROUP:
186
                return BundleUtil.getStringFromBundleWithLocale("dataverse.type.selectTab.research_group", Locale.ENGLISH);
×
187
            case DEPARTMENT:
188
                return BundleUtil.getStringFromBundleWithLocale("dataverse.type.selectTab.department", Locale.ENGLISH);
×
189
            case UNCATEGORIZED:
UNCOV
190
                return BundleUtil.getStringFromBundleWithLocale("dataverse.type.selectTab.uncategorized", Locale.ENGLISH);
×
191
            default:
UNCOV
192
                return "";
×
193
        }
194
    }
195

196
    public String getIndexableCategoryName() {
UNCOV
197
        return getCategoryNameForIndex();
×
198
    }
199

200
    private String affiliation;
201

202
    // Note: We can't have "Remove" here, as there are role assignments that refer
203
    //       to this role. So, adding it would mean violating a forign key contstraint.
204
    @OneToMany(cascade = {CascadeType.MERGE},
205
            fetch = FetchType.LAZY,
206
            mappedBy = "owner")
207
    private Set<DataverseRole> roles;
208

209
    @ManyToOne
210
    @JoinColumn(nullable = true)
211
    private DataverseRole defaultContributorRole;
212

213
    public DataverseRole getDefaultContributorRole() {
214
        return defaultContributorRole;
×
215
    }
216

217
    public void setDefaultContributorRole(DataverseRole defaultContributorRole) {
UNCOV
218
        this.defaultContributorRole = defaultContributorRole;
×
UNCOV
219
    }
×
220

221
    private boolean metadataBlockRoot;
222
    private boolean facetRoot;
223
    // By default, themeRoot should be true, as new dataverses should start with the default theme
224
    private boolean themeRoot = true;
1✔
225
    private boolean templateRoot;
226

227
    private boolean allowMessagesBanners;
228

229
    @Enumerated(EnumType.STRING)
230
    private FeaturedDataversesSorting featuredDataversesSorting;
231

232
    @OneToOne(mappedBy = "dataverse", cascade = {CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST}, orphanRemoval = true)
233
    private DataverseTheme dataverseTheme;
234

235
    @OneToMany(mappedBy = "dataverse", cascade = {CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST}, orphanRemoval = true)
1✔
236
    @OrderBy("displayOrder")
237
    @NotEmpty(message = "At least one contact is required.")
238
    private List<DataverseContact> dataverseContacts = new ArrayList<>();
239

240
    @ManyToMany(cascade = {CascadeType.MERGE})
1✔
241
    private List<MetadataBlock> metadataBlocks = new ArrayList<>();
242

243
    @OneToMany(mappedBy = "dataverse", cascade = {CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST}, orphanRemoval = true)
1✔
244
    @OrderBy("displayOrder")
245
    private List<DataverseFacet> dataverseFacets = new ArrayList<>();
246

247
    @ManyToMany(cascade = {CascadeType.MERGE})
1✔
248
    @JoinTable(name = "dataverse_citationDatasetFieldTypes",
249
            joinColumns = @JoinColumn(name = "dataverse_id"),
250
            inverseJoinColumns = @JoinColumn(name = "citationdatasetfieldtype_id"))
251
    private List<DatasetFieldType> citationDatasetFieldTypes = new ArrayList<>();
252

253
    @ManyToMany
254
    @JoinTable(name = "dataversesubjects",
255
            joinColumns = @JoinColumn(name = "dataverse_id"),
256
            inverseJoinColumns = @JoinColumn(name = "controlledvocabularyvalue_id"))
257
    private Set<ControlledVocabularyValue> dataverseSubjects;
258

259
    @OneToMany(mappedBy = "dataverse", cascade = {CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST})
260
    private List<DataverseFeaturedDataverse> dataverseFeaturedDataverses;
261

262
    public List<DataverseFeaturedDataverse> getDataverseFeaturedDataverses() {
UNCOV
263
        return dataverseFeaturedDataverses;
×
264
    }
265

266
    public void setDataverseFeaturedDataverses(List<DataverseFeaturedDataverse> dataverseFeaturedDataverses) {
267
        this.dataverseFeaturedDataverses = dataverseFeaturedDataverses;
×
UNCOV
268
    }
×
269

270
    @OneToMany(mappedBy = "featuredDataverse", cascade = {CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST})
271
    private List<DataverseFeaturedDataverse> dataverseFeaturingDataverses;
272

273
    public List<DataverseFeaturedDataverse> getDataverseFeaturingDataverses() {
UNCOV
274
        return dataverseFeaturingDataverses;
×
275
    }
276

277
    public void setDataverseFeaturingDataverses(List<DataverseFeaturedDataverse> dataverseFeaturingDataverses) {
278
        this.dataverseFeaturingDataverses = dataverseFeaturingDataverses;
×
UNCOV
279
    }
×
280

281
    @OneToMany(mappedBy = "dataverse", cascade = {CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST})
282
    private List<DataverseLinkingDataverse> dataverseLinkingDataverses;
283

284
    public List<DataverseLinkingDataverse> getDataverseLinkingDataverses() {
UNCOV
285
        return dataverseLinkingDataverses;
×
286
    }
287

288
    public void setDataverseLinkingDataverses(List<DataverseLinkingDataverse> dataverseLinkingDataverses) {
289
        this.dataverseLinkingDataverses = dataverseLinkingDataverses;
×
UNCOV
290
    }
×
291

292
    @OneToMany(mappedBy = "linkingDataverse", cascade = {CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST})
293
    private List<DataverseLinkingDataverse> dataverseLinkedDataverses;
294

295
    public List<DataverseLinkingDataverse> getDataverseLinkedDataverses() {
UNCOV
296
        return dataverseLinkedDataverses;
×
297
    }
298

299
    public void setDataverseLinkedDataverses(List<DataverseLinkingDataverse> dataverseLinkedDataverses) {
300
        this.dataverseLinkedDataverses = dataverseLinkedDataverses;
×
UNCOV
301
    }
×
302

303
    @OneToMany(mappedBy = "linkingDataverse", cascade = {CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST})
304
    private List<DatasetLinkingDataverse> datasetLinkingDataverses;
305

306
    public List<DatasetLinkingDataverse> getDatasetLinkingDataverses() {
UNCOV
307
        return datasetLinkingDataverses;
×
308
    }
309

310
    public void setDatasetLinkingDataverses(List<DatasetLinkingDataverse> datasetLinkingDataverses) {
UNCOV
311
        this.datasetLinkingDataverses = datasetLinkingDataverses;
×
312
    }
×
313

314
    public Set<ControlledVocabularyValue> getDataverseSubjects() {
UNCOV
315
        return dataverseSubjects;
×
316
    }
317

318
    public void setDataverseSubjects(Set<ControlledVocabularyValue> dataverseSubjects) {
UNCOV
319
        this.dataverseSubjects = dataverseSubjects;
×
UNCOV
320
    }
×
321

322

323
    @OneToMany(mappedBy = "dataverse")
1✔
324
    private List<DataverseFieldTypeInputLevel> dataverseFieldTypeInputLevels = new ArrayList<>();
325

326
    @ManyToOne
327
    @JoinColumn(nullable = true)
328
    private Template defaultTemplate;
329

330
    @OneToMany(mappedBy = "definitionPoint", cascade = {CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST})
331
    private List<SavedSearch> savedSearches;
332

333
    public List<SavedSearch> getSavedSearches() {
UNCOV
334
        return savedSearches;
×
335
    }
336

337
    public void setSavedSearches(List<SavedSearch> savedSearches) {
UNCOV
338
        this.savedSearches = savedSearches;
×
UNCOV
339
    }
×
340

341
    @OneToMany(mappedBy = "dataverse", cascade = {CascadeType.MERGE, CascadeType.REMOVE}, orphanRemoval = true)
1✔
342
    private List<Template> templates = new ArrayList<>();
343

344
    @OneToMany(mappedBy = "dataverse", cascade = {CascadeType.MERGE, CascadeType.REMOVE})
345
    private List<Guestbook> guestbooks;
346

347
    public List<Guestbook> getGuestbooks() {
UNCOV
348
        return guestbooks;
×
349
    }
350

351
    public void setGuestbooks(List<Guestbook> guestbooks) {
UNCOV
352
        this.guestbooks = guestbooks;
×
353
    }
×
354

355

356
    @OneToMany(mappedBy = "dataverse", cascade = {CascadeType.MERGE, CascadeType.REMOVE})
357
    private List<HarvestingClient> harvestingClientConfigs;
358

359
    public List<HarvestingClient> getHarvestingClientConfigs() {
UNCOV
360
        return this.harvestingClientConfigs;
×
361
    }
362

363
    public void setHarvestingClientConfigs(List<HarvestingClient> harvestingClientConfigs) {
UNCOV
364
        this.harvestingClientConfigs = harvestingClientConfigs;
×
UNCOV
365
    }
×
366
    /*
367
    public boolean isHarvested() {
368
        return harvestingClient != null;
369
    }
370
    */
371

372
    public boolean isRoot() {
373
        return this.getOwner() == null;
×
374
    }
375

376
    public List<Guestbook> getParentGuestbooks() {
377
        List<Guestbook> retList = new ArrayList<>();
×
UNCOV
378
        Dataverse testDV = this;
×
379
        while (testDV.getOwner() != null) {
×
UNCOV
380
            retList.addAll(testDV.getOwner().getGuestbooks());
×
UNCOV
381
            if (testDV.getOwner().guestbookRoot) {
×
UNCOV
382
                break;
×
383
            }
384
            testDV = testDV.getOwner();
×
385
        }
386
        return retList;
×
387
    }
388

389
    public List<Guestbook> getAvailableGuestbooks() {
390
        //get all guestbooks
391
        List<Guestbook> retList = new ArrayList<>();
×
392
        Dataverse testDV = this;
×
UNCOV
393
        List<Guestbook> allGbs = new ArrayList<>();
×
394
        if (!this.guestbookRoot) {
×
UNCOV
395
            while (testDV.getOwner() != null) {
×
396

UNCOV
397
                allGbs.addAll(testDV.getOwner().getGuestbooks());
×
398
                if (testDV.getOwner().isGuestbookRoot()) {
×
UNCOV
399
                    break;
×
400
                }
401
                testDV = testDV.getOwner();
×
402
            }
403
        }
404

405
        allGbs.addAll(this.getGuestbooks());
×
406
        //then only display them if they are enabled
UNCOV
407
        for (Guestbook gbt : allGbs) {
×
UNCOV
408
            if (gbt.isEnabled()) {
×
UNCOV
409
                retList.add(gbt);
×
410
            }
UNCOV
411
        }
×
412
        return retList;
×
413

414
    }
415

416
    private boolean guestbookRoot;
417

418
    public boolean isGuestbookRoot() {
UNCOV
419
        return guestbookRoot;
×
420
    }
421

422
    public void setGuestbookRoot(boolean guestbookRoot) {
UNCOV
423
        this.guestbookRoot = guestbookRoot;
×
UNCOV
424
    }
×
425

426

427
    public void setDataverseFieldTypeInputLevels(List<DataverseFieldTypeInputLevel> dataverseFieldTypeInputLevels) {
UNCOV
428
        this.dataverseFieldTypeInputLevels = dataverseFieldTypeInputLevels;
×
UNCOV
429
    }
×
430

431
    public List<DataverseFieldTypeInputLevel> getDataverseFieldTypeInputLevels() {
UNCOV
432
        return dataverseFieldTypeInputLevels;
×
433
    }
434

435

436
    public Template getDefaultTemplate() {
UNCOV
437
        return defaultTemplate;
×
438
    }
439

440
    public void setDefaultTemplate(Template defaultTemplate) {
UNCOV
441
        this.defaultTemplate = defaultTemplate;
×
442
    }
×
443

444
    public List<Template> getTemplates() {
UNCOV
445
        return templates;
×
446
    }
447

448
    public void setTemplates(List<Template> templates) {
UNCOV
449
        this.templates = templates;
×
450
    }
×
451

452
    public List<Template> getParentTemplates() {
453
        List<Template> retList = new ArrayList<>();
×
UNCOV
454
        Dataverse testDV = this;
×
455
        while (testDV.getOwner() != null) {
×
456

UNCOV
457
            if (!testDV.getRootMetadataBlocks().equals(testDV.getOwner().getRootMetadataBlocks())) {
×
458
                break;
×
459
            }
460
            retList.addAll(testDV.getOwner().getTemplates());
×
461

UNCOV
462
            if (testDV.getOwner().templateRoot) {
×
UNCOV
463
                break;
×
464
            }
UNCOV
465
            testDV = testDV.getOwner();
×
466
        }
UNCOV
467
        return retList;
×
468
    }
469

470
    public boolean isThemeRoot() {
UNCOV
471
        return themeRoot;
×
472
    }
473

474
    public boolean getThemeRoot() {
UNCOV
475
        return themeRoot;
×
476
    }
477

478
    public void setThemeRoot(boolean themeRoot) {
UNCOV
479
        this.themeRoot = themeRoot;
×
480
    }
×
481

482
    public boolean isTemplateRoot() {
UNCOV
483
        return templateRoot;
×
484
    }
485

486
    public void setTemplateRoot(boolean templateRoot) {
UNCOV
487
        this.templateRoot = templateRoot;
×
488
    }
×
489

490

491
    public Dataverse getMetadataBlockRootDataverse() {
UNCOV
492
        if (metadataBlockRoot || getOwner() == null) {
×
493
            return this;
×
494
        } else {
UNCOV
495
            return getOwner().getMetadataBlockRootDataverse();
×
496
        }
497
    }
498

499
    public List<MetadataBlock> getRootMetadataBlocks() {
UNCOV
500
        return getMetadataBlockRootDataverse().getMetadataBlocks();
×
501
    }
502

503
    public List<MetadataBlock> getMetadataBlocks() {
UNCOV
504
        return metadataBlocks;
×
505
    }
506

507
    public Long getMetadataRootId() {
UNCOV
508
        return getMetadataBlockRootDataverse().getId();
×
509
    }
510

511

512
    public DataverseTheme getDataverseTheme() {
513
        return getDataverseTheme(false);
×
514
    }
515

516
    public DataverseTheme getDataverseTheme(boolean returnActualDB) {
UNCOV
517
        if (returnActualDB || themeRoot || getOwner() == null) {
×
518
            return dataverseTheme;
×
519
        } else {
520
            return getOwner().getDataverseTheme();
×
521
        }
522
    }
523

524
    public String getGuestbookRootDataverseName() {
525
        Dataverse testDV = this;
×
UNCOV
526
        String retName = "Parent";
×
527
        while (testDV.getOwner() != null) {
×
UNCOV
528
            retName = testDV.getOwner().getDisplayName();
×
UNCOV
529
            if (testDV.getOwner().guestbookRoot) {
×
UNCOV
530
                break;
×
531
            }
532
            testDV = testDV.getOwner();
×
533
        }
534
        return retName;
×
535
    }
536

537
    public String getTemplateRootDataverseName() {
538
        Dataverse testDV = this;
×
UNCOV
539
        String retName = "Parent";
×
540
        while (testDV.getOwner() != null) {
×
UNCOV
541
            retName = testDV.getOwner().getDisplayName();
×
UNCOV
542
            if (testDV.getOwner().templateRoot) {
×
UNCOV
543
                break;
×
544
            }
545
            testDV = testDV.getOwner();
×
546
        }
547
        return retName;
×
548
    }
549

550
    public String getThemeRootDataverseName() {
551
        Dataverse testDV = this;
×
UNCOV
552
        String retName = "Parent";
×
553
        while (testDV.getOwner() != null) {
×
UNCOV
554
            retName = testDV.getOwner().getDisplayName();
×
UNCOV
555
            if (testDV.getOwner().themeRoot) {
×
UNCOV
556
                break;
×
557
            }
558
            testDV = testDV.getOwner();
×
559
        }
560
        return retName;
×
561
    }
562

563
    public String getMetadataParentRootDataverseName() {
UNCOV
564
        if (getOwner() == null) {
×
565
            return this.getDisplayName();
×
566
        } else {
567
            return getOwner().getMetadataBlockRootDataverse().getDisplayName();
×
568
        }
569
    }
570

571
    public String getFacetRootDataverseName() {
572
        Dataverse testDV = this;
×
UNCOV
573
        String retName = "Parent";
×
574
        while (testDV.getOwner() != null) {
×
UNCOV
575
            retName = testDV.getOwner().getDisplayName();
×
UNCOV
576
            if (testDV.getOwner().facetRoot) {
×
UNCOV
577
                break;
×
578
            }
UNCOV
579
            testDV = testDV.getOwner();
×
580
        }
581
        return retName;
×
582
    }
583

584

585
    public String getLogoOwnerId() {
586

UNCOV
587
        if (themeRoot || getOwner() == null) {
×
588
            return this.getId().toString();
×
589
        } else {
UNCOV
590
            return getOwner().getId().toString();
×
591
        }
592
    }
593

594
    public void setDataverseTheme(DataverseTheme dataverseTheme) {
UNCOV
595
        this.dataverseTheme = dataverseTheme;
×
596
    }
×
597

598
    public void setMetadataBlocks(List<MetadataBlock> metadataBlocks) {
599
        this.metadataBlocks = metadataBlocks;
1✔
600
    }
1✔
601

602
    public List<DatasetFieldType> getCitationDatasetFieldTypes() {
UNCOV
603
        return citationDatasetFieldTypes;
×
604
    }
605

606
    public void setCitationDatasetFieldTypes(List<DatasetFieldType> citationDatasetFieldTypes) {
UNCOV
607
        this.citationDatasetFieldTypes = citationDatasetFieldTypes;
×
UNCOV
608
    }
×
609

610

611
    public List<DataverseFacet> getDataverseFacets() {
612
        return getDataverseFacets(false);
×
613
    }
614

615
    public List<DataverseFacet> getDataverseFacets(boolean returnActualDB) {
UNCOV
616
        if (returnActualDB || facetRoot || getOwner() == null) {
×
617
            return dataverseFacets;
×
618
        } else {
UNCOV
619
            return getOwner().getDataverseFacets();
×
620
        }
621
    }
622

623
    public Long getFacetRootId() {
UNCOV
624
        if (facetRoot || getOwner() == null) {
×
625
            return this.getId();
×
626
        } else {
UNCOV
627
            return getOwner().getFacetRootId();
×
628
        }
629
    }
630

631
    public void setDataverseFacets(List<DataverseFacet> dataverseFacets) {
UNCOV
632
        this.dataverseFacets = dataverseFacets;
×
UNCOV
633
    }
×
634

635
    public List<DataverseContact> getDataverseContacts() {
UNCOV
636
        return dataverseContacts;
×
637
    }
638

639
    /**
640
     * Get the email addresses of the dataverse contacts as a comma-separated
641
     * concatenation.
642
     *
643
     * @return a comma-separated concatenation of email addresses, or the empty
644
     * string if there are no contacts.
645
     * @author bencomp
646
     */
647
    public String getContactEmails() {
648
        if (dataverseContacts != null && !dataverseContacts.isEmpty()) {
×
UNCOV
649
            StringBuilder buf = new StringBuilder();
×
650
            Iterator<DataverseContact> it = dataverseContacts.iterator();
×
651
            while (it.hasNext()) {
×
UNCOV
652
                DataverseContact con = it.next();
×
653
                buf.append(con.getContactEmail());
×
UNCOV
654
                if (it.hasNext()) {
×
UNCOV
655
                    buf.append(",");
×
656
                }
UNCOV
657
            }
×
658
            return buf.toString();
×
659
        } else {
UNCOV
660
            return "";
×
661
        }
662
    }
663

664
    public void setDataverseContacts(List<DataverseContact> dataverseContacts) {
UNCOV
665
        this.dataverseContacts = dataverseContacts;
×
666
    }
×
667

668
    public void addDataverseContact(int index) {
UNCOV
669
        dataverseContacts.add(index, new DataverseContact(this));
×
UNCOV
670
    }
×
671

672
    public void removeDataverseContact(int index) {
UNCOV
673
        dataverseContacts.remove(index);
×
UNCOV
674
    }
×
675

676
    public String getName() {
677
        return name;
1✔
678
    }
679

680
    public void setName(String name) {
681
        this.name = name;
1✔
682
    }
1✔
683

684
    public String getAlias() {
UNCOV
685
        return alias;
×
686
    }
687

688
    public void setAlias(String alias) {
689
        this.alias = alias;
1✔
690
    }
1✔
691

692
    public String getDescription() {
UNCOV
693
        return description;
×
694
    }
695

696
    public void setDescription(String description) {
UNCOV
697
        this.description = description;
×
698
    }
×
699

700
    public String getAdditionalDescription() {
UNCOV
701
        return additionalDescription;
×
702
    }
703

704
    public void setAdditionalDescription(String additionalDescription) {
UNCOV
705
        this.additionalDescription = additionalDescription;
×
UNCOV
706
    }
×
707

708
    public String getAffiliation() {
UNCOV
709
        return affiliation;
×
710
    }
711

712
    public void setAffiliation(String affiliation) {
713
        this.affiliation = affiliation;
1✔
714
    }
1✔
715

716
    public boolean isMetadataBlockRoot() {
UNCOV
717
        return metadataBlockRoot;
×
718
    }
719

720
    public void setMetadataBlockRoot(boolean metadataBlockRoot) {
721
        this.metadataBlockRoot = metadataBlockRoot;
1✔
722
    }
1✔
723

724
    public boolean isFacetRoot() {
UNCOV
725
        return facetRoot;
×
726
    }
727

728
    public void setFacetRoot(boolean facetRoot) {
729
        this.facetRoot = facetRoot;
×
UNCOV
730
    }
×
731

732

733
    public void addRole(DataverseRole role) {
UNCOV
734
        role.setOwner(this);
×
UNCOV
735
        if (roles == null) {
×
UNCOV
736
            roles = new HashSet<>();
×
737
        }
UNCOV
738
        roles.add(role);
×
UNCOV
739
    }
×
740

741
    /**
742
     * Note: to add a role, use {@link #addRole(edu.harvard.iq.dataverse.authorization.DataverseRole)},
743
     * do not call this method and try to add directly to the list.
744
     *
745
     * @return the roles defined in this Dataverse.
746
     */
747
    public Set<DataverseRole> getRoles() {
748
        if (roles == null) {
×
749
            roles = new HashSet<>();
×
750
        }
751
        return roles;
×
752
    }
753

754
    public List<Dataverse> getOwners() {
UNCOV
755
        List<Dataverse> owners = new ArrayList<>();
×
UNCOV
756
        if (getOwner() != null) {
×
UNCOV
757
            owners.addAll(getOwner().getOwners());
×
UNCOV
758
            owners.add(getOwner());
×
759
        }
760
        return owners;
×
761
    }
762

763
    @Override
764
    public boolean equals(Object object) {
765
        // TODO: Warning - this method won't work in the case the id fields are not set
766
        if (!(object instanceof Dataverse)) {
1✔
UNCOV
767
            return false;
×
768
        }
769
        Dataverse other = (Dataverse) object;
1✔
770
        return Objects.equals(getId(), other.getId());
1✔
771
    }
772

773
    @Override
774
    protected String toStringExtras() {
775
        return "name:" + getName();
1✔
776
    }
777

778
    @Override
779
    public <T> T accept(Visitor<T> v) {
780
        return v.visit(this);
×
781
    }
782

783
    /**
784
     * @todo implement in https://github.com/IQSS/dataverse/issues/551
785
     */
786
    public String getDepositTermsOfUse() {
UNCOV
787
        return "Dataverse Deposit Terms of Use will be implemented in https://github.com/IQSS/dataverse/issues/551";
×
788
    }
789

790
    @Override
791
    public String getDisplayName() {
UNCOV
792
        return MarkupChecker.stripAllTags(MarkupChecker.sanitizeBasicHTML(getName()));
×
793
    }
794

795
    @Override
796
    public boolean isPermissionRoot() {
UNCOV
797
        return permissionRoot;
×
798
    }
799

800
    public void setPermissionRoot(boolean permissionRoot) {
UNCOV
801
        this.permissionRoot = permissionRoot;
×
UNCOV
802
    }
×
803

804
    @Override
805
    public boolean isAncestorOf(DvObject other) {
806
        while (other != null) {
1✔
807
            if (equals(other)) {
1✔
808
                return true;
1✔
809
            }
810
            other = other.getOwner();
1✔
811
        }
812
        return false;
1✔
813
    }
814

815
    public boolean isAllowMessagesBanners() {
UNCOV
816
        return allowMessagesBanners;
×
817
    }
818

819
    public void setAllowMessagesBanners(boolean allowMessagesBanners) {
UNCOV
820
        this.allowMessagesBanners = allowMessagesBanners;
×
UNCOV
821
    }
×
822

823
    public FeaturedDataversesSorting getFeaturedDataversesSorting() {
UNCOV
824
        if (featuredDataversesSorting == null) {
×
UNCOV
825
            featuredDataversesSorting = FeaturedDataversesSorting.BY_HAND;
×
826
        }
UNCOV
827
        return featuredDataversesSorting;
×
828
    }
829

830
    public void setFeaturedDataversesSorting(FeaturedDataversesSorting featuredDataversesSorting) {
UNCOV
831
        this.featuredDataversesSorting = featuredDataversesSorting;
×
UNCOV
832
    }
×
833
}
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