package com.github.andlyticsproject.model;
import java.util.Date;
public class DeveloperAccount {
public enum State {
HIDDEN, ACTIVE, SELECTED
};
private Long id;
private String name;
private State state;
private Date lastStatsUpdate;
// XXX revise this! Link to DeveloperConsoleAccount?
private String developerId;
public static DeveloperAccount createActive(String name) {
return new DeveloperAccount(name, State.ACTIVE);
}
public static DeveloperAccount createHidden(String name) {
return new DeveloperAccount(name, State.HIDDEN);
}
public DeveloperAccount(String name, State state) {
if (name == null || "".equals(name)) {
throw new IllegalArgumentException("Name must not be empty or null");
}
this.name = name;
this.state = state;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
public Date getLastStatsUpdate() {
return lastStatsUpdate == null ? null : (Date) lastStatsUpdate.clone();
}
public void setLastStatsUpdate(Date lastStatsUpdate) {
this.lastStatsUpdate = lastStatsUpdate == null ? null : (Date) lastStatsUpdate.clone();
}
public String getDeveloperId() {
return developerId;
}
public void setDeveloperId(String developerId) {
this.developerId = developerId;
}
@Override
public boolean equals(Object o) {
if (!(o instanceof DeveloperAccount)) {
return false;
}
DeveloperAccount rhs = (DeveloperAccount) o;
if (!name.equals(rhs.name)) {
return false;
}
if (developerId == null) {
return developerId == rhs.developerId;
}
return developerId.equals(rhs.developerId);
}
@Override
public int hashCode() {
int result = 17;
result = 31 * result + name.hashCode();
result = 31 * result + developerId == null ? 0 : developerId.hashCode();
return result;
}
@Override
public String toString() {
return String.format("DeveloperAccount [name=%s, developerId=%s, state=%s]", name,
developerId, state);
}
public boolean isHidden() {
return state == State.HIDDEN;
}
public boolean isActive() {
return state == State.ACTIVE;
}
public boolean isSelected() {
return state == State.SELECTED;
}
public boolean isVisible() {
return state != State.HIDDEN;
}
public void select() {
state = State.SELECTED;
}
public void hide() {
state = State.HIDDEN;
lastStatsUpdate = null;
}
public void activate() {
state = State.ACTIVE;
}
public void deselect() {
activate();
}
}