Skip to content

Commit 6516186

Browse files
authored
DD-521 Default license (#95)
* WiP * Wip * Fixes Co-authored-by: Jan van Mansum <[email protected]>
1 parent 1a9fe2e commit 6516186

File tree

4 files changed

+106
-72
lines changed

4 files changed

+106
-72
lines changed

src/main/java/edu/harvard/iq/dataverse/License.java

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package edu.harvard.iq.dataverse;
22

3-
import java.net.URI;
4-
import java.net.URISyntaxException;
5-
import java.util.List;
6-
import java.util.Objects;
73
import javax.persistence.Column;
84
import javax.persistence.Entity;
95
import javax.persistence.GeneratedValue;
@@ -14,6 +10,10 @@
1410
import javax.persistence.OneToMany;
1511
import javax.persistence.Table;
1612
import javax.persistence.UniqueConstraint;
13+
import java.net.URI;
14+
import java.net.URISyntaxException;
15+
import java.util.List;
16+
import java.util.Objects;
1717

1818
/**
1919
* @author Jing Ma
@@ -26,13 +26,18 @@
2626
@NamedQuery( name="License.findById",
2727
query = "SELECT l FROM License l WHERE l.id=:id"),
2828
@NamedQuery( name="License.findDefault",
29-
query = "SELECT l FROM License l WHERE l.name='CC0'"),
29+
query = "SELECT l FROM License l WHERE l.isDefault='true' "),
3030
@NamedQuery( name="License.findByNameOrUri",
3131
query = "SELECT l FROM License l WHERE l.name=:name OR l.uri=:uri"),
3232
@NamedQuery( name="License.deleteById",
33-
query="DELETE FROM License l WHERE l.id=:id"),
33+
query = "DELETE FROM License l WHERE l.id=:id"),
3434
@NamedQuery( name="License.deleteByName",
35-
query="DELETE FROM License l WHERE l.name=:name")
35+
query = "DELETE FROM License l WHERE l.name=:name"),
36+
@NamedQuery( name="License.setDefault",
37+
query = "UPDATE License l SET l.isDefault='true' WHERE l.id=:id"),
38+
@NamedQuery( name="License.clearDefault",
39+
query = "UPDATE License l SET l.isDefault='false'"),
40+
3641
})
3742
@Entity
3843
@Table(uniqueConstraints = {
@@ -57,6 +62,9 @@ public class License {
5762

5863
@Column(nullable = false)
5964
private boolean active;
65+
66+
@Column(nullable = false)
67+
private boolean isDefault;
6068

6169
@OneToMany(mappedBy="license")
6270
private List<TermsOfUseAndAccess> termsOfUseAndAccess;
@@ -69,6 +77,7 @@ public License(String name, URI uri, URI iconUrl, boolean active) {
6977
this.uri = uri.toASCIIString();
7078
this.iconUrl = iconUrl.toASCIIString();
7179
this.active = active;
80+
isDefault = false;
7281
}
7382

7483
public Long getId() {
@@ -119,6 +128,14 @@ public void setActive(boolean active) {
119128
this.active = active;
120129
}
121130

131+
public boolean isDefault() {
132+
return isDefault;
133+
}
134+
135+
public void setDefault(boolean isDefault) {
136+
this.isDefault = isDefault;
137+
}
138+
122139
public List<TermsOfUseAndAccess> getTermsOfUseAndAccess() {
123140
return termsOfUseAndAccess;
124141
}
@@ -148,6 +165,7 @@ public String toString() {
148165
", uri=" + uri +
149166
", iconUrl=" + iconUrl +
150167
", active=" + active +
168+
", isDefault=" + isDefault +
151169
'}';
152170
}
153171

src/main/java/edu/harvard/iq/dataverse/LicenseServiceBean.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,22 +49,27 @@ public License getById(Long id) throws FetchException {
4949
return licenses.get(0);
5050
}
5151

52-
public License getByName(String name) throws FetchException {
53-
List<License> licenses = em.createNamedQuery("License.findByName", License.class)
54-
.setParameter("name", name )
55-
.getResultList();
56-
if (licenses.isEmpty()) {
57-
throw new FetchException("License with that name doesn't exist.");
58-
}
59-
return licenses.get(0);
60-
}
61-
6252
public License getDefault() {
6353
List<License> licenses = em.createNamedQuery("License.findDefault", License.class)
6454
.getResultList();
6555
return licenses.get(0);
6656
}
6757

58+
public void setDefault(Long id) throws UpdateException, FetchException {
59+
License candidate = getById(id);
60+
if (candidate.isActive()) {
61+
try {
62+
em.createNamedQuery("License.clearDefault").executeUpdate();
63+
em.createNamedQuery("License.setDefault").setParameter("id", id).executeUpdate();
64+
}
65+
catch (PersistenceException e) {
66+
throw new UpdateException("Inactive license cannot be default.");
67+
}
68+
}
69+
else
70+
throw new IllegalArgumentException("Cannot set an inactive license as default");
71+
}
72+
6873
public License save(License license) throws RequestBodyException, ConflictException {
6974
if (license.getId() != null) {
7075
throw new RequestBodyException("There shouldn't be an ID in the request body");

src/main/java/edu/harvard/iq/dataverse/api/Admin.java

Lines changed: 65 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package edu.harvard.iq.dataverse.api;
22

3-
import com.google.common.net.UrlEscapers;
43
import edu.harvard.iq.dataverse.BannerMessage;
54
import edu.harvard.iq.dataverse.BannerMessageServiceBean;
65
import edu.harvard.iq.dataverse.BannerMessageText;
@@ -17,104 +16,99 @@
1716
import edu.harvard.iq.dataverse.EMailValidator;
1817
import edu.harvard.iq.dataverse.EjbDataverseEngine;
1918
import edu.harvard.iq.dataverse.GlobalId;
20-
import edu.harvard.iq.dataverse.RoleAssignment;
2119
import edu.harvard.iq.dataverse.License;
2220
import edu.harvard.iq.dataverse.LicenseServiceBean;
2321
import edu.harvard.iq.dataverse.UserServiceBean;
2422
import edu.harvard.iq.dataverse.actionlogging.ActionLogRecord;
2523
import edu.harvard.iq.dataverse.api.dto.RoleDTO;
24+
import edu.harvard.iq.dataverse.authorization.AuthTestDataServiceBean;
2625
import edu.harvard.iq.dataverse.authorization.AuthenticatedUserDisplayInfo;
2726
import edu.harvard.iq.dataverse.authorization.AuthenticationProvider;
27+
import edu.harvard.iq.dataverse.authorization.AuthenticationProvidersRegistrationServiceBean;
28+
import edu.harvard.iq.dataverse.authorization.DataverseRole;
29+
import edu.harvard.iq.dataverse.authorization.RoleAssignee;
2830
import edu.harvard.iq.dataverse.authorization.UserIdentifier;
31+
import edu.harvard.iq.dataverse.authorization.UserRecordIdentifier;
2932
import edu.harvard.iq.dataverse.authorization.exceptions.AuthenticationProviderFactoryNotFoundException;
3033
import edu.harvard.iq.dataverse.authorization.exceptions.AuthorizationSetupException;
3134
import edu.harvard.iq.dataverse.authorization.groups.GroupServiceBean;
35+
import edu.harvard.iq.dataverse.authorization.groups.impl.explicit.ExplicitGroupServiceBean;
3236
import edu.harvard.iq.dataverse.authorization.providers.AuthenticationProviderRow;
3337
import edu.harvard.iq.dataverse.authorization.providers.builtin.BuiltinUser;
3438
import edu.harvard.iq.dataverse.authorization.providers.builtin.BuiltinUserServiceBean;
3539
import edu.harvard.iq.dataverse.authorization.providers.shib.ShibAuthenticationProvider;
3640
import edu.harvard.iq.dataverse.authorization.providers.shib.ShibServiceBean;
3741
import edu.harvard.iq.dataverse.authorization.providers.shib.ShibUtil;
3842
import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
43+
import edu.harvard.iq.dataverse.authorization.users.User;
3944
import edu.harvard.iq.dataverse.confirmemail.ConfirmEmailData;
4045
import edu.harvard.iq.dataverse.confirmemail.ConfirmEmailException;
4146
import edu.harvard.iq.dataverse.confirmemail.ConfirmEmailInitResponse;
4247
import edu.harvard.iq.dataverse.dataaccess.DataAccess;
4348
import edu.harvard.iq.dataverse.dataaccess.DataAccessOption;
44-
import edu.harvard.iq.dataverse.dataaccess.StorageIO;
45-
import edu.harvard.iq.dataverse.engine.command.impl.AbstractSubmitToArchiveCommand;
46-
import edu.harvard.iq.dataverse.engine.command.impl.PublishDataverseCommand;
47-
import edu.harvard.iq.dataverse.settings.Setting;
48-
import edu.harvard.iq.dataverse.util.json.JsonPrinter;
49-
import javax.json.Json;
50-
import javax.json.JsonArrayBuilder;
51-
import javax.json.JsonObjectBuilder;
52-
import javax.persistence.PersistenceException;
53-
import javax.ws.rs.Consumes;
54-
import javax.ws.rs.DELETE;
55-
import javax.ws.rs.GET;
56-
import javax.ws.rs.POST;
57-
import javax.ws.rs.PUT;
58-
import javax.ws.rs.Path;
59-
import javax.ws.rs.PathParam;
60-
import javax.ws.rs.core.Response;
61-
import static edu.harvard.iq.dataverse.util.json.NullSafeJsonBuilder.jsonObjectBuilder;
62-
import static edu.harvard.iq.dataverse.util.json.JsonPrinter.*;
63-
64-
import java.io.InputStream;
65-
import java.io.StringReader;
66-
import java.util.Map;
67-
import java.util.Map.Entry;
68-
import java.util.logging.Level;
69-
import java.util.logging.Logger;
70-
import javax.ejb.EJB;
71-
import javax.ejb.Stateless;
72-
import javax.json.JsonObject;
73-
import javax.json.JsonReader;
74-
import javax.validation.ConstraintViolation;
75-
import javax.validation.ConstraintViolationException;
76-
import javax.ws.rs.Produces;
77-
import javax.ws.rs.core.Response.Status;
78-
79-
import org.apache.commons.io.IOUtils;
80-
81-
import java.util.List;
82-
import edu.harvard.iq.dataverse.authorization.AuthTestDataServiceBean;
83-
import edu.harvard.iq.dataverse.authorization.AuthenticationProvidersRegistrationServiceBean;
84-
import edu.harvard.iq.dataverse.authorization.DataverseRole;
85-
import edu.harvard.iq.dataverse.authorization.RoleAssignee;
86-
import edu.harvard.iq.dataverse.authorization.UserRecordIdentifier;
87-
import edu.harvard.iq.dataverse.authorization.groups.impl.explicit.ExplicitGroupServiceBean;
88-
import edu.harvard.iq.dataverse.authorization.users.User;
8949
import edu.harvard.iq.dataverse.dataaccess.ImageThumbConverter;
50+
import edu.harvard.iq.dataverse.dataaccess.StorageIO;
9051
import edu.harvard.iq.dataverse.dataset.DatasetThumbnail;
9152
import edu.harvard.iq.dataverse.dataset.DatasetUtil;
9253
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
9354
import edu.harvard.iq.dataverse.engine.command.exception.CommandException;
94-
import edu.harvard.iq.dataverse.engine.command.impl.MergeInAccountCommand;
95-
import edu.harvard.iq.dataverse.engine.command.impl.ChangeUserIdentifierCommand;
55+
import edu.harvard.iq.dataverse.engine.command.impl.AbstractSubmitToArchiveCommand;
9656
import edu.harvard.iq.dataverse.engine.command.impl.DeactivateUserCommand;
9757
import edu.harvard.iq.dataverse.engine.command.impl.DeleteRoleCommand;
58+
import edu.harvard.iq.dataverse.engine.command.impl.PublishDataverseCommand;
9859
import edu.harvard.iq.dataverse.engine.command.impl.RegisterDvObjectCommand;
9960
import edu.harvard.iq.dataverse.ingest.IngestServiceBean;
61+
import edu.harvard.iq.dataverse.settings.Setting;
10062
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
10163
import edu.harvard.iq.dataverse.userdata.UserListMaker;
10264
import edu.harvard.iq.dataverse.userdata.UserListResult;
10365
import edu.harvard.iq.dataverse.util.ArchiverUtil;
10466
import edu.harvard.iq.dataverse.util.BundleUtil;
10567
import edu.harvard.iq.dataverse.util.FileUtil;
106-
import java.io.IOException;
107-
import java.io.OutputStream;
68+
import edu.harvard.iq.dataverse.util.json.JsonPrinter;
69+
import org.apache.commons.io.IOUtils;
10870

109-
import java.util.ArrayList;
110-
import java.util.Arrays;
111-
import java.util.Date;
71+
import javax.ejb.EJB;
72+
import javax.ejb.Stateless;
11273
import javax.inject.Inject;
74+
import javax.json.Json;
11375
import javax.json.JsonArray;
76+
import javax.json.JsonArrayBuilder;
77+
import javax.json.JsonObject;
78+
import javax.json.JsonObjectBuilder;
79+
import javax.json.JsonReader;
11480
import javax.persistence.Query;
81+
import javax.validation.ConstraintViolation;
82+
import javax.validation.ConstraintViolationException;
83+
import javax.ws.rs.DELETE;
84+
import javax.ws.rs.GET;
85+
import javax.ws.rs.POST;
86+
import javax.ws.rs.PUT;
87+
import javax.ws.rs.Path;
88+
import javax.ws.rs.PathParam;
89+
import javax.ws.rs.Produces;
11590
import javax.ws.rs.QueryParam;
11691
import javax.ws.rs.WebApplicationException;
92+
import javax.ws.rs.core.Response;
93+
import javax.ws.rs.core.Response.Status;
11794
import javax.ws.rs.core.StreamingOutput;
95+
import java.io.IOException;
96+
import java.io.InputStream;
97+
import java.io.OutputStream;
98+
import java.io.StringReader;
99+
import java.util.ArrayList;
100+
import java.util.Arrays;
101+
import java.util.Date;
102+
import java.util.List;
103+
import java.util.Map;
104+
import java.util.Map.Entry;
105+
import java.util.logging.Level;
106+
import java.util.logging.Logger;
107+
108+
import static edu.harvard.iq.dataverse.util.json.JsonPrinter.json;
109+
import static edu.harvard.iq.dataverse.util.json.JsonPrinter.rolesToJson;
110+
import static edu.harvard.iq.dataverse.util.json.JsonPrinter.toJsonArray;
111+
import static edu.harvard.iq.dataverse.util.json.NullSafeJsonBuilder.jsonObjectBuilder;
118112

119113
/**
120114
* Where the secure, setup API calls live.
@@ -2010,6 +2004,23 @@ public Response addLicense(License license) {
20102004
}
20112005
}
20122006

2007+
// TODO: GET /licenses/default
2008+
2009+
@PUT
2010+
@Path("/licenses/default")
2011+
public Response setDefault(long id) {
2012+
try {
2013+
licenseService.setDefault(id);
2014+
return ok("Default license ID set to " + id);
2015+
}
2016+
catch (UpdateException | FetchException e) {
2017+
return error(Status.INTERNAL_SERVER_ERROR, e.getMessage());
2018+
}
2019+
catch (IllegalArgumentException e) {
2020+
return badRequest(e.getMessage());
2021+
}
2022+
}
2023+
20132024
@PUT
20142025
@Path("/licenses/{id}")
20152026
public Response putLicenseById(@PathParam("id") long id, License license) {

src/main/resources/db/migration/V5.5.0.3__7440-configurable-license-list.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ BEGIN
1111
END;
1212

1313
BEGIN
14-
INSERT INTO license (uri, name, active, iconurl) VALUES ('http://creativecommons.org/publicdomain/zero/1.0', 'CC0', true, '/resources/images/cc0.png');
14+
INSERT INTO license (uri, name, active, isDefault, iconurl) VALUES ('http://creativecommons.org/publicdomain/zero/1.0', 'CC0', true, true, '/resources/images/cc0.png');
1515
EXCEPTION
1616
WHEN duplicate_object THEN RAISE NOTICE 'CC0 has already been added to the license table';
1717
END;

0 commit comments

Comments
 (0)