diff --git a/src/main/java/de/thm/arsnova/controller/MotdController.java b/src/main/java/de/thm/arsnova/controller/MotdController.java index 95cbc6fa842e2ae9f31b6304198eb126660f0914..f55be007ac6d182b6d5f2543380c744ed58f5362 100644 --- a/src/main/java/de/thm/arsnova/controller/MotdController.java +++ b/src/main/java/de/thm/arsnova/controller/MotdController.java @@ -17,7 +17,7 @@ */ package de.thm.arsnova.controller; -import de.thm.arsnova.entities.Motd; +import de.thm.arsnova.entities.migration.v2.Motd; import de.thm.arsnova.entities.migration.v2.MotdList; import de.thm.arsnova.services.MotdService; import io.swagger.annotations.Api; diff --git a/src/main/java/de/thm/arsnova/entities/Answer.java b/src/main/java/de/thm/arsnova/entities/Answer.java index f564ff3cb9c76854326921500cb28bc6b3747300..e96a298d27c180949abd08383929628ff149de9c 100644 --- a/src/main/java/de/thm/arsnova/entities/Answer.java +++ b/src/main/java/de/thm/arsnova/entities/Answer.java @@ -3,11 +3,14 @@ package de.thm.arsnova.entities; import com.fasterxml.jackson.annotation.JsonView; import de.thm.arsnova.entities.serialization.View; +import java.util.Date; import java.util.Map; public abstract class Answer implements Entity { private String id; private String rev; + private Date creationTimestamp; + private Date updateTimestamp; private String contentId; private String roomId; private String creatorId; @@ -38,6 +41,30 @@ public abstract class Answer implements Entity { this.rev = rev; } + @Override + @JsonView(View.Persistence.class) + public Date getCreationTimestamp() { + return creationTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public void setCreationTimestamp(final Date creationTimestamp) { + this.creationTimestamp = creationTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public Date getUpdateTimestamp() { + return updateTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public void setUpdateTimestamp(final Date updateTimestamp) { + this.updateTimestamp = updateTimestamp; + } + @JsonView({View.Persistence.class, View.Public.class}) public String getContentId() { return contentId; diff --git a/src/main/java/de/thm/arsnova/entities/Comment.java b/src/main/java/de/thm/arsnova/entities/Comment.java index 976691b034065e82c20493b4d1ddf2cf6656df53..414a3969a9f84da9396bd730194b6e1dfbd9165a 100644 --- a/src/main/java/de/thm/arsnova/entities/Comment.java +++ b/src/main/java/de/thm/arsnova/entities/Comment.java @@ -9,6 +9,8 @@ import java.util.Map; public class Comment implements Entity { private String id; private String rev; + private Date creationTimestamp; + private Date updateTimestamp; private String sessionId; private String creatorId; private String subject; @@ -41,6 +43,30 @@ public class Comment implements Entity { this.rev = rev; } + @Override + @JsonView(View.Persistence.class) + public Date getCreationTimestamp() { + return creationTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public void setCreationTimestamp(final Date creationTimestamp) { + this.creationTimestamp = creationTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public Date getUpdateTimestamp() { + return updateTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public void setUpdateTimestamp(final Date updateTimestamp) { + this.updateTimestamp = updateTimestamp; + } + @JsonView({View.Persistence.class, View.Public.class}) public String getSessionId() { return sessionId; diff --git a/src/main/java/de/thm/arsnova/entities/Content.java b/src/main/java/de/thm/arsnova/entities/Content.java index c75c5d4ae92a4bd9ae41b9e5d54c159fefa7ef19..84e60922ff6a30181e7a1ff82059b890148f00a6 100644 --- a/src/main/java/de/thm/arsnova/entities/Content.java +++ b/src/main/java/de/thm/arsnova/entities/Content.java @@ -78,6 +78,8 @@ public class Content implements Entity { private String id; private String rev; + private Date creationTimestamp; + private Date updateTimestamp; private String roomId; private String subject; private String body; @@ -111,6 +113,30 @@ public class Content implements Entity { this.rev = rev; } + @Override + @JsonView(View.Persistence.class) + public Date getCreationTimestamp() { + return creationTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public void setCreationTimestamp(final Date creationTimestamp) { + this.creationTimestamp = creationTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public Date getUpdateTimestamp() { + return updateTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public void setUpdateTimestamp(final Date updateTimestamp) { + this.updateTimestamp = updateTimestamp; + } + @JsonView({View.Persistence.class, View.Public.class}) public String getRoomId() { return roomId; diff --git a/src/main/java/de/thm/arsnova/entities/Entity.java b/src/main/java/de/thm/arsnova/entities/Entity.java index 97b346ba406decd5d0462e4afa6c1cd2ee3caf54..0d0c4538b95e2f96240730ce1671d32d6758f1fa 100644 --- a/src/main/java/de/thm/arsnova/entities/Entity.java +++ b/src/main/java/de/thm/arsnova/entities/Entity.java @@ -1,25 +1,10 @@ -/* - * This file is part of ARSnova Backend. - * Copyright (C) 2012-2018 The ARSnova Team and Contributors - * - * 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; import com.fasterxml.jackson.annotation.JsonView; import de.thm.arsnova.entities.serialization.View; +import java.util.Date; + public interface Entity { String getId(); void setId(String id); @@ -27,6 +12,12 @@ public interface Entity { String getRevision(); void setRevision(String rev); + Date getCreationTimestamp(); + void setCreationTimestamp(Date creationTimestamp); + + Date getUpdateTimestamp(); + void setUpdateTimestamp(Date updateTimestamp); + @JsonView(View.Persistence.class) default Class<? extends Entity> getType() { return getClass(); diff --git a/src/main/java/de/thm/arsnova/entities/LogEntry.java b/src/main/java/de/thm/arsnova/entities/LogEntry.java index 21a0fb8087be99ff5ade4e9cbe91d40dfad5c7bd..96e07cc4f870a6c254bc9dfd4b027e303b14f9c4 100644 --- a/src/main/java/de/thm/arsnova/entities/LogEntry.java +++ b/src/main/java/de/thm/arsnova/entities/LogEntry.java @@ -1,26 +1,10 @@ -/* - * This file is part of ARSnova Backend. - * Copyright (C) 2012-2018 The ARSnova Team and Contributors - * - * 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; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonView; import de.thm.arsnova.entities.serialization.View; +import java.util.Date; import java.util.Map; public class LogEntry implements Entity { @@ -35,7 +19,8 @@ public class LogEntry implements Entity { private String id; private String rev; - private long timestamp = System.currentTimeMillis(); + private Date creationTimestamp; + private Date updateTimestamp; private String event; private int level; private Map<String, Object> payload; @@ -66,14 +51,28 @@ public class LogEntry implements Entity { this.rev = rev; } + @Override @JsonView(View.Persistence.class) - public long getTimestamp() { - return timestamp; + public Date getCreationTimestamp() { + return creationTimestamp; } + @Override @JsonView(View.Persistence.class) - public void setTimestamp(final long timestamp) { - this.timestamp = timestamp; + public void setCreationTimestamp(final Date creationTimestamp) { + this.creationTimestamp = creationTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public Date getUpdateTimestamp() { + return updateTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public void setUpdateTimestamp(final Date updateTimestamp) { + this.updateTimestamp = updateTimestamp; } @JsonView(View.Persistence.class) @@ -97,7 +96,7 @@ public class LogEntry implements Entity { } @JsonView(View.Persistence.class) - public void setLevel(final LogLevel level) { + public void setLevel(final de.thm.arsnova.entities.migration.v2.LogEntry.LogLevel level) { this.level = level.ordinal(); } diff --git a/src/main/java/de/thm/arsnova/entities/MigrationState.java b/src/main/java/de/thm/arsnova/entities/MigrationState.java index 56762825fced7074a1448e0a55399ca30d661023..3d1d27b0cf83cedc6d8ef5d51c7b6823749fbc2e 100644 --- a/src/main/java/de/thm/arsnova/entities/MigrationState.java +++ b/src/main/java/de/thm/arsnova/entities/MigrationState.java @@ -29,6 +29,8 @@ public class MigrationState implements Entity { private String id = "MigrationState"; private String rev; + private Date creationTimestamp; + private Date updateTimestamp; private Migration active; private List<String> completed; @@ -58,6 +60,30 @@ public class MigrationState implements Entity { this.rev = rev; } + @Override + @JsonView(View.Persistence.class) + public Date getCreationTimestamp() { + return creationTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public void setCreationTimestamp(final Date creationTimestamp) { + this.creationTimestamp = creationTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public Date getUpdateTimestamp() { + return updateTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public void setUpdateTimestamp(final Date updateTimestamp) { + this.updateTimestamp = updateTimestamp; + } + @JsonView({View.Persistence.class, View.Public.class}) public Migration getActive() { return active; diff --git a/src/main/java/de/thm/arsnova/entities/Motd.java b/src/main/java/de/thm/arsnova/entities/Motd.java index 6dd90bffca8bcddf8d15836f1a98dfc781cf762a..2c6bbfa12ad96fca9950ba6ecc0751f9e04424a6 100644 --- a/src/main/java/de/thm/arsnova/entities/Motd.java +++ b/src/main/java/de/thm/arsnova/entities/Motd.java @@ -1,169 +1,123 @@ -/* - * This file is part of ARSnova Backend. - * Copyright (C) 2012-2018 The ARSnova Team and Contributors - * - * 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; import com.fasterxml.jackson.annotation.JsonView; import de.thm.arsnova.entities.serialization.View; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import java.util.Date; -/** - * This class represents a message of the day. - */ -@ApiModel(value = "motd", description = "the message of the day entity") public class Motd implements Entity { - - private String motdkey; //ID + private String id; + private String rev; + private Date creationTimestamp; + private Date updateTimestamp; + private String sessionId; private Date startdate; private Date enddate; private String title; - private String text; + private String body; private String audience; - private String sessionId; - private String sessionkey; - private String id; - private String rev; - @ApiModelProperty(required = true, value = "the identification string") @JsonView({View.Persistence.class, View.Public.class}) - public String getMotdkey() { - return motdkey; + public String getId() { + return id; } @JsonView({View.Persistence.class, View.Public.class}) - public void setMotdkey(final String key) { - motdkey = key; + public void setId(final String id) { + this.id = id; } - @ApiModelProperty(required = true, value = "startdate for showing this message (timestamp format)") @JsonView({View.Persistence.class, View.Public.class}) - public Date getStartdate() { - return startdate; + public void setRevision(final String rev) { + this.rev = rev; } @JsonView({View.Persistence.class, View.Public.class}) - public void setStartdate(final Date timestamp) { - startdate = timestamp; + public String getRevision() { + return rev; } - @ApiModelProperty(required = true, value = "enddate for showing this message (timestamp format)") - @JsonView({View.Persistence.class, View.Public.class}) - public Date getEnddate() { - return enddate; + @Override + @JsonView(View.Persistence.class) + public Date getCreationTimestamp() { + return creationTimestamp; } - @JsonView({View.Persistence.class, View.Public.class}) - public void setEnddate(final Date timestamp) { - enddate = timestamp; + @Override + @JsonView(View.Persistence.class) + public void setCreationTimestamp(final Date creationTimestamp) { + this.creationTimestamp = creationTimestamp; } - @ApiModelProperty(required = true, value = "tite of the message") - @JsonView({View.Persistence.class, View.Public.class}) - public String getTitle() { - return title; + @Override + @JsonView(View.Persistence.class) + public Date getUpdateTimestamp() { + return updateTimestamp; } - @JsonView({View.Persistence.class, View.Public.class}) - public void setTitle(final String ttitle) { - title = ttitle; + @Override + @JsonView(View.Persistence.class) + public void setUpdateTimestamp(final Date updateTimestamp) { + this.updateTimestamp = updateTimestamp; } - @ApiModelProperty(required = true, value = "text of the message") @JsonView({View.Persistence.class, View.Public.class}) - public String getText() { - return text; + public String getSessionId() { + return sessionId; } @JsonView({View.Persistence.class, View.Public.class}) - public void setText(final String ttext) { - text = ttext; + public void setSessionId(final String sessionId) { + this.sessionId = sessionId; } - @ApiModelProperty(required = true, value = "defines the target audience for this motd (one of the following: 'student', 'tutor', 'loggedIn', 'all')") @JsonView({View.Persistence.class, View.Public.class}) - public String getAudience() { - return audience; + public Date getStartdate() { + return startdate; } @JsonView({View.Persistence.class, View.Public.class}) - public void setAudience(final String a) { - audience = a; + public void setStartdate(final Date timestamp) { + startdate = timestamp; } @JsonView({View.Persistence.class, View.Public.class}) - public String getSessionId() { - return sessionId; + public Date getEnddate() { + return enddate; } @JsonView({View.Persistence.class, View.Public.class}) - public void setSessionId(final String sessionId) { - this.sessionId = sessionId; + public void setEnddate(final Date timestamp) { + enddate = timestamp; } - @ApiModelProperty(required = true, value = "when audience equals session, the sessionkey referes to the session the messages belong to") @JsonView({View.Persistence.class, View.Public.class}) - public String getSessionkey() { - return sessionkey; + public String getTitle() { + return title; } @JsonView({View.Persistence.class, View.Public.class}) - public void setSessionkey(final String a) { - sessionkey = a; + public void setTitle(final String ttitle) { + title = ttitle; } - @ApiModelProperty(required = true, value = "the couchDB ID") @JsonView({View.Persistence.class, View.Public.class}) - public String getId() { - return id; + public String getBody() { + return body; } @JsonView({View.Persistence.class, View.Public.class}) - public void setId(final String id) { - this.id = id; + public void setBody(final String ttext) { + body = ttext; } @JsonView({View.Persistence.class, View.Public.class}) - public void setRevision(final String rev) { - this.rev = rev; + public String getAudience() { + return audience; } @JsonView({View.Persistence.class, View.Public.class}) - public String getRevision() { - return rev; - } - - @Override - public int hashCode() { - // See http://stackoverflow.com/a/113600 - final int prim = 37; - - int result = 42; - return prim * result + this.motdkey.hashCode(); - } - - @Override - public boolean equals(final Object obj) { - if (obj == null || !obj.getClass().equals(this.getClass())) { - return false; - } - Motd other = (Motd) obj; - return this.getMotdkey().equals(other.getMotdkey()); + public void setAudience(final String a) { + audience = a; } } diff --git a/src/main/java/de/thm/arsnova/entities/Room.java b/src/main/java/de/thm/arsnova/entities/Room.java index 32d71fee8f61b507021acffd17a411e0fcb4ef24..a1ab2a67285dff40913f3a5b7e3ebb129472f05a 100644 --- a/src/main/java/de/thm/arsnova/entities/Room.java +++ b/src/main/java/de/thm/arsnova/entities/Room.java @@ -3,6 +3,7 @@ package de.thm.arsnova.entities; import com.fasterxml.jackson.annotation.JsonView; import de.thm.arsnova.entities.serialization.View; +import java.util.Date; import java.util.List; import java.util.Map; @@ -230,6 +231,8 @@ public class Room implements Entity { private String id; private String rev; + private Date creationTimestamp; + private Date updateTimestamp; private String shortId; private String ownerId; private String name; @@ -267,6 +270,30 @@ public class Room implements Entity { this.rev = rev; } + @Override + @JsonView(View.Persistence.class) + public Date getCreationTimestamp() { + return creationTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public void setCreationTimestamp(final Date creationTimestamp) { + this.creationTimestamp = creationTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public Date getUpdateTimestamp() { + return updateTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public void setUpdateTimestamp(final Date updateTimestamp) { + this.updateTimestamp = updateTimestamp; + } + @JsonView({View.Persistence.class, View.Public.class}) public String getShortId() { return shortId; diff --git a/src/main/java/de/thm/arsnova/entities/TextAnswer.java b/src/main/java/de/thm/arsnova/entities/TextAnswer.java index 881f3e16c877156756697b69a4afd0d71519c96b..8e36c127e2b36ef844d65e731b8e061ecf41bbb7 100644 --- a/src/main/java/de/thm/arsnova/entities/TextAnswer.java +++ b/src/main/java/de/thm/arsnova/entities/TextAnswer.java @@ -9,7 +9,6 @@ public class TextAnswer extends Answer { private String subject; private String body; private boolean read; - private Date timestamp; @JsonView({View.Persistence.class, View.Public.class}) public String getSubject() { @@ -41,13 +40,9 @@ public class TextAnswer extends Answer { this.read = read; } + @Override @JsonView({View.Persistence.class, View.Public.class}) - public Date getTimestamp() { - return timestamp; - } - - @JsonView(View.Persistence.class) - public void setTimestamp(final Date timestamp) { - this.timestamp = timestamp; + public Date getCreationTimestamp() { + return getCreationTimestamp(); } } diff --git a/src/main/java/de/thm/arsnova/entities/UserProfile.java b/src/main/java/de/thm/arsnova/entities/UserProfile.java index 515422b48dfae0c046fd2d502b1cc2fd4208e95d..30e09650a0db86511a9de5c0c39d0beab6a74439 100644 --- a/src/main/java/de/thm/arsnova/entities/UserProfile.java +++ b/src/main/java/de/thm/arsnova/entities/UserProfile.java @@ -90,9 +90,10 @@ public class UserProfile implements Entity { private String id; private String rev; + private Date creationTimestamp; + private Date updateTimestamp; private String authProvider; private String loginId; - private Date creationTimestamp; private Date lastLoginTimestamp; private Account account; private List<RoomHistoryEntry> roomHistory = new ArrayList<>(); @@ -123,6 +124,30 @@ public class UserProfile implements Entity { this.rev = rev; } + @Override + @JsonView(View.Persistence.class) + public Date getCreationTimestamp() { + return creationTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public void setCreationTimestamp(final Date creationTimestamp) { + this.creationTimestamp = creationTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public Date getUpdateTimestamp() { + return updateTimestamp; + } + + @Override + @JsonView(View.Persistence.class) + public void setUpdateTimestamp(final Date updateTimestamp) { + this.updateTimestamp = updateTimestamp; + } + @JsonView({View.Persistence.class, View.Public.class}) public String getAuthProvider() { return authProvider; @@ -143,16 +168,6 @@ public class UserProfile implements Entity { this.loginId = loginId; } - @JsonView({View.Persistence.class, View.Public.class}) - public Date getCreationTimestamp() { - return creationTimestamp; - } - - @JsonView(View.Persistence.class) - public void setCreationTimestamp(final Date creationTimestamp) { - this.creationTimestamp = creationTimestamp; - } - @JsonView({View.Persistence.class, View.Public.class}) public Date getLastLoginTimestamp() { return lastLoginTimestamp; diff --git a/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java b/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java index 4b9614c8b6a8a06160af1423222f317748d9c010..463cfa98c331d3893a783dc9af4c59783db2a7f1 100644 --- a/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java +++ b/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java @@ -19,7 +19,6 @@ package de.thm.arsnova.entities.migration; import de.thm.arsnova.entities.ChoiceAnswer; import de.thm.arsnova.entities.ChoiceQuestionContent; -import de.thm.arsnova.entities.Entity; import de.thm.arsnova.entities.TextAnswer; import de.thm.arsnova.entities.UserProfile; import de.thm.arsnova.entities.migration.v2.Answer; @@ -27,6 +26,7 @@ import de.thm.arsnova.entities.migration.v2.AnswerOption; 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.LoggedIn; import de.thm.arsnova.entities.migration.v2.MotdList; import de.thm.arsnova.entities.migration.v2.Room; @@ -43,7 +43,7 @@ import java.util.stream.Collectors; * @author Daniel Gerhardt */ public class FromV2Migrator { - private void copyCommonProperties(final Entity from, final Entity to) { + private void copyCommonProperties(final Entity from, final de.thm.arsnova.entities.Entity to) { to.setId(from.getId()); to.setRevision(from.getRevision()); } diff --git a/src/main/java/de/thm/arsnova/entities/migration/ToV2Migrator.java b/src/main/java/de/thm/arsnova/entities/migration/ToV2Migrator.java index da491123620a0f44634adfbf913402f0558e997a..90924ebba7768092424aa159a8ace9736def1078 100644 --- a/src/main/java/de/thm/arsnova/entities/migration/ToV2Migrator.java +++ b/src/main/java/de/thm/arsnova/entities/migration/ToV2Migrator.java @@ -18,7 +18,7 @@ package de.thm.arsnova.entities.migration; import de.thm.arsnova.entities.ChoiceQuestionContent; -import de.thm.arsnova.entities.Entity; +import de.thm.arsnova.entities.migration.v2.Entity; import de.thm.arsnova.entities.UserProfile; import de.thm.arsnova.entities.migration.v2.Answer; import de.thm.arsnova.entities.migration.v2.AnswerOption; @@ -39,7 +39,7 @@ import java.util.stream.Collectors; * @author Daniel Gerhardt */ public class ToV2Migrator { - private void copyCommonProperties(final Entity from, final Entity to) { + private void copyCommonProperties(final de.thm.arsnova.entities.Entity from, final Entity to) { to.setId(from.getId()); to.setRevision(from.getRevision()); } diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/Answer.java b/src/main/java/de/thm/arsnova/entities/migration/v2/Answer.java index 7c13d76bd6a3da9733a3db366a289a89f9af9d34..44bbab41951db65f9118120ee3c38866ec321874 100644 --- a/src/main/java/de/thm/arsnova/entities/migration/v2/Answer.java +++ b/src/main/java/de/thm/arsnova/entities/migration/v2/Answer.java @@ -19,7 +19,6 @@ package de.thm.arsnova.entities.migration.v2; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonView; -import de.thm.arsnova.entities.Entity; import de.thm.arsnova.entities.serialization.View; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/Comment.java b/src/main/java/de/thm/arsnova/entities/migration/v2/Comment.java index 9dd6196ee0983898e9156c009670ed3b95045714..224a8adaaf96bc4ec139a74002b244ed01767b0f 100644 --- a/src/main/java/de/thm/arsnova/entities/migration/v2/Comment.java +++ b/src/main/java/de/thm/arsnova/entities/migration/v2/Comment.java @@ -18,7 +18,6 @@ package de.thm.arsnova.entities.migration.v2; import com.fasterxml.jackson.annotation.JsonView; -import de.thm.arsnova.entities.Entity; import de.thm.arsnova.entities.UserAuthentication; import de.thm.arsnova.entities.serialization.View; import io.swagger.annotations.ApiModel; diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/Content.java b/src/main/java/de/thm/arsnova/entities/migration/v2/Content.java index e372c05e7908760f0f60cf9c23898809bc8971ac..30f1ce7a4d7b9cfbb9b9013d10d6aea375e340a4 100644 --- a/src/main/java/de/thm/arsnova/entities/migration/v2/Content.java +++ b/src/main/java/de/thm/arsnova/entities/migration/v2/Content.java @@ -18,7 +18,6 @@ package de.thm.arsnova.entities.migration.v2; import com.fasterxml.jackson.annotation.JsonView; -import de.thm.arsnova.entities.Entity; import de.thm.arsnova.entities.serialization.View; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/DbUser.java b/src/main/java/de/thm/arsnova/entities/migration/v2/DbUser.java index 539c80c7aa6a09227d794cae87052e90dd12cc9e..610be70a6727aec686769ad038d7dc10d140d420 100644 --- a/src/main/java/de/thm/arsnova/entities/migration/v2/DbUser.java +++ b/src/main/java/de/thm/arsnova/entities/migration/v2/DbUser.java @@ -18,7 +18,6 @@ package de.thm.arsnova.entities.migration.v2; import com.fasterxml.jackson.annotation.JsonView; -import de.thm.arsnova.entities.Entity; import de.thm.arsnova.entities.serialization.View; /** diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/Entity.java b/src/main/java/de/thm/arsnova/entities/migration/v2/Entity.java new file mode 100644 index 0000000000000000000000000000000000000000..6eda9e8ba859057312f39a9604f535a68399b190 --- /dev/null +++ b/src/main/java/de/thm/arsnova/entities/migration/v2/Entity.java @@ -0,0 +1,36 @@ +/* + * 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.migration.v2; + +import com.fasterxml.jackson.annotation.JsonView; +import de.thm.arsnova.entities.serialization.View; + +import java.util.Date; + +public interface Entity { + String getId(); + void setId(String id); + + String getRevision(); + void setRevision(String rev); + + @JsonView(View.Persistence.class) + default Class<? extends Entity> getType() { + return getClass(); + } +} diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/LogEntry.java b/src/main/java/de/thm/arsnova/entities/migration/v2/LogEntry.java new file mode 100644 index 0000000000000000000000000000000000000000..a4c8b35ab52c4e58271c3dc7df5b24e8961bf543 --- /dev/null +++ b/src/main/java/de/thm/arsnova/entities/migration/v2/LogEntry.java @@ -0,0 +1,113 @@ +/* + * 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.migration.v2; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonView; +import de.thm.arsnova.entities.serialization.View; + +import java.util.Map; + +public class LogEntry implements Entity { + public enum LogLevel { + TRACE, + DEBUG, + INFO, + WARN, + ERROR, + FATAL + } + + private String id; + private String rev; + private long timestamp = System.currentTimeMillis(); + private String event; + private int level; + private Map<String, Object> payload; + + public LogEntry(@JsonProperty String event, @JsonProperty int level, @JsonProperty Map<String, Object> payload) { + this.event = event; + this.level = level; + this.payload = payload; + } + + @JsonView(View.Persistence.class) + public String getId() { + return id; + } + + @JsonView(View.Persistence.class) + public void setId(final String id) { + this.id = id; + } + + @JsonView(View.Persistence.class) + public String getRevision() { + return rev; + } + + @JsonView(View.Persistence.class) + public void setRevision(final String rev) { + this.rev = rev; + } + + @JsonView(View.Persistence.class) + public long getTimestamp() { + return timestamp; + } + + @JsonView(View.Persistence.class) + public void setTimestamp(final long timestamp) { + this.timestamp = timestamp; + } + + @JsonView(View.Persistence.class) + public String getEvent() { + return event; + } + + @JsonView(View.Persistence.class) + public void setEvent(final String event) { + this.event = event; + } + + @JsonView(View.Persistence.class) + public int getLevel() { + return level; + } + + @JsonView(View.Persistence.class) + public void setLevel(final int level) { + this.level = level; + } + + @JsonView(View.Persistence.class) + public void setLevel(final LogLevel level) { + this.level = level.ordinal(); + } + + @JsonView(View.Persistence.class) + public Map<String, Object> getPayload() { + return payload; + } + + @JsonView(View.Persistence.class) + public void setPayload(final Map<String, Object> payload) { + this.payload = payload; + } +} diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/LoggedIn.java b/src/main/java/de/thm/arsnova/entities/migration/v2/LoggedIn.java index 2a346db7c1fe0493937119675c8c03301b3b341e..c70e7354b5ddda32440d13787394472caa0228a7 100644 --- a/src/main/java/de/thm/arsnova/entities/migration/v2/LoggedIn.java +++ b/src/main/java/de/thm/arsnova/entities/migration/v2/LoggedIn.java @@ -18,7 +18,6 @@ package de.thm.arsnova.entities.migration.v2; import com.fasterxml.jackson.annotation.JsonView; -import de.thm.arsnova.entities.Entity; import de.thm.arsnova.entities.serialization.View; import java.util.ArrayList; diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/Motd.java b/src/main/java/de/thm/arsnova/entities/migration/v2/Motd.java new file mode 100644 index 0000000000000000000000000000000000000000..176f12c2a3ccf848edea6dc8928b86448869c485 --- /dev/null +++ b/src/main/java/de/thm/arsnova/entities/migration/v2/Motd.java @@ -0,0 +1,169 @@ +/* + * 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.migration.v2; + +import com.fasterxml.jackson.annotation.JsonView; +import de.thm.arsnova.entities.serialization.View; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.util.Date; + +/** + * This class represents a message of the day. + */ +@ApiModel(value = "motd", description = "the message of the day entity") +public class Motd implements Entity { + + private String motdkey; //ID + private Date startdate; + private Date enddate; + private String title; + private String text; + private String audience; + private String sessionId; + private String sessionkey; + private String id; + private String rev; + + @ApiModelProperty(required = true, value = "the identification string") + @JsonView({View.Persistence.class, View.Public.class}) + public String getMotdkey() { + return motdkey; + } + + @JsonView({View.Persistence.class, View.Public.class}) + public void setMotdkey(final String key) { + motdkey = key; + } + + @ApiModelProperty(required = true, value = "startdate for showing this message (timestamp format)") + @JsonView({View.Persistence.class, View.Public.class}) + public Date getStartdate() { + return startdate; + } + + @JsonView({View.Persistence.class, View.Public.class}) + public void setStartdate(final Date timestamp) { + startdate = timestamp; + } + + @ApiModelProperty(required = true, value = "enddate for showing this message (timestamp format)") + @JsonView({View.Persistence.class, View.Public.class}) + public Date getEnddate() { + return enddate; + } + + @JsonView({View.Persistence.class, View.Public.class}) + public void setEnddate(final Date timestamp) { + enddate = timestamp; + } + + @ApiModelProperty(required = true, value = "tite of the message") + @JsonView({View.Persistence.class, View.Public.class}) + public String getTitle() { + return title; + } + + @JsonView({View.Persistence.class, View.Public.class}) + public void setTitle(final String ttitle) { + title = ttitle; + } + + @ApiModelProperty(required = true, value = "text of the message") + @JsonView({View.Persistence.class, View.Public.class}) + public String getText() { + return text; + } + + @JsonView({View.Persistence.class, View.Public.class}) + public void setText(final String ttext) { + text = ttext; + } + + @ApiModelProperty(required = true, value = "defines the target audience for this motd (one of the following: 'student', 'tutor', 'loggedIn', 'all')") + @JsonView({View.Persistence.class, View.Public.class}) + public String getAudience() { + return audience; + } + + @JsonView({View.Persistence.class, View.Public.class}) + public void setAudience(final String a) { + audience = a; + } + + @JsonView({View.Persistence.class, View.Public.class}) + public String getSessionId() { + return sessionId; + } + + @JsonView({View.Persistence.class, View.Public.class}) + public void setSessionId(final String sessionId) { + this.sessionId = sessionId; + } + + @ApiModelProperty(required = true, value = "when audience equals session, the sessionkey referes to the session the messages belong to") + @JsonView({View.Persistence.class, View.Public.class}) + public String getSessionkey() { + return sessionkey; + } + + @JsonView({View.Persistence.class, View.Public.class}) + public void setSessionkey(final String a) { + sessionkey = a; + } + + @ApiModelProperty(required = true, value = "the couchDB ID") + @JsonView({View.Persistence.class, View.Public.class}) + public String getId() { + return id; + } + + @JsonView({View.Persistence.class, View.Public.class}) + public void setId(final String id) { + this.id = id; + } + + @JsonView({View.Persistence.class, View.Public.class}) + public void setRevision(final String rev) { + this.rev = rev; + } + + @JsonView({View.Persistence.class, View.Public.class}) + public String getRevision() { + return rev; + } + + @Override + public int hashCode() { + // See http://stackoverflow.com/a/113600 + final int prim = 37; + + int result = 42; + return prim * result + this.motdkey.hashCode(); + } + + @Override + public boolean equals(final Object obj) { + if (obj == null || !obj.getClass().equals(this.getClass())) { + return false; + } + Motd other = (Motd) obj; + return this.getMotdkey().equals(other.getMotdkey()); + } +} diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/MotdList.java b/src/main/java/de/thm/arsnova/entities/migration/v2/MotdList.java index 357e0308a97ddd8122ead487b9a99847f749c10f..c817113c5fd3614a1205ebb33e65fca9401d748a 100644 --- a/src/main/java/de/thm/arsnova/entities/migration/v2/MotdList.java +++ b/src/main/java/de/thm/arsnova/entities/migration/v2/MotdList.java @@ -18,7 +18,6 @@ package de.thm.arsnova.entities.migration.v2; import com.fasterxml.jackson.annotation.JsonView; -import de.thm.arsnova.entities.Entity; import de.thm.arsnova.entities.serialization.View; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/Room.java b/src/main/java/de/thm/arsnova/entities/migration/v2/Room.java index 205c409cdb8a9d7504557186205550eaf99df6f1..82aa5dbed635e616b9822feeafe69f8a134f9364 100644 --- a/src/main/java/de/thm/arsnova/entities/migration/v2/Room.java +++ b/src/main/java/de/thm/arsnova/entities/migration/v2/Room.java @@ -19,7 +19,6 @@ package de.thm.arsnova.entities.migration.v2; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonView; -import de.thm.arsnova.entities.Entity; import de.thm.arsnova.entities.ScoreOptions; import de.thm.arsnova.entities.UserAuthentication; import de.thm.arsnova.entities.serialization.View; 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 e0d489539205299ff936bf68fba942dd643c5ffe..e261d15a1c4c98f906974816089bf87c2cc55196 100644 --- a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldConverter.java +++ b/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldConverter.java @@ -23,9 +23,9 @@ 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.DbUser; -import de.thm.arsnova.entities.Entity; -import de.thm.arsnova.entities.LogEntry; -import de.thm.arsnova.entities.Motd; +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.Content; import de.thm.arsnova.entities.migration.v2.MotdList; import de.thm.arsnova.entities.migration.v2.Room; diff --git a/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java b/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java index 6bc382efc392247d23437c432bde8b9354f094a7..4f1e8a4bdd9cfdc6f221451039722f884c131512 100644 --- a/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java +++ b/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java @@ -21,7 +21,7 @@ import com.fasterxml.jackson.annotation.JsonView; 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.Motd; +import de.thm.arsnova.entities.migration.v2.Motd; import de.thm.arsnova.entities.migration.v2.Room; import de.thm.arsnova.entities.migration.v2.RoomFeature; import de.thm.arsnova.entities.migration.v2.RoomInfo; diff --git a/src/main/java/de/thm/arsnova/persistance/LogEntryRepository.java b/src/main/java/de/thm/arsnova/persistance/LogEntryRepository.java index 1515e340c2b53530848f9a3b2d6ba9f3e311a61b..f6e059a90e271c00ab22fd9719a1cd85d209535b 100644 --- a/src/main/java/de/thm/arsnova/persistance/LogEntryRepository.java +++ b/src/main/java/de/thm/arsnova/persistance/LogEntryRepository.java @@ -17,7 +17,7 @@ */ package de.thm.arsnova.persistance; -import de.thm.arsnova.entities.LogEntry; +import de.thm.arsnova.entities.migration.v2.LogEntry; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/de/thm/arsnova/persistance/MotdRepository.java b/src/main/java/de/thm/arsnova/persistance/MotdRepository.java index f403ccb271ee40c73f8685f4ee7551c097bc571e..e8c8a752e75977fdfe68920a48bbd016917abbb1 100644 --- a/src/main/java/de/thm/arsnova/persistance/MotdRepository.java +++ b/src/main/java/de/thm/arsnova/persistance/MotdRepository.java @@ -17,7 +17,7 @@ */ package de.thm.arsnova.persistance; -import de.thm.arsnova.entities.Motd; +import de.thm.arsnova.entities.migration.v2.Motd; import org.springframework.data.repository.CrudRepository; import java.util.List; diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbLogEntryRepository.java b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbLogEntryRepository.java index 33abf56ec809e85c48c5b05e0104a7bfa5a7b813..c25d5b7b0504cebb6afd4df5b567c3fa1235d665 100644 --- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbLogEntryRepository.java +++ b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbLogEntryRepository.java @@ -17,7 +17,7 @@ */ package de.thm.arsnova.persistance.couchdb; -import de.thm.arsnova.entities.LogEntry; +import de.thm.arsnova.entities.migration.v2.LogEntry; import de.thm.arsnova.persistance.LogEntryRepository; import org.ektorp.CouchDbConnector; import org.ektorp.support.CouchDbRepositorySupport; diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbMotdRepository.java b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbMotdRepository.java index d7c5317b9d981df8dbcae5a6684cdfe504fd9979..e0e2650afc7c9a10be5e3aab795864a9bd4af27d 100644 --- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbMotdRepository.java +++ b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbMotdRepository.java @@ -17,7 +17,7 @@ */ package de.thm.arsnova.persistance.couchdb; -import de.thm.arsnova.entities.Motd; +import de.thm.arsnova.entities.migration.v2.Motd; import de.thm.arsnova.persistance.MotdRepository; import org.ektorp.CouchDbConnector; import org.slf4j.Logger; diff --git a/src/main/java/de/thm/arsnova/services/DefaultEntityServiceImpl.java b/src/main/java/de/thm/arsnova/services/DefaultEntityServiceImpl.java index c65f2f09fa0680a390fdbf252c39bf2922058a94..69222b3f039c40ef67b6b977d381fd9b6370e727 100644 --- a/src/main/java/de/thm/arsnova/services/DefaultEntityServiceImpl.java +++ b/src/main/java/de/thm/arsnova/services/DefaultEntityServiceImpl.java @@ -28,6 +28,7 @@ import org.springframework.security.access.prepost.PreFilter; import java.io.IOException; import java.util.Collection; +import java.util.Date; import java.util.Map; import java.util.function.Function; @@ -61,6 +62,8 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService if (entity.getId() != null || entity.getRevision() != null) { throw new IllegalArgumentException("Entity is not new."); } + entity.setCreationTimestamp(new Date()); + return repository.save(entity); } @@ -68,6 +71,8 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService @PreAuthorize("hasPermission(#oldEntity, 'update')") public T update(final T oldEntity, final T newEntity) { newEntity.setId(oldEntity.getId()); + newEntity.setUpdateTimestamp(new Date()); + return repository.save(newEntity); } @@ -84,6 +89,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService ObjectReader reader = objectMapper.readerForUpdating(obj).withView(View.Public.class); JsonNode tree = objectMapper.valueToTree(changes); reader.readValue(tree); + entity.setUpdateTimestamp(new Date()); return repository.save(entity); } @@ -102,6 +108,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService Object obj = propertyGetter.apply(entity); ObjectReader reader = objectMapper.readerForUpdating(obj).withView(View.Public.class); reader.readValue(tree); + entity.setUpdateTimestamp(new Date()); } return repository.save(entities); diff --git a/src/main/java/de/thm/arsnova/services/MotdService.java b/src/main/java/de/thm/arsnova/services/MotdService.java index c0d262c4fb70dd789df89decabb1786c31efc9d4..10133269968af46dc609fab745f0f4aca3d7729d 100644 --- a/src/main/java/de/thm/arsnova/services/MotdService.java +++ b/src/main/java/de/thm/arsnova/services/MotdService.java @@ -17,7 +17,7 @@ */ package de.thm.arsnova.services; -import de.thm.arsnova.entities.Motd; +import de.thm.arsnova.entities.migration.v2.Motd; import de.thm.arsnova.entities.migration.v2.MotdList; import java.util.Date; diff --git a/src/main/java/de/thm/arsnova/services/MotdServiceImpl.java b/src/main/java/de/thm/arsnova/services/MotdServiceImpl.java index 34abcf4b0111c700afd7a3dd9e6770ccaaade72f..c1f826901f73a1f9cf61204185957f0e975174ba 100644 --- a/src/main/java/de/thm/arsnova/services/MotdServiceImpl.java +++ b/src/main/java/de/thm/arsnova/services/MotdServiceImpl.java @@ -17,7 +17,7 @@ */ package de.thm.arsnova.services; -import de.thm.arsnova.entities.Motd; +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 de.thm.arsnova.entities.UserAuthentication;