Skip to content

Commit 4e81e85

Browse files
committed
change Tag.data type to JsonNode
1 parent d7cf8ea commit 4e81e85

3 files changed

Lines changed: 35 additions & 35 deletions

File tree

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
package cz.cesnet.shongo.controller.booking.request.auxdata.tagdata;
22

3-
import com.fasterxml.jackson.core.JsonProcessingException;
4-
import com.fasterxml.jackson.core.type.TypeReference;
3+
import com.fasterxml.jackson.databind.JsonNode;
54
import cz.cesnet.shongo.controller.booking.request.auxdata.AuxData;
65
import cz.cesnet.shongo.controller.booking.resource.Tag;
76

87
import java.util.ArrayList;
98
import java.util.List;
10-
import java.util.stream.Collectors;
11-
import java.util.stream.Stream;
129

1310
public class NotifyEmailAuxData extends TagData<List<String>>
1411
{
@@ -21,26 +18,14 @@ public NotifyEmailAuxData(Tag tag, AuxData auxData)
2118
@Override
2219
public List<String> getData()
2320
{
24-
List<String> tagDataEmails;
25-
List<String> auxDataEmails;
21+
List<String> emails = new ArrayList<>();
2622

27-
try {
28-
tagDataEmails = objectMapper.readValue(tag.getData(), new TypeReference<>() {
29-
});
30-
} catch (JsonProcessingException | NullPointerException e) {
31-
logger.warn("Error while parsing tag data: {}", e.getMessage());
32-
tagDataEmails = new ArrayList<>();
23+
for (JsonNode child : tag.getData()) {
24+
emails.add(child.asText());
3325
}
34-
try {
35-
auxDataEmails = objectMapper.readValue(aux.getData().toString(), new TypeReference<>() {
36-
});
37-
} catch (JsonProcessingException | NullPointerException e) {
38-
logger.warn("Error while parsing aux data: {}", e.getMessage());
39-
auxDataEmails = new ArrayList<>();
26+
for (JsonNode child : aux.getData()) {
27+
emails.add(child.asText());
4028
}
41-
42-
return Stream
43-
.concat(tagDataEmails.stream(), auxDataEmails.stream())
44-
.collect(Collectors.toList());
29+
return emails;
4530
}
4631
}

shongo-controller/src/main/java/cz/cesnet/shongo/controller/booking/request/auxdata/tagdata/TagData.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package cz.cesnet.shongo.controller.booking.request.auxdata.tagdata;
22

3-
import com.fasterxml.jackson.databind.ObjectMapper;
43
import cz.cesnet.shongo.TodoImplementException;
54
import cz.cesnet.shongo.controller.booking.request.auxdata.AuxData;
65
import cz.cesnet.shongo.controller.booking.request.auxdata.AuxDataFilter;
@@ -13,8 +12,6 @@ public abstract class TagData<T>
1312

1413
protected static Logger logger = LoggerFactory.getLogger(TagData.class);
1514

16-
protected final ObjectMapper objectMapper = new ObjectMapper();
17-
1815
protected final Tag tag;
1916
protected final AuxData aux;
2017

shongo-controller/src/main/java/cz/cesnet/shongo/controller/booking/resource/Tag.java

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,31 @@
11
package cz.cesnet.shongo.controller.booking.resource;
22

3+
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import com.fasterxml.jackson.databind.JsonNode;
5+
import com.fasterxml.jackson.databind.ObjectMapper;
36
import cz.cesnet.shongo.SimplePersistentObject;
47
import cz.cesnet.shongo.api.AbstractComplexType;
58
import cz.cesnet.shongo.controller.api.TagType;
69
import cz.cesnet.shongo.controller.booking.ObjectIdentifier;
710
import org.hibernate.annotations.Type;
811

9-
import javax.persistence.Column;
10-
import javax.persistence.Entity;
11-
import javax.persistence.EnumType;
12-
import javax.persistence.Enumerated;
12+
import javax.persistence.*;
1313

1414
/**
1515
* @author: Ondřej Pavelka <pavelka@cesnet.cz>
1616
*/
1717
@Entity
1818
public class Tag extends SimplePersistentObject {
1919

20+
@Transient
21+
private final ObjectMapper objectMapper = new ObjectMapper();
22+
2023
@Column(unique = true)
2124
private String name;
2225

2326
private TagType type;
2427

25-
private String data;
28+
private JsonNode data;
2629

2730
public String getName()
2831
{
@@ -47,13 +50,13 @@ public void setType(TagType type)
4750
}
4851

4952
@Type(type = "jsonb")
50-
@Column(columnDefinition = "text")
51-
public String getData()
53+
@Column(columnDefinition = "jsonb")
54+
public JsonNode getData()
5255
{
5356
return data;
5457
}
5558

56-
public void setData(String data)
59+
public void setData(JsonNode data)
5760
{
5861
this.data = data;
5962
}
@@ -73,7 +76,16 @@ public void toApi(cz.cesnet.shongo.controller.api.Tag tagApi)
7376
tagApi.setId(ObjectIdentifier.formatId(this));
7477
tagApi.setName(name);
7578
tagApi.setType(type);
76-
tagApi.setData(data);
79+
if (data == null) {
80+
tagApi.setData("");
81+
}
82+
else {
83+
try {
84+
tagApi.setData(objectMapper.writeValueAsString(data));
85+
} catch (JsonProcessingException e) {
86+
throw new IllegalArgumentException("Failed to parse data", e);
87+
}
88+
}
7789
}
7890

7991
/**
@@ -91,6 +103,12 @@ public void fromApi(cz.cesnet.shongo.controller.api.Tag tagApi)
91103
{
92104
this.setName(tagApi.getName());
93105
this.setType(tagApi.getType());
94-
this.setData(tagApi.getData());
106+
if (tagApi.getData() != null) {
107+
try {
108+
setData(objectMapper.readTree(tagApi.getData()));
109+
} catch (JsonProcessingException e) {
110+
throw new IllegalArgumentException("Data is not a valid JSON", e);
111+
}
112+
}
95113
}
96114
}

0 commit comments

Comments
 (0)