1212import java .util .HashSet ;
1313import java .util .Map ;
1414import java .util .Objects ;
15+ import java .util .Set ;
1516
1617import it .cnr .coco .utils .Connection ;
1718import 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 ;
0 commit comments