From 0eea72225ea5de5f9ba4195cf16a66c4c837a2ec Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Thu, 21 May 2020 21:09:43 +0200 Subject: [PATCH] Fixed bug in LocalizedStringType for null values Former-commit-id: f62ece6de1bdb9e0c3a39b2a22c0fc43c5675b16 --- .../libreccm/l10n/LocalizedStringType.java | 18 ++++++++------ .../main/java/org/libreccm/security/Role.java | 24 +++++++++---------- .../modules/ConfigurationLoaderTest.java | 2 +- .../ConfigurationLoaderTest/after-load.xml | 2 +- 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/ccm-core/src/main/java/org/libreccm/l10n/LocalizedStringType.java b/ccm-core/src/main/java/org/libreccm/l10n/LocalizedStringType.java index 7e5e58c3d..e6690ba64 100644 --- a/ccm-core/src/main/java/org/libreccm/l10n/LocalizedStringType.java +++ b/ccm-core/src/main/java/org/libreccm/l10n/LocalizedStringType.java @@ -91,13 +91,17 @@ public class LocalizedStringType implements UserType { final int index, final SharedSessionContractImplementor session ) throws HibernateException, SQLException { - final JsonObject jsonObject = ((LocalizedString) value).toJson(); - try (StringWriter strWriter = new StringWriter(); - JsonWriter jsonWriter = Json.createWriter(strWriter)) { - jsonWriter.writeObject(jsonObject); - statement.setObject(index, strWriter.toString(), Types.OTHER); - } catch (IOException ex) { - throw new HibernateException(ex); + if (value == null) { + statement.setObject(index, null, Types.OTHER); + } else { + final JsonObject jsonObject = ((LocalizedString) value).toJson(); + try (StringWriter strWriter = new StringWriter(); + JsonWriter jsonWriter = Json.createWriter(strWriter)) { + jsonWriter.writeObject(jsonObject); + statement.setObject(index, strWriter.toString(), Types.OTHER); + } catch (IOException ex) { + throw new HibernateException(ex); + } } } diff --git a/ccm-core/src/main/java/org/libreccm/security/Role.java b/ccm-core/src/main/java/org/libreccm/security/Role.java index 7c7707734..e55aebac5 100644 --- a/ccm-core/src/main/java/org/libreccm/security/Role.java +++ b/ccm-core/src/main/java/org/libreccm/security/Role.java @@ -40,16 +40,12 @@ import java.util.List; import java.util.Objects; import java.util.Set; -import javax.persistence.AssociationOverride; import javax.persistence.Column; -import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; import javax.persistence.NamedAttributeNode; import javax.persistence.NamedEntityGraph; import javax.persistence.NamedEntityGraphs; @@ -186,7 +182,7 @@ public class Role implements Serializable, Exportable { @Column(name = "DESCRIPTION") @Type(type = "org.libreccm.l10n.LocalizedStringType") @XmlElement(name = "description", namespace = CORE_XML_NS) - private LocalizedString description = new LocalizedString(); + private LocalizedString description; /** * All memberships of the roles. @@ -195,7 +191,7 @@ public class Role implements Serializable, Exportable { @XmlElementWrapper(name = "role-memberships", namespace = CORE_XML_NS) @XmlElement(name = "role-membership", namespace = CORE_XML_NS) @JsonIgnore - private Set memberships = new HashSet<>(); + private Set memberships; /** * Permissions granted to the role. @@ -205,14 +201,18 @@ public class Role implements Serializable, Exportable { @XmlElementWrapper(name = "permissions", namespace = CORE_XML_NS) @XmlElement(name = "permission", namespace = CORE_XML_NS) @JsonIgnore - private List permissions = new ArrayList<>(); + private List permissions; @OneToMany(mappedBy = "role", fetch = FetchType.LAZY) @JsonIgnore - private List assignedTasks = new ArrayList<>(); + private List assignedTasks; public Role() { super(); + description = new LocalizedString(); + memberships = new HashSet<>(); + permissions = new ArrayList<>(); + assignedTasks = new ArrayList<>(); } public long getRoleId() { @@ -249,7 +249,7 @@ public class Role implements Serializable, Exportable { } protected void setMemberships(final Set memberships) { - this.memberships = memberships; + this.memberships = new HashSet<>(memberships); } protected void addMembership(final RoleMembership membership) { @@ -269,7 +269,7 @@ public class Role implements Serializable, Exportable { } protected void setPermissions(final List permissions) { - this.permissions = permissions; + this.permissions = new ArrayList<>(permissions); } protected void addPermission(final Permission permission) { @@ -289,7 +289,7 @@ public class Role implements Serializable, Exportable { } protected void setAssignedTasks(final List assignedTasks) { - this.assignedTasks = assignedTasks; + this.assignedTasks = new ArrayList<>(assignedTasks); } public void addAssignedTask(final TaskAssignment taskAssignment) { @@ -301,7 +301,7 @@ public class Role implements Serializable, Exportable { } public LocalizedString getDescription() { - return this.description; + return description; } public void setDescription(final LocalizedString description) { diff --git a/ccm-core/src/test/java/org/libreccm/modules/ConfigurationLoaderTest.java b/ccm-core/src/test/java/org/libreccm/modules/ConfigurationLoaderTest.java index 96b360e9d..8e729894b 100644 --- a/ccm-core/src/test/java/org/libreccm/modules/ConfigurationLoaderTest.java +++ b/ccm-core/src/test/java/org/libreccm/modules/ConfigurationLoaderTest.java @@ -123,7 +123,7 @@ public class ConfigurationLoaderTest { @Test @ShouldMatchDataSet( value = "datasets/org/libreccm/modules/ConfigurationLoaderTest/" - + "after-load.yml", + + "after-load.xml", excludeColumns = {"setting_id", "entry_id"}) public void loadConfiguration() { final ConfigurationLoader confLoader = new ConfigurationLoader( diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/modules/ConfigurationLoaderTest/after-load.xml b/ccm-core/src/test/resources/datasets/org/libreccm/modules/ConfigurationLoaderTest/after-load.xml index 377e5328b..50925cf5c 100644 --- a/ccm-core/src/test/resources/datasets/org/libreccm/modules/ConfigurationLoaderTest/after-load.xml +++ b/ccm-core/src/test/resources/datasets/org/libreccm/modules/ConfigurationLoaderTest/after-load.xml @@ -5,7 +5,7 @@ setting_id="120" configuration_class="org.libreccm.configuration.ExampleConfiguration" name="title" - setting_value_localized_string="{'de': 'Versuch', 'en': 'Test'}" + setting_value_localized_string='{"de": "Versuch", "en": "Test"}' />