Fixed bug in LocalizedStringType for null values

Jens Pelzetter 2020-05-21 21:09:43 +02:00
parent 7a843e81b6
commit f62ece6de1
4 changed files with 25 additions and 21 deletions

View File

@ -91,13 +91,17 @@ public class LocalizedStringType implements UserType {
final int index, final int index,
final SharedSessionContractImplementor session final SharedSessionContractImplementor session
) throws HibernateException, SQLException { ) throws HibernateException, SQLException {
final JsonObject jsonObject = ((LocalizedString) value).toJson(); if (value == null) {
try (StringWriter strWriter = new StringWriter(); statement.setObject(index, null, Types.OTHER);
JsonWriter jsonWriter = Json.createWriter(strWriter)) { } else {
jsonWriter.writeObject(jsonObject); final JsonObject jsonObject = ((LocalizedString) value).toJson();
statement.setObject(index, strWriter.toString(), Types.OTHER); try (StringWriter strWriter = new StringWriter();
} catch (IOException ex) { JsonWriter jsonWriter = Json.createWriter(strWriter)) {
throw new HibernateException(ex); jsonWriter.writeObject(jsonObject);
statement.setObject(index, strWriter.toString(), Types.OTHER);
} catch (IOException ex) {
throw new HibernateException(ex);
}
} }
} }

View File

@ -40,16 +40,12 @@ import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import javax.persistence.AssociationOverride;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.FetchType; import javax.persistence.FetchType;
import javax.persistence.GeneratedValue; import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType; import javax.persistence.GenerationType;
import javax.persistence.Id; import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.NamedAttributeNode; import javax.persistence.NamedAttributeNode;
import javax.persistence.NamedEntityGraph; import javax.persistence.NamedEntityGraph;
import javax.persistence.NamedEntityGraphs; import javax.persistence.NamedEntityGraphs;
@ -186,7 +182,7 @@ public class Role implements Serializable, Exportable {
@Column(name = "DESCRIPTION") @Column(name = "DESCRIPTION")
@Type(type = "org.libreccm.l10n.LocalizedStringType") @Type(type = "org.libreccm.l10n.LocalizedStringType")
@XmlElement(name = "description", namespace = CORE_XML_NS) @XmlElement(name = "description", namespace = CORE_XML_NS)
private LocalizedString description = new LocalizedString(); private LocalizedString description;
/** /**
* All memberships of the roles. * All memberships of the roles.
@ -195,7 +191,7 @@ public class Role implements Serializable, Exportable {
@XmlElementWrapper(name = "role-memberships", namespace = CORE_XML_NS) @XmlElementWrapper(name = "role-memberships", namespace = CORE_XML_NS)
@XmlElement(name = "role-membership", namespace = CORE_XML_NS) @XmlElement(name = "role-membership", namespace = CORE_XML_NS)
@JsonIgnore @JsonIgnore
private Set<RoleMembership> memberships = new HashSet<>(); private Set<RoleMembership> memberships;
/** /**
* Permissions granted to the role. * Permissions granted to the role.
@ -205,14 +201,18 @@ public class Role implements Serializable, Exportable {
@XmlElementWrapper(name = "permissions", namespace = CORE_XML_NS) @XmlElementWrapper(name = "permissions", namespace = CORE_XML_NS)
@XmlElement(name = "permission", namespace = CORE_XML_NS) @XmlElement(name = "permission", namespace = CORE_XML_NS)
@JsonIgnore @JsonIgnore
private List<Permission> permissions = new ArrayList<>(); private List<Permission> permissions;
@OneToMany(mappedBy = "role", fetch = FetchType.LAZY) @OneToMany(mappedBy = "role", fetch = FetchType.LAZY)
@JsonIgnore @JsonIgnore
private List<TaskAssignment> assignedTasks = new ArrayList<>(); private List<TaskAssignment> assignedTasks;
public Role() { public Role() {
super(); super();
description = new LocalizedString();
memberships = new HashSet<>();
permissions = new ArrayList<>();
assignedTasks = new ArrayList<>();
} }
public long getRoleId() { public long getRoleId() {
@ -249,7 +249,7 @@ public class Role implements Serializable, Exportable {
} }
protected void setMemberships(final Set<RoleMembership> memberships) { protected void setMemberships(final Set<RoleMembership> memberships) {
this.memberships = memberships; this.memberships = new HashSet<>(memberships);
} }
protected void addMembership(final RoleMembership membership) { protected void addMembership(final RoleMembership membership) {
@ -269,7 +269,7 @@ public class Role implements Serializable, Exportable {
} }
protected void setPermissions(final List<Permission> permissions) { protected void setPermissions(final List<Permission> permissions) {
this.permissions = permissions; this.permissions = new ArrayList<>(permissions);
} }
protected void addPermission(final Permission permission) { protected void addPermission(final Permission permission) {
@ -289,7 +289,7 @@ public class Role implements Serializable, Exportable {
} }
protected void setAssignedTasks(final List<TaskAssignment> assignedTasks) { protected void setAssignedTasks(final List<TaskAssignment> assignedTasks) {
this.assignedTasks = assignedTasks; this.assignedTasks = new ArrayList<>(assignedTasks);
} }
public void addAssignedTask(final TaskAssignment taskAssignment) { public void addAssignedTask(final TaskAssignment taskAssignment) {
@ -301,7 +301,7 @@ public class Role implements Serializable, Exportable {
} }
public LocalizedString getDescription() { public LocalizedString getDescription() {
return this.description; return description;
} }
public void setDescription(final LocalizedString description) { public void setDescription(final LocalizedString description) {

View File

@ -123,7 +123,7 @@ public class ConfigurationLoaderTest {
@Test @Test
@ShouldMatchDataSet( @ShouldMatchDataSet(
value = "datasets/org/libreccm/modules/ConfigurationLoaderTest/" value = "datasets/org/libreccm/modules/ConfigurationLoaderTest/"
+ "after-load.yml", + "after-load.xml",
excludeColumns = {"setting_id", "entry_id"}) excludeColumns = {"setting_id", "entry_id"})
public void loadConfiguration() { public void loadConfiguration() {
final ConfigurationLoader confLoader = new ConfigurationLoader( final ConfigurationLoader confLoader = new ConfigurationLoader(

View File

@ -5,7 +5,7 @@
setting_id="120" setting_id="120"
configuration_class="org.libreccm.configuration.ExampleConfiguration" configuration_class="org.libreccm.configuration.ExampleConfiguration"
name="title" name="title"
setting_value_localized_string="{'de': 'Versuch', 'en': 'Test'}" setting_value_localized_string='{"de": "Versuch", "en": "Test"}'
/> />
<ccm_core.settings <ccm_core.settings
dtype="BooleanSetting" dtype="BooleanSetting"