/* * Copyright 2014-2016 CyberVision, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kaaproject.kaa.server.common.nosql.mongo.dao.model; import static org.kaaproject.kaa.server.common.dao.impl.DaoUtil.getArrayCopy; import static org.kaaproject.kaa.server.common.nosql.mongo.dao.model.MongoModelConstants.NF_APPLICATION_ID; import static org.kaaproject.kaa.server.common.nosql.mongo.dao.model.MongoModelConstants.NF_BODY; import static org.kaaproject.kaa.server.common.nosql.mongo.dao.model.MongoModelConstants.NF_EXPIRED_AT; import static org.kaaproject.kaa.server.common.nosql.mongo.dao.model.MongoModelConstants.NF_LAST_MODIFY_TIME; import static org.kaaproject.kaa.server.common.nosql.mongo.dao.model.MongoModelConstants.NF_SCHEMA_ID; import static org.kaaproject.kaa.server.common.nosql.mongo.dao.model.MongoModelConstants.NF_SEQ_NUM; import static org.kaaproject.kaa.server.common.nosql.mongo.dao.model.MongoModelConstants.NF_TOPIC_ID; import static org.kaaproject.kaa.server.common.nosql.mongo.dao.model.MongoModelConstants.NF_TYPE; import static org.kaaproject.kaa.server.common.nosql.mongo.dao.model.MongoModelConstants.NF_VERSION; import org.kaaproject.kaa.common.dto.NotificationDto; import org.kaaproject.kaa.common.dto.NotificationTypeDto; import org.kaaproject.kaa.server.common.dao.model.Notification; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.mongodb.core.index.Indexed; import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Field; import java.io.Serializable; import java.util.Arrays; import java.util.Date; @Document(collection = MongoModelConstants.NOTIFICATION) public final class MongoNotification implements Notification, Serializable { private static final long serialVersionUID = 348872010210481058L; @Id private String id; @Field(NF_APPLICATION_ID) private String applicationId; @Field(NF_SCHEMA_ID) private String schemaId; @Field(NF_TOPIC_ID) private String topicId; @Field(NF_VERSION) private int nfVersion; @LastModifiedDate @Field(NF_LAST_MODIFY_TIME) private Date lastModifyTime; @Field(NF_TYPE) private NotificationTypeDto type; @Field(NF_BODY) private byte[] body; @Indexed(expireAfterSeconds = 0) @Field(NF_EXPIRED_AT) private Date expiredAt; @Field(NF_SEQ_NUM) private int secNum; public MongoNotification() { } /** * Create new instance of <code>MongoNotification</code>. * @param dto data transfer object contain data that * assign on fields of new instance */ public MongoNotification(NotificationDto dto) { this.id = dto.getId(); this.applicationId = dto.getApplicationId(); this.schemaId = dto.getSchemaId(); this.topicId = dto.getTopicId(); this.nfVersion = dto.getNfVersion(); this.lastModifyTime = dto.getLastTimeModify(); this.type = dto.getType(); this.body = getArrayCopy(dto.getBody()); this.expiredAt = dto.getExpiredAt(); this.secNum = dto.getSecNum(); } public String getId() { return id; } public String getApplicationId() { return applicationId; } public String getSchemaId() { return schemaId; } public String getTopicId() { return topicId; } public int getNfVersion() { return nfVersion; } public Date getLastModifyTime() { return lastModifyTime; } public NotificationTypeDto getType() { return type; } public byte[] getBody() { return body; } public Date getExpiredAt() { return expiredAt; } public int getSecNum() { return secNum; } @Override public boolean equals(Object object) { if (this == object) { return true; } if (!(object instanceof MongoNotification)) { return false; } MongoNotification that = (MongoNotification) object; if (secNum != that.secNum) { return false; } if (nfVersion != that.nfVersion) { return false; } if (applicationId != null ? !applicationId.equals(that.applicationId) : that.applicationId != null) { return false; } if (!Arrays.equals(body, that.body)) { return false; } if (expiredAt != null ? !expiredAt.equals(that.expiredAt) : that.expiredAt != null) { return false; } if (lastModifyTime != null ? !lastModifyTime.equals(that.lastModifyTime) : that.lastModifyTime != null) { return false; } if (schemaId != null ? !schemaId.equals(that.schemaId) : that.schemaId != null) { return false; } if (topicId != null ? !topicId.equals(that.topicId) : that.topicId != null) { return false; } if (type != that.type) { return false; } return true; } @Override public int hashCode() { int result = applicationId != null ? applicationId.hashCode() : 0; result = 31 * result + (schemaId != null ? schemaId.hashCode() : 0); result = 31 * result + (topicId != null ? topicId.hashCode() : 0); result = 31 * result + nfVersion; result = 31 * result + (lastModifyTime != null ? lastModifyTime.hashCode() : 0); result = 31 * result + (type != null ? type.hashCode() : 0); result = 31 * result + (body != null ? Arrays.hashCode(body) : 0); result = 31 * result + (expiredAt != null ? expiredAt.hashCode() : 0); result = 31 * result + secNum; return result; } @Override public String toString() { return "Notification{" + "id='" + id + '\'' + ", applicationId=" + applicationId + ", schemaId=" + schemaId + ", topicId=" + topicId + ", nfVersion=" + nfVersion + ", lastModifyTime=" + lastModifyTime + ", type=" + type + ", body=" + Arrays.toString(body) + ", expiredAt=" + expiredAt + ", secNum=" + secNum + '}'; } @Override public NotificationDto toDto() { NotificationDto dto = new NotificationDto(); dto.setId(id); dto.setApplicationId(applicationId); dto.setSchemaId(schemaId); dto.setTopicId(topicId); dto.setLastTimeModify(lastModifyTime); dto.setNfVersion(nfVersion); dto.setType(type); dto.setBody(getArrayCopy(body)); dto.setExpiredAt(expiredAt); dto.setSecNum(secNum); return dto; } }