Skip to content
This repository was archived by the owner on Jun 24, 2026. It is now read-only.

Commit 20b4311

Browse files
refactor: update Item and CoCo classes to support multiple types for items
1 parent 5a41d11 commit 20b4311

3 files changed

Lines changed: 27 additions & 36 deletions

File tree

gui/mobile/app/src/main/java/it/cnr/coco/MainActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public void new_type(Type type) {
121121

122122
@Override
123123
public void new_item(Item item) {
124-
if (item.getType().getName().equals("Robot")) {
124+
if (item.getTypes().stream().anyMatch(type -> type.getName().equals("Robot"))) {
125125
Log.d(TAG, "New robot item received: " + item.getId());
126126
runOnUiThread(() -> {
127127
// Initialize the Language class to handle speech and text-to-speech

gui/mobile/coco/src/main/java/it/cnr/coco/api/CoCo.java

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.util.HashSet;
1313
import java.util.Map;
1414
import java.util.Objects;
15+
import java.util.Set;
1516

1617
import it.cnr.coco.utils.Connection;
1718
import it.cnr.coco.utils.ConnectionListener;
@@ -81,13 +82,16 @@ public void setItems(@NonNull JsonArray itemArray) {
8182
items.clear();
8283
for (JsonElement itemElement : itemArray) {
8384
JsonObject itemObject = itemElement.getAsJsonObject();
84-
Type type = Objects.requireNonNull(types.get(itemObject.get("type").getAsString()));
85+
Set<Type> itemTypes = new HashSet<>();
86+
for (JsonElement typeElement : itemObject.getAsJsonArray("types")) {
87+
Type type = Objects.requireNonNull(types.get(typeElement.getAsString()));
88+
itemTypes.add(type);
89+
}
8590
Value value = itemObject.has("value") ? new Value(itemObject.get("value").getAsJsonObject().get("data"),
8691
Instant.ofEpochMilli(itemObject.get("value").getAsJsonObject().get("timestamp").getAsLong()))
8792
: null;
88-
Item item = new Item(itemObject.get("id").getAsString(), type, itemObject.get("data"), value);
93+
Item item = new Item(itemObject.get("id").getAsString(), itemTypes, itemObject.get("data"), value);
8994
items.put(itemObject.get("id").getAsString(), item);
90-
type.instances.add(item);
9195
for (CoCoListener listener : listeners)
9296
listener.new_item(item);
9397
}
@@ -105,33 +109,11 @@ public void onReceivedMessage(@NonNull JsonObject message) {
105109
case "coco":
106110
if (message.has("types")) {
107111
types.clear();
108-
for (Map.Entry<String, JsonElement> entry : message.getAsJsonObject("types").entrySet())
109-
types.put(entry.getKey(),
110-
new Type(entry.getKey(), entry.getValue().getAsJsonObject().get("data"), null,
111-
null));
112-
for (Map.Entry<String, JsonElement> entry : message.getAsJsonObject("types").entrySet())
113-
refineType(Objects.requireNonNull(types.get(entry.getKey())),
114-
entry.getValue().getAsJsonObject());
115-
for (Type type : types.values())
116-
for (CoCoListener listener : listeners)
117-
listener.new_type(type);
112+
setTypes(message.getAsJsonObject("types").getAsJsonArray("array"));
118113
}
119114
if (message.has("items")) {
120115
items.clear();
121-
for (Map.Entry<String, JsonElement> entry : message.getAsJsonObject("items").entrySet()) {
122-
JsonObject itemObject = entry.getValue().getAsJsonObject();
123-
Type type = Objects.requireNonNull(types.get(itemObject.get("type").getAsString()));
124-
Value value = itemObject.has("value")
125-
? new Value(itemObject.get("value").getAsJsonObject().get("data"),
126-
Instant.ofEpochMilli(
127-
itemObject.get("value").getAsJsonObject().get("timestamp").getAsLong()))
128-
: null;
129-
Item item = new Item(entry.getKey(), type, itemObject.get("data"), value);
130-
items.put(entry.getKey(), item);
131-
type.instances.add(item);
132-
for (CoCoListener listener : listeners)
133-
listener.new_item(item);
134-
}
116+
setItems(message.getAsJsonObject("items").getAsJsonArray("array"));
135117
}
136118
break;
137119
case "new_type":
@@ -142,15 +124,18 @@ public void onReceivedMessage(@NonNull JsonObject message) {
142124
listener.new_type(type);
143125
break;
144126
case "new_item":
145-
Type itemType = Objects.requireNonNull(types.get(message.get("type").getAsString()));
127+
Set<Type> itemTypes = new HashSet<>();
128+
for (JsonElement typeElement : message.getAsJsonArray("types")) {
129+
Type t = Objects.requireNonNull(types.get(typeElement.getAsString()));
130+
itemTypes.add(t);
131+
}
146132
Value itemValue = message.has("value")
147133
? new Value(message.get("value").getAsJsonObject().get("data"),
148134
Instant.ofEpochMilli(
149135
message.get("value").getAsJsonObject().get("timestamp").getAsLong()))
150136
: null;
151-
Item item = new Item(message.get("id").getAsString(), itemType, message.get("data"), itemValue);
137+
Item item = new Item(message.get("id").getAsString(), itemTypes, message.get("data"), itemValue);
152138
items.put(message.get("id").getAsString(), item);
153-
itemType.instances.add(item);
154139
for (CoCoListener listener : listeners)
155140
listener.new_item(item);
156141
break;

gui/mobile/coco/src/main/java/it/cnr/coco/api/Item.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,35 @@
66

77
import java.util.ArrayList;
88
import java.util.Collections;
9+
import java.util.HashSet;
910
import java.util.List;
11+
import java.util.Set;
1012

1113
public class Item {
1214

1315
private final String id;
14-
private final Type type;
16+
private final Set<Type> types;
1517
JsonElement properties;
1618
private Value value;
1719
private final List<Value> data = new ArrayList<>();
1820

19-
public Item(@NonNull String id, @NonNull Type type, JsonElement properties, Value value) {
21+
public Item(@NonNull String id, @NonNull Set<Type> types, JsonElement properties, Value value) {
2022
this.id = id;
21-
this.type = type;
23+
this.types = types;
2224
this.properties = properties;
2325
this.value = value;
26+
if (value != null)
27+
this.data.add(value);
28+
for (Type type : types)
29+
type.instances.add(this);
2430
}
2531

2632
public String getId() {
2733
return id;
2834
}
2935

30-
public Type getType() {
31-
return type;
36+
public Set<Type> getTypes() {
37+
return Collections.unmodifiableSet(types);
3238
}
3339

3440
public JsonElement getProperties() {

0 commit comments

Comments
 (0)