package com.niklim.clicktrace.model; import java.util.List; import com.google.common.base.Charsets; import com.google.common.base.Strings; import com.google.common.hash.HashCode; import com.google.common.hash.HashFunction; import com.google.common.hash.Hashing; import com.niklim.clicktrace.model.helper.ScreenShotLoader; import com.niklim.clicktrace.model.helper.SessionDeleter; import com.niklim.clicktrace.model.helper.SessionMetadataLoader; /** * Represents Clicktrace session data. Allows loading and deleting it using * Visitor like pattern. */ public class Session { private String name; private String description; private List<ScreenShot> shots; private SessionMetadata metadata; private SessionDeleter deleter; private ScreenShotLoader screenShotsLoader; private SessionMetadataLoader sessionMetadataHelper; /** * Creates session with Visitor objects. * * @param imageLoader * @param deleter */ public Session(SessionDeleter deleter, ScreenShotLoader screenShotsLoader, SessionMetadataLoader sessionMetadataHelper) { this.deleter = deleter; this.screenShotsLoader = screenShotsLoader; this.sessionMetadataHelper = sessionMetadataHelper; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<ScreenShot> getShots() { if (shots == null) { loadScreenShots(); } return shots; } public void setShots(List<ScreenShot> shots) { this.shots = shots; } public List<ScreenShot> loadScreenShots() { shots = screenShotsLoader.load(this); return shots; } public SessionMetadata loadMetadata() { metadata = sessionMetadataHelper.loadMetadata(this); return metadata; } public void delete() { deleter.delete(this); } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof Session)) { return false; } Session other = (Session) o; if (!Strings.nullToEmpty(name).equals(Strings.nullToEmpty(other.getName()))) { return false; } return true; } @Override public int hashCode() { HashFunction hf = Hashing.md5(); HashCode hc = hf.newHasher().putString(name, Charsets.UTF_8).hash(); return hc.asInt(); } @Override public String toString() { return name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }