Java tutorial
/** * Copyright (C) 2013 Open WhisperSystems * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.whispersystems.textsecuregcm.storage; import com.fasterxml.jackson.annotation.JsonProperty; import org.whispersystems.textsecuregcm.auth.AuthenticationCredentials; import org.whispersystems.textsecuregcm.entities.SignedPreKey; import org.whispersystems.textsecuregcm.util.Util; import java.util.concurrent.TimeUnit; public class Device { public static final long MASTER_ID = 1; @JsonProperty private long id; @JsonProperty private String name; @JsonProperty private String authToken; @JsonProperty private String salt; @JsonProperty private String signalingKey; @JsonProperty private String gcmId; @JsonProperty private String apnId; @JsonProperty private String voipApnId; @JsonProperty private long pushTimestamp; @JsonProperty private boolean fetchesMessages; @JsonProperty private int registrationId; @JsonProperty private SignedPreKey signedPreKey; @JsonProperty private long lastSeen; @JsonProperty private long created; @JsonProperty private boolean voice; @JsonProperty private boolean video; @JsonProperty private String userAgent; public Device() { } public Device(long id, String name, String authToken, String salt, String signalingKey, String gcmId, String apnId, String voipApnId, boolean fetchesMessages, int registrationId, SignedPreKey signedPreKey, long lastSeen, long created, boolean voice, boolean video, String userAgent) { this.id = id; this.name = name; this.authToken = authToken; this.salt = salt; this.signalingKey = signalingKey; this.gcmId = gcmId; this.apnId = apnId; this.voipApnId = voipApnId; this.fetchesMessages = fetchesMessages; this.registrationId = registrationId; this.signedPreKey = signedPreKey; this.lastSeen = lastSeen; this.created = created; this.voice = voice; this.video = video; this.userAgent = userAgent; } public String getApnId() { return apnId; } public void setApnId(String apnId) { this.apnId = apnId; if (apnId != null) { this.pushTimestamp = System.currentTimeMillis(); } } public String getVoipApnId() { return voipApnId; } public void setVoipApnId(String voipApnId) { this.voipApnId = voipApnId; } public void setLastSeen(long lastSeen) { this.lastSeen = lastSeen; } public long getLastSeen() { return lastSeen; } public void setCreated(long created) { this.created = created; } public long getCreated() { return this.created; } public String getGcmId() { return gcmId; } public void setGcmId(String gcmId) { this.gcmId = gcmId; if (gcmId != null) { this.pushTimestamp = System.currentTimeMillis(); } } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isVoiceSupported() { return voice; } public void setVoiceSupported(boolean voice) { this.voice = voice; } public boolean isVideoSupported() { return video; } public void setVideoSupported(boolean video) { this.video = video; } public void setAuthenticationCredentials(AuthenticationCredentials credentials) { this.authToken = credentials.getHashedAuthenticationToken(); this.salt = credentials.getSalt(); } public AuthenticationCredentials getAuthenticationCredentials() { return new AuthenticationCredentials(authToken, salt); } public String getSignalingKey() { return signalingKey; } public void setSignalingKey(String signalingKey) { this.signalingKey = signalingKey; } public boolean isActive() { boolean hasChannel = fetchesMessages || !Util.isEmpty(getApnId()) || !Util.isEmpty(getGcmId()); return (id == MASTER_ID && hasChannel && signedPreKey != null) || (id != MASTER_ID && hasChannel && signedPreKey != null && lastSeen > (System.currentTimeMillis() - TimeUnit.DAYS.toMillis(30))); } public boolean getFetchesMessages() { return fetchesMessages; } public void setFetchesMessages(boolean fetchesMessages) { this.fetchesMessages = fetchesMessages; } public boolean isMaster() { return getId() == MASTER_ID; } public int getRegistrationId() { return registrationId; } public void setRegistrationId(int registrationId) { this.registrationId = registrationId; } public SignedPreKey getSignedPreKey() { return signedPreKey; } public void setSignedPreKey(SignedPreKey signedPreKey) { this.signedPreKey = signedPreKey; } public long getPushTimestamp() { return pushTimestamp; } public void setUserAgent(String userAgent) { this.userAgent = userAgent; } public String getUserAgent() { return this.userAgent; } @Override public boolean equals(Object other) { if (other == null || !(other instanceof Device)) return false; Device that = (Device) other; return this.id == that.id; } @Override public int hashCode() { return (int) this.id; } }