package com.niklim.clicktrace.model; import java.awt.image.BufferedImage; 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.ImageLoader; import com.niklim.clicktrace.model.helper.ScreenShotDeleter; /** * Represents screenshot data. Allows loading and deleting it using Visitor like * pattern. */ public class ScreenShot { private String filename; private String label; private String description; private Session session; private List<Click> clicks; private ImageLoader imageLoader; private ScreenShotDeleter deleter; /** * Creates screenshot with Visitor objects. * * @param imageLoader * @param deleter */ public ScreenShot(ImageLoader imageLoader, ScreenShotDeleter deleter) { this.imageLoader = imageLoader; this.deleter = deleter; } public String getFilename() { return filename; } public void setFilename(String name) { this.filename = name; } public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public BufferedImage getImage() { return loadImage(); } public BufferedImage loadImage() { return imageLoader.load(this); } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof ScreenShot)) { return false; } ScreenShot other = (ScreenShot) o; if (!Strings.nullToEmpty(filename).equals(Strings.nullToEmpty(other.getFilename()))) { return false; } return true; } @Override public int hashCode() { HashFunction hf = Hashing.md5(); HashCode hc = hf.newHasher().putString(filename, Charsets.UTF_8).hash(); return hc.asInt(); } @Override public String toString() { return Strings.isNullOrEmpty(label) ? filename : label; } public Session getSession() { return session; } public void setSession(Session session) { this.session = session; } /** * Deletes the screenshot from the disk. */ public void delete() { deleter.delete(this); } public List<Click> getClicks() { return clicks; } public void setClicks(List<Click> clicks) { this.clicks = clicks; } }