diff --git a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbDocumentModule.java b/src/main/java/de/thm/arsnova/entities/serialization/CouchDbDocumentModule.java index c5af59dfee43a5ea78fa271d8ac2f45c22c24f3e..bf6cfd26ce418719134b4c423d34094cbbb27b91 100644 --- a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbDocumentModule.java +++ b/src/main/java/de/thm/arsnova/entities/serialization/CouchDbDocumentModule.java @@ -28,6 +28,6 @@ public class CouchDbDocumentModule extends SimpleModule { @Override public void setupModule(SetupContext context) { context.setMixInAnnotations(Entity.class, CouchDbDocumentMixIn.class); - context.setMixInAnnotations(de.thm.arsnova.entities.migration.v2.Entity.class, CouchDbDocumentMixIn.class); + context.setMixInAnnotations(de.thm.arsnova.entities.migration.v2.Entity.class, CouchDbDocumentV2MixIn.class); } } diff --git a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbDocumentV2MixIn.java b/src/main/java/de/thm/arsnova/entities/serialization/CouchDbDocumentV2MixIn.java new file mode 100644 index 0000000000000000000000000000000000000000..b1cba4e5d10209e3d49751e1ba6d4209ae00c6be --- /dev/null +++ b/src/main/java/de/thm/arsnova/entities/serialization/CouchDbDocumentV2MixIn.java @@ -0,0 +1,42 @@ +/* + * This file is part of ARSnova Backend. + * Copyright (C) 2012-2017 The ARSnova Team + * + * ARSnova Backend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * ARSnova Backend is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.thm.arsnova.entities.serialization; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import de.thm.arsnova.entities.Entity; + +@JsonIgnoreProperties(value = {"type"}, allowGetters = true) +public abstract class CouchDbDocumentV2MixIn { + @JsonProperty("_id") + @JsonInclude(JsonInclude.Include.NON_EMPTY) + abstract String getId(); + + @JsonProperty("_id") abstract void setId(String id); + + @JsonProperty("_rev") + @JsonInclude(JsonInclude.Include.NON_EMPTY) + abstract String getRevision(); + + @JsonProperty("_rev") abstract String setRevision(String rev); + + @JsonSerialize(converter = CouchDbTypeFieldV2Converter.class) + abstract Class<? extends Entity> getType(); +} diff --git a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldConverter.java b/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldConverter.java index 3a1cf5225722650706541d807de0a57a3e2e952e..b9fefcadb0dc6444cefee70bea07c14b4c00fc18 100644 --- a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldConverter.java +++ b/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldConverter.java @@ -20,36 +20,13 @@ package de.thm.arsnova.entities.serialization; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.type.TypeFactory; import com.fasterxml.jackson.databind.util.Converter; -import de.thm.arsnova.entities.migration.v2.Answer; -import de.thm.arsnova.entities.migration.v2.Comment; -import de.thm.arsnova.entities.migration.v2.Content; -import de.thm.arsnova.entities.migration.v2.DbUser; -import de.thm.arsnova.entities.migration.v2.Entity; -import de.thm.arsnova.entities.migration.v2.LogEntry; -import de.thm.arsnova.entities.migration.v2.Motd; -import de.thm.arsnova.entities.migration.v2.MotdList; -import de.thm.arsnova.entities.migration.v2.Room; - -import java.util.HashMap; -import java.util.Map; +import de.thm.arsnova.entities.Entity; public class CouchDbTypeFieldConverter implements Converter<Class<? extends Entity>, String> { - private static final Map<Class<? extends Entity>, String> typeMapping = new HashMap<>(); - - { - typeMapping.put(LogEntry.class, "log"); - typeMapping.put(DbUser.class, "userdetails"); - typeMapping.put(Motd.class, "motd"); - typeMapping.put(MotdList.class, "motdlist"); - typeMapping.put(Room.class, "session"); - typeMapping.put(Comment.class, "interposed_question"); - typeMapping.put(Content.class, "skill_question"); - typeMapping.put(Answer.class, "skill_question_answer"); - } @Override public String convert(Class<? extends Entity> aClass) { - return typeMapping.get(aClass); + return aClass.getSimpleName(); } @Override diff --git a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldV2Converter.java b/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldV2Converter.java new file mode 100644 index 0000000000000000000000000000000000000000..d0ed69da24e64359ee954d715a0aa54b73559c1b --- /dev/null +++ b/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldV2Converter.java @@ -0,0 +1,64 @@ +/* + * This file is part of ARSnova Backend. + * Copyright (C) 2012-2017 The ARSnova Team + * + * ARSnova Backend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * ARSnova Backend is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.thm.arsnova.entities.serialization; + +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.type.TypeFactory; +import com.fasterxml.jackson.databind.util.Converter; +import de.thm.arsnova.entities.migration.v2.Answer; +import de.thm.arsnova.entities.migration.v2.Comment; +import de.thm.arsnova.entities.migration.v2.Content; +import de.thm.arsnova.entities.migration.v2.DbUser; +import de.thm.arsnova.entities.migration.v2.Entity; +import de.thm.arsnova.entities.migration.v2.LogEntry; +import de.thm.arsnova.entities.migration.v2.Motd; +import de.thm.arsnova.entities.migration.v2.MotdList; +import de.thm.arsnova.entities.migration.v2.Room; + +import java.util.HashMap; +import java.util.Map; + +public class CouchDbTypeFieldV2Converter implements Converter<Class<? extends Entity>, String> { + private static final Map<Class<? extends Entity>, String> typeMapping = new HashMap<>(); + + { + typeMapping.put(LogEntry.class, "log"); + typeMapping.put(DbUser.class, "userdetails"); + typeMapping.put(Motd.class, "motd"); + typeMapping.put(MotdList.class, "motdlist"); + typeMapping.put(Room.class, "session"); + typeMapping.put(Comment.class, "interposed_question"); + typeMapping.put(Content.class, "skill_question"); + typeMapping.put(Answer.class, "skill_question_answer"); + } + + @Override + public String convert(Class<? extends Entity> aClass) { + return typeMapping.get(aClass); + } + + @Override + public JavaType getInputType(TypeFactory typeFactory) { + return typeFactory.constructGeneralizedType(typeFactory.constructType(Class.class), Entity.class); + } + + @Override + public JavaType getOutputType(TypeFactory typeFactory) { + return typeFactory.constructType(String.class); + } +}