Skip to content
Snippets Groups Projects
Commit b865d6a1 authored by Daniel Gerhardt's avatar Daniel Gerhardt
Browse files

Provide hashCode, equals and toString implementations for Entity

parent 79ebd56c
Branches
1 merge request!89Foundation for development of version 3.0
Showing
with 464 additions and 373 deletions
...@@ -4,73 +4,21 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; ...@@ -4,73 +4,21 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonView; import com.fasterxml.jackson.annotation.JsonView;
import de.thm.arsnova.entities.serialization.View; import de.thm.arsnova.entities.serialization.View;
import java.util.Date;
import java.util.Map; import java.util.Map;
import java.util.Objects;
@JsonTypeInfo( @JsonTypeInfo(
use = JsonTypeInfo.Id.MINIMAL_CLASS, use = JsonTypeInfo.Id.MINIMAL_CLASS,
include = JsonTypeInfo.As.PROPERTY, include = JsonTypeInfo.As.PROPERTY,
property = "type" property = "type"
) )
public abstract class Answer implements Entity { public abstract class Answer extends Entity {
private String id;
private String rev;
private Date creationTimestamp;
private Date updateTimestamp;
private String contentId; private String contentId;
private String roomId; private String roomId;
private String creatorId; private String creatorId;
private int round; private int round;
private Map<String, Map<String, ?>> extensions; private Map<String, Map<String, ?>> extensions;
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getId() {
return id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setId(final String id) {
this.id = id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getRevision() {
return rev;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setRevision(final String rev) {
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}) @JsonView({View.Persistence.class, View.Public.class})
public String getContentId() { public String getContentId() {
return contentId; return contentId;
...@@ -119,4 +67,26 @@ public abstract class Answer implements Entity { ...@@ -119,4 +67,26 @@ public abstract class Answer implements Entity {
public void setExtensions(Map<String, Map<String, ?>> extensions) { public void setExtensions(Map<String, Map<String, ?>> extensions) {
this.extensions = extensions; this.extensions = extensions;
} }
/**
* {@inheritDoc}
*
* The following fields of <tt>Answer</tt> are excluded from equality checks:
* {@link #extensions}.
*/
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
final Answer answer = (Answer) o;
return round == answer.round &&
Objects.equals(contentId, answer.contentId) &&
Objects.equals(roomId, answer.roomId) &&
Objects.equals(creatorId, answer.creatorId);
}
} }
...@@ -3,13 +3,9 @@ package de.thm.arsnova.entities; ...@@ -3,13 +3,9 @@ package de.thm.arsnova.entities;
import com.fasterxml.jackson.annotation.JsonView; import com.fasterxml.jackson.annotation.JsonView;
import de.thm.arsnova.entities.serialization.View; import de.thm.arsnova.entities.serialization.View;
import java.util.Date; import java.util.Objects;
public class Attachment implements Entity { public class Attachment extends Entity {
private String id;
private String rev;
private Date creationTimestamp;
private Date updateTimestamp;
private String mediaType; private String mediaType;
private long size; private long size;
private String originalSourceUrl; private String originalSourceUrl;
...@@ -39,30 +35,6 @@ public class Attachment implements Entity { ...@@ -39,30 +35,6 @@ public class Attachment implements Entity {
this.rev = rev; 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}) @JsonView({View.Persistence.class, View.Public.class})
public String getMediaType() { public String getMediaType() {
return mediaType; return mediaType;
...@@ -102,4 +74,25 @@ public class Attachment implements Entity { ...@@ -102,4 +74,25 @@ public class Attachment implements Entity {
public void setStorageLocation(String storageLocation) { public void setStorageLocation(String storageLocation) {
this.storageLocation = storageLocation; this.storageLocation = storageLocation;
} }
/**
* {@inheritDoc}
*
* All fields of <tt>Attachment</tt> are included in equality checks.
*/
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
final Attachment that = (Attachment) o;
return size == that.size &&
Objects.equals(mediaType, that.mediaType) &&
Objects.equals(originalSourceUrl, that.originalSourceUrl) &&
Objects.equals(storageLocation, that.storageLocation);
}
} }
...@@ -5,12 +5,9 @@ import de.thm.arsnova.entities.serialization.View; ...@@ -5,12 +5,9 @@ import de.thm.arsnova.entities.serialization.View;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
import java.util.Objects;
public class Comment implements Entity { public class Comment extends Entity {
private String id;
private String rev;
private Date creationTimestamp;
private Date updateTimestamp;
private String roomId; private String roomId;
private String creatorId; private String creatorId;
private String subject; private String subject;
...@@ -19,54 +16,6 @@ public class Comment implements Entity { ...@@ -19,54 +16,6 @@ public class Comment implements Entity {
private boolean read; private boolean read;
private Map<String, Map<String, ?>> extensions; private Map<String, Map<String, ?>> extensions;
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getId() {
return id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setId(final String id) {
this.id = id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getRevision() {
return rev;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setRevision(final String rev) {
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}) @JsonView({View.Persistence.class, View.Public.class})
public String getRoomId() { public String getRoomId() {
return roomId; return roomId;
...@@ -136,4 +85,29 @@ public class Comment implements Entity { ...@@ -136,4 +85,29 @@ public class Comment implements Entity {
public void setExtensions(Map<String, Map<String, ?>> extensions) { public void setExtensions(Map<String, Map<String, ?>> extensions) {
this.extensions = extensions; this.extensions = extensions;
} }
/**
* {@inheritDoc}
*
* The following fields of <tt>LogEntry</tt> are excluded from equality checks:
* {@link #extensions}.
*/
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
final Comment comment = (Comment) o;
return read == comment.read &&
Objects.equals(roomId, comment.roomId) &&
Objects.equals(creatorId, comment.creatorId) &&
Objects.equals(subject, comment.subject) &&
Objects.equals(body, comment.body) &&
Objects.equals(timestamp, comment.timestamp) &&
Objects.equals(extensions, comment.extensions);
}
} }
...@@ -6,13 +6,14 @@ import de.thm.arsnova.entities.serialization.View; ...@@ -6,13 +6,14 @@ import de.thm.arsnova.entities.serialization.View;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
import java.util.Objects;
@JsonTypeInfo( @JsonTypeInfo(
use = JsonTypeInfo.Id.MINIMAL_CLASS, use = JsonTypeInfo.Id.MINIMAL_CLASS,
include = JsonTypeInfo.As.PROPERTY, include = JsonTypeInfo.As.PROPERTY,
property = "type" property = "type"
) )
public class Content implements Entity { public class Content extends Entity {
public enum Format { public enum Format {
CHOICE, CHOICE,
BINARY, BINARY,
...@@ -91,10 +92,6 @@ public class Content implements Entity { ...@@ -91,10 +92,6 @@ public class Content implements Entity {
} }
} }
private String id;
private String rev;
private Date creationTimestamp;
private Date updateTimestamp;
private String roomId; private String roomId;
private String subject; private String subject;
private String body; private String body;
...@@ -105,54 +102,6 @@ public class Content implements Entity { ...@@ -105,54 +102,6 @@ public class Content implements Entity {
private Map<String, Map<String, ?>> extensions; private Map<String, Map<String, ?>> extensions;
private Map<String, String> attachments; private Map<String, String> attachments;
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getId() {
return id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setId(final String id) {
this.id = id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getRevision() {
return rev;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setRevision(final String rev) {
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}) @JsonView({View.Persistence.class, View.Public.class})
public String getRoomId() { public String getRoomId() {
return roomId; return roomId;
...@@ -246,4 +195,28 @@ public class Content implements Entity { ...@@ -246,4 +195,28 @@ public class Content implements Entity {
public void setAttachments(final Map<String, String> attachments) { public void setAttachments(final Map<String, String> attachments) {
this.attachments = attachments; this.attachments = attachments;
} }
/**
* {@inheritDoc}
*
* The following fields of <tt>LogEntry</tt> are excluded from equality checks:
* {@link #state}, {@link #extensions}, {@link #attachments}.
*/
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
final Content content = (Content) o;
return Objects.equals(roomId, content.roomId) &&
Objects.equals(subject, content.subject) &&
Objects.equals(body, content.body) &&
format == content.format &&
Objects.equals(group, content.group) &&
Objects.equals(timestamp, content.timestamp);
}
} }
/*
* This file is part of ARSnova Backend.
* Copyright (C) 2012-2018 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; package de.thm.arsnova.entities;
import com.fasterxml.jackson.annotation.JsonView; import com.fasterxml.jackson.annotation.JsonView;
import de.thm.arsnova.entities.serialization.View; import de.thm.arsnova.entities.serialization.View;
import org.springframework.core.style.ToStringCreator;
import java.util.Date; import java.util.Date;
import java.util.Objects;
public interface Entity { /**
String getId(); * Used as base for classes that represent persistent data with an unique ID.
void setId(String id); *
* @author Daniel Gerhardt
*/
public abstract class Entity {
protected String id;
protected String rev;
protected Date creationTimestamp;
protected Date updateTimestamp;
String getRevision(); @JsonView({View.Persistence.class, View.Public.class})
void setRevision(String rev); 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 String getRevision() {
return rev;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setRevision(final String rev) {
this.rev = rev;
}
Date getCreationTimestamp(); @JsonView(View.Persistence.class)
void setCreationTimestamp(Date creationTimestamp); public Date getCreationTimestamp() {
return creationTimestamp;
}
@JsonView(View.Persistence.class)
public void setCreationTimestamp(final Date creationTimestamp) {
this.creationTimestamp = creationTimestamp;
}
@JsonView(View.Persistence.class)
public Date getUpdateTimestamp() {
return updateTimestamp;
}
Date getUpdateTimestamp(); @JsonView(View.Persistence.class)
void setUpdateTimestamp(Date updateTimestamp); public void setUpdateTimestamp(final Date updateTimestamp) {
this.updateTimestamp = updateTimestamp;
}
@JsonView(View.Persistence.class) @JsonView(View.Persistence.class)
default Class<? extends Entity> getType() { public Class<? extends Entity> getType() {
return getClass(); return getClass();
} }
@Override
public int hashCode() {
return Objects.hash(id, rev, creationTimestamp, updateTimestamp);
}
/**
* Use this helper method when overriding {@link #hashCode()}.
*
* @param init The result of <tt>super.hashCode()</tt>
* @param additionalFields Fields introduced by the subclass which should be included in the hash code generation
*
* @see java.util.Arrays#hashCode(Object[])
*/
protected int hashCode(final int init, final Object... additionalFields) {
int result = init;
if (additionalFields == null) {
return result;
}
for (Object element : additionalFields) {
result = 31 * result + (element == null ? 0 : element.hashCode());
}
return result;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
final Entity entity = (Entity) o;
return Objects.equals(id, entity.id) &&
Objects.equals(rev, entity.rev) &&
Objects.equals(creationTimestamp, entity.creationTimestamp) &&
Objects.equals(updateTimestamp, entity.updateTimestamp);
}
@Override
public String toString() {
return buildToString().toString();
}
/**
* Use this helper method to adjust the output of {@link #toString()}.
* Override this method instead of <tt>toString()</tt> and call <tt>super.buildToString()</tt>.
* Additional fields can be added to the String by calling
* {@link org.springframework.core.style.ToStringCreator#append} on the <tt>ToStringCreator</tt>.
*/
protected ToStringCreator buildToString() {
ToStringCreator toStringCreator = new ToStringCreator(this);
toStringCreator
.append("id", id)
.append("revision", rev)
.append("creationTimestamp", creationTimestamp)
.append("updateTimestamp", updateTimestamp);
return toStringCreator;
}
} }
...@@ -6,8 +6,9 @@ import de.thm.arsnova.entities.serialization.View; ...@@ -6,8 +6,9 @@ import de.thm.arsnova.entities.serialization.View;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
import java.util.Objects;
public class LogEntry implements Entity { public class LogEntry extends Entity {
public enum LogLevel { public enum LogLevel {
TRACE, TRACE,
DEBUG, DEBUG,
...@@ -109,4 +110,28 @@ public class LogEntry implements Entity { ...@@ -109,4 +110,28 @@ public class LogEntry implements Entity {
public void setPayload(final Map<String, Object> payload) { public void setPayload(final Map<String, Object> payload) {
this.payload = payload; this.payload = payload;
} }
/**
* {@inheritDoc}
*
* The following fields of <tt>LogEntry</tt> are excluded from equality checks:
* {@link #payload}.
*/
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
final LogEntry logEntry = (LogEntry) o;
return level == logEntry.level &&
Objects.equals(id, logEntry.id) &&
Objects.equals(rev, logEntry.rev) &&
Objects.equals(creationTimestamp, logEntry.creationTimestamp) &&
Objects.equals(updateTimestamp, logEntry.updateTimestamp) &&
Objects.equals(event, logEntry.event);
}
} }
...@@ -6,8 +6,9 @@ import de.thm.arsnova.entities.serialization.View; ...@@ -6,8 +6,9 @@ import de.thm.arsnova.entities.serialization.View;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects;
public class MigrationState implements Entity { public class MigrationState extends Entity {
public static class Migration { public static class Migration {
private String id; private String id;
private Date start; private Date start;
...@@ -38,12 +39,13 @@ public class MigrationState implements Entity { ...@@ -38,12 +39,13 @@ public class MigrationState implements Entity {
} }
public static final String ID = "MigrationState"; public static final String ID = "MigrationState";
private String rev;
private Date creationTimestamp;
private Date updateTimestamp;
private Migration active; private Migration active;
private List<String> completed = new ArrayList<>(); private List<String> completed = new ArrayList<>();
{
id = ID;
}
@Override @Override
@JsonView(View.Persistence.class) @JsonView(View.Persistence.class)
public String getId() { public String getId() {
...@@ -70,30 +72,6 @@ public class MigrationState implements Entity { ...@@ -70,30 +72,6 @@ public class MigrationState implements Entity {
this.rev = rev; 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}) @JsonView({View.Persistence.class, View.Public.class})
public Migration getActive() { public Migration getActive() {
return active; return active;
...@@ -117,4 +95,23 @@ public class MigrationState implements Entity { ...@@ -117,4 +95,23 @@ public class MigrationState implements Entity {
public void setCompleted(final List<String> completed) { public void setCompleted(final List<String> completed) {
this.completed = completed; this.completed = completed;
} }
/**
* {@inheritDoc}
*
* All fields of <tt>MigrationState</tt> are included in equality checks.
*/
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
final MigrationState that = (MigrationState) o;
return Objects.equals(active, that.active) &&
Objects.equals(completed, that.completed);
}
} }
...@@ -4,8 +4,9 @@ import com.fasterxml.jackson.annotation.JsonView; ...@@ -4,8 +4,9 @@ import com.fasterxml.jackson.annotation.JsonView;
import de.thm.arsnova.entities.serialization.View; import de.thm.arsnova.entities.serialization.View;
import java.util.Date; import java.util.Date;
import java.util.Objects;
public class Motd implements Entity { public class Motd extends Entity {
public enum Audience { public enum Audience {
ALL, ALL,
AUTHENTICATED, AUTHENTICATED,
...@@ -14,10 +15,6 @@ public class Motd implements Entity { ...@@ -14,10 +15,6 @@ public class Motd implements Entity {
ROOM ROOM
} }
private String id;
private String rev;
private Date creationTimestamp;
private Date updateTimestamp;
private String roomId; private String roomId;
private Date startDate; private Date startDate;
private Date endDate; private Date endDate;
...@@ -25,38 +22,6 @@ public class Motd implements Entity { ...@@ -25,38 +22,6 @@ public class Motd implements Entity {
private String body; private String body;
private Audience audience; private Audience audience;
@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
@JsonView(View.Persistence.class)
public Date getCreationTimestamp() {
return creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setCreationTimestamp(final Date creationTimestamp) {
this.creationTimestamp = creationTimestamp;
}
@Override @Override
@JsonView(View.Persistence.class) @JsonView(View.Persistence.class)
public Date getUpdateTimestamp() { public Date getUpdateTimestamp() {
...@@ -128,4 +93,27 @@ public class Motd implements Entity { ...@@ -128,4 +93,27 @@ public class Motd implements Entity {
public void setAudience(final Audience audience) { public void setAudience(final Audience audience) {
this.audience = audience; this.audience = audience;
} }
/**
* {@inheritDoc}
*
* All fields of <tt>Motd</tt> are included in equality checks.
*/
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
final Motd motd = (Motd) o;
return Objects.equals(roomId, motd.roomId) &&
Objects.equals(startDate, motd.startDate) &&
Objects.equals(endDate, motd.endDate) &&
Objects.equals(title, motd.title) &&
Objects.equals(body, motd.body) &&
audience == motd.audience;
}
} }
...@@ -3,11 +3,11 @@ package de.thm.arsnova.entities; ...@@ -3,11 +3,11 @@ package de.thm.arsnova.entities;
import com.fasterxml.jackson.annotation.JsonView; import com.fasterxml.jackson.annotation.JsonView;
import de.thm.arsnova.entities.serialization.View; import de.thm.arsnova.entities.serialization.View;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
public class Room implements Entity { public class Room extends Entity {
public static class ContentGroup { public static class ContentGroup {
private List<String> contentIds; private List<String> contentIds;
private boolean autoSort; private boolean autoSort;
...@@ -240,10 +240,6 @@ public class Room implements Entity { ...@@ -240,10 +240,6 @@ public class Room implements Entity {
} }
} }
private String id;
private String rev;
private Date creationTimestamp;
private Date updateTimestamp;
private String shortId; private String shortId;
private String ownerId; private String ownerId;
private String name; private String name;
...@@ -258,54 +254,6 @@ public class Room implements Entity { ...@@ -258,54 +254,6 @@ public class Room implements Entity {
private Map<String, String> attachments; private Map<String, String> attachments;
private RoomStatistics statistics; private RoomStatistics statistics;
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getId() {
return id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setId(final String id) {
this.id = id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getRevision() {
return rev;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setRevision(final String rev) {
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}) @JsonView({View.Persistence.class, View.Public.class})
public String getShortId() { public String getShortId() {
return shortId; return shortId;
...@@ -438,4 +386,29 @@ public class Room implements Entity { ...@@ -438,4 +386,29 @@ public class Room implements Entity {
public void setStatistics(final RoomStatistics statistics) { public void setStatistics(final RoomStatistics statistics) {
this.statistics = statistics; this.statistics = statistics;
} }
/**
* {@inheritDoc}
*
* The following fields of <tt>Room</tt> are excluded from equality checks:
* {@link #contentGroups}, {@link #settings}, {@link #author}, {@link #poolProperties}, {@link #extensions},
* {@link #attachments}, {@link #statistics}.
*/
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
final Room room = (Room) o;
return closed == room.closed &&
Objects.equals(shortId, room.shortId) &&
Objects.equals(ownerId, room.ownerId) &&
Objects.equals(name, room.name) &&
Objects.equals(abbreviation, room.abbreviation) &&
Objects.equals(description, room.description);
}
} }
...@@ -8,9 +8,10 @@ import java.util.Date; ...@@ -8,9 +8,10 @@ import java.util.Date;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.Set; import java.util.Set;
public class UserProfile implements Entity { public class UserProfile extends Entity {
public enum AuthProvider { public enum AuthProvider {
NONE, NONE,
UNKNOWN, UNKNOWN,
...@@ -100,10 +101,6 @@ public class UserProfile implements Entity { ...@@ -100,10 +101,6 @@ public class UserProfile implements Entity {
} }
} }
private String id;
private String rev;
private Date creationTimestamp;
private Date updateTimestamp;
private AuthProvider authProvider; private AuthProvider authProvider;
private String loginId; private String loginId;
private Date lastLoginTimestamp; private Date lastLoginTimestamp;
...@@ -121,54 +118,6 @@ public class UserProfile implements Entity { ...@@ -121,54 +118,6 @@ public class UserProfile implements Entity {
this.loginId = loginId; this.loginId = loginId;
} }
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getId() {
return id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setId(final String id) {
this.id = id;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getRevision() {
return rev;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setRevision(final String rev) {
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}) @JsonView({View.Persistence.class, View.Public.class})
public AuthProvider getAuthProvider() { public AuthProvider getAuthProvider() {
return authProvider; return authProvider;
...@@ -238,4 +187,25 @@ public class UserProfile implements Entity { ...@@ -238,4 +187,25 @@ public class UserProfile implements Entity {
public void setExtensions(Map<String, Map<String, ?>> extensions) { public void setExtensions(Map<String, Map<String, ?>> extensions) {
this.extensions = extensions; this.extensions = extensions;
} }
/**
* {@inheritDoc}
*
* The following fields of <tt>UserProfile</tt> are excluded from equality checks:
* {@link #account}, {@link #roomHistory}, {@link #acknowledgedMotds}, {@link #extensions}.
*/
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
final UserProfile that = (UserProfile) o;
return authProvider == that.authProvider &&
Objects.equals(loginId, that.loginId) &&
Objects.equals(lastLoginTimestamp, that.lastLoginTimestamp);
}
} }
/*
* This file is part of ARSnova Backend.
* Copyright (C) 2012-2018 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;
import org.junit.Test;
import org.springframework.core.style.ToStringCreator;
import java.util.Date;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
/**
* Tests {@link Entity}'s overrides for {@link Object#hashCode()}, {@link Object#equals(Object)}, and
* {@link Object#toString()}.
*
* @author Daniel Gerhardt
*/
public class EntityTest {
class SomeEntity extends Entity {
private String testA;
public SomeEntity(String id, String rev, Date creationTimestamp, Date updateTimestamp, String testA) {
this.id = id;
this.rev = rev;
this.creationTimestamp = creationTimestamp;
this.updateTimestamp = updateTimestamp;
this.testA = testA;
}
@Override
public int hashCode() {
return hashCode(super.hashCode(), testA);
}
@Override
public ToStringCreator buildToString() {
return super.buildToString().append("testA", testA);
}
}
class AnotherEntity extends SomeEntity {
private String testB;
public AnotherEntity(String id, String rev, Date creationTimestamp, Date updateTimestamp, String testA, String testB) {
super(id, rev, creationTimestamp, updateTimestamp, testA);
this.testB = testB;
}
@Override
public int hashCode() {
return hashCode(super.hashCode(), testB);
}
@Override
public ToStringCreator buildToString() {
return super.buildToString().append("testB", testB);
}
}
@Test
public void testHashCode() {
SomeEntity entity1 = new SomeEntity("id", "rev", new Date(0), new Date(0), "test");
SomeEntity entity2 = new SomeEntity("id", "rev", new Date(0), new Date(0), "test");
SomeEntity entity3 = new SomeEntity("wrongId", "rev", new Date(0), new Date(0), "test");
assertEquals(entity1.hashCode(), entity2.hashCode());
assertNotEquals(entity1.hashCode(), entity3.hashCode());
AnotherEntity entity4 = new AnotherEntity("id", "rev", new Date(0), new Date(0), "someTest", "anotherTest");
AnotherEntity entity5 = new AnotherEntity("id", "rev", new Date(0), new Date(0), "someTest", "anotherTest");
AnotherEntity entity6 = new AnotherEntity("id", "rev", new Date(0), new Date(0), "someTest", "wrong");
assertEquals(entity4.hashCode(), entity5.hashCode());
assertNotEquals(entity4.hashCode(), entity6.hashCode());
}
@Test
public void testEquals() {
SomeEntity entity1 = new SomeEntity("id", "rev", new Date(0), new Date(0), "test");
SomeEntity entity2 = new SomeEntity("id", "rev", new Date(0), new Date(0), "test");
SomeEntity entity3 = new SomeEntity("wrongId", "rev", new Date(0), new Date(0), "test");
assertEquals(entity1, entity2);
assertNotEquals(entity1, entity3);
}
@Test
public void testToString() {
SomeEntity entity1 = new SomeEntity("id", "rev", new Date(0), new Date(0), "test");
assertThat(entity1.toString(), startsWith("[EntityTest.SomeEntity"));
assertThat(entity1.toString(), endsWith("testA = 'test']"));
AnotherEntity entity2 = new AnotherEntity("id", "rev", new Date(0), new Date(0), "someTest", "anotherTest");
assertThat(entity2.toString(), startsWith("[EntityTest.AnotherEntity"));
assertThat(entity2.toString(), endsWith("testA = 'someTest', testB = 'anotherTest']"));
}
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment