Skip to content

Commit

Permalink
Merge pull request #32 from LiveTex/test_gson
Browse files Browse the repository at this point in the history
Reworked parsing of some classes for GSON, removed transient property
  • Loading branch information
maxxx authored Aug 16, 2023
2 parents 6529eb5 + f625569 commit 5283da7
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 48 deletions.
2 changes: 1 addition & 1 deletion sdk/src/main/java/ru/livetex/sdk/entity/FileMessage.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public final class FileMessage extends BaseEntity implements GenericMessage {
@NonNull
public Date createdAt; // timestamp in millis
@NonNull
public transient Creator creator;
public Creator creator;

public FileMessage(FileUploadedResponse response) {
super();
Expand Down
2 changes: 1 addition & 1 deletion sdk/src/main/java/ru/livetex/sdk/entity/HistoryEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public final class HistoryEntity extends BaseEntity {
@NonNull
public Date createdAt;
@NonNull
public transient List<GenericMessage> messages = new ArrayList<>();
public List<GenericMessage> messages = new ArrayList<>();

@Override
protected String getType() {
Expand Down
2 changes: 1 addition & 1 deletion sdk/src/main/java/ru/livetex/sdk/entity/TextMessage.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public final class TextMessage extends BaseEntity implements GenericMessage {
@NonNull
public Date createdAt;
@NonNull
public transient Creator creator;
public Creator creator;
// Related to custom project logic
@Nullable
public Map<String, String> attributes = null;
Expand Down
109 changes: 64 additions & 45 deletions sdk/src/main/java/ru/livetex/sdk/logic/EntityMapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import ru.livetex.sdk.entity.AttributesRequest;
import ru.livetex.sdk.entity.BaseEntity;
import ru.livetex.sdk.entity.Bot;
import ru.livetex.sdk.entity.Creator;
import ru.livetex.sdk.entity.Department;
import ru.livetex.sdk.entity.DepartmentRequestEntity;
import ru.livetex.sdk.entity.DialogState;
Expand All @@ -36,6 +37,8 @@ public class EntityMapper {

public final static Gson gson = new GsonBuilder()
.registerTypeAdapter(BaseEntity.class, new LivetexTypeModelDeserializer())
.registerTypeAdapter(GenericMessage.class, new LivetexGenericMessageDeserializer())
.registerTypeAdapter(Creator.class, new LivetexCreatorDeserializer())
.create();

public BaseEntity toEntity(String jsonStr) {
Expand All @@ -56,12 +59,12 @@ public BaseEntity deserialize(final JsonElement json, final Type typeOfT, final
case DialogState.TYPE: {
return gson.fromJson(json, DialogState.class);
}
case TextMessage.TYPE: {
return parseTextMessage(json);
}
case FileMessage.TYPE: {
return parseFileMessage(json);
}
// case TextMessage.TYPE: {
// return parseTextMessage(json);
// }
// case FileMessage.TYPE: {
// return parseFileMessage(json);
// }
case TypingEvent.TYPE: {
return gson.fromJson(json, TypingEvent.class);
}
Expand All @@ -83,29 +86,29 @@ public BaseEntity deserialize(final JsonElement json, final Type typeOfT, final
case HistoryEntity.TYPE: {
HistoryEntity history = gson.fromJson(json, HistoryEntity.class);

JsonArray messages = jsonObject.getAsJsonArray("messages");

for (int i = 0; i < messages.size(); i++) {
JsonElement message = messages.get(i);

String msgType = message.getAsJsonObject().get("type").getAsString();
GenericMessage msg = null;

switch (msgType) {
case TextMessage.TYPE: {
msg = parseTextMessage(message);
break;
}
case FileMessage.TYPE: {
msg = parseFileMessage(message);
break;
}
}

if (msg != null) {
history.messages.add(msg);
}
}
// JsonArray messages = jsonObject.getAsJsonArray("messages");
//
// for (int i = 0; i < messages.size(); i++) {
// JsonElement message = messages.get(i);
//
// String msgType = message.getAsJsonObject().get("type").getAsString();
// GenericMessage msg = null;
//
// switch (msgType) {
// case TextMessage.TYPE: {
// msg = parseTextMessage(message);
// break;
// }
// case FileMessage.TYPE: {
// msg = parseFileMessage(message);
// break;
// }
// }
//
// if (msg != null) {
// history.messages.add(msg);
// }
// }

return history;
}
Expand All @@ -118,44 +121,60 @@ public BaseEntity deserialize(final JsonElement json, final Type typeOfT, final
}
}
}
}

static class LivetexGenericMessageDeserializer implements JsonDeserializer<GenericMessage> {
@Override
public GenericMessage deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
String msgType = json.getAsJsonObject().get("type").getAsString();
GenericMessage msg = null;

switch (msgType) {
case TextMessage.TYPE: {
msg = parseTextMessage(json);
break;
}
case FileMessage.TYPE: {
msg = parseFileMessage(json);
break;
}
}

return msg;
}

private TextMessage parseTextMessage(JsonElement json) {
TextMessage message = gson.fromJson(json, TextMessage.class);
parseCreator(message, json);
return message;
}

private FileMessage parseFileMessage(JsonElement json) {
FileMessage message = gson.fromJson(json, FileMessage.class);
parseCreator(message, json);
return message;
}
}

private void parseCreator(GenericMessage message, JsonElement json) {
JsonObject jsonObject = json.getAsJsonObject();

JsonObject creator = jsonObject.getAsJsonObject("creator");
String creatorType = creator.get("type").getAsString();
static class LivetexCreatorDeserializer implements JsonDeserializer<Creator> {
@Override
public Creator deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject obj = json.getAsJsonObject();
String creatorType = obj.get("type").getAsString();

switch (creatorType) {
case Employee.TYPE: {
JsonObject creatorObject = creator.getAsJsonObject("employee");
message.setCreator(gson.fromJson(creatorObject, Employee.class));
break;
return gson.fromJson(obj, Employee.class);
}
case Visitor.TYPE: {
message.setCreator(gson.fromJson(creator, Visitor.class));
break;
return gson.fromJson(obj, Visitor.class);
}
case SystemUser.TYPE: {
message.setCreator(gson.fromJson(creator, SystemUser.class));
break;
return gson.fromJson(obj, SystemUser.class);
}
case Bot.TYPE: {
message.setCreator(gson.fromJson(creator, Bot.class));
break;
return gson.fromJson(obj, Bot.class);
}
}
return null;
}
}
}

0 comments on commit 5283da7

Please sign in to comment.