package com.niklim.clicktrace.capture; import java.awt.image.BufferedImage; import com.google.inject.Singleton; import com.niklim.clicktrace.capture.voter.ChangeVoter; import com.niklim.clicktrace.capture.voter.Vote; /** * Decides whether given screenshot should be saved, using {@link ChangeVoter}s. */ @Singleton class ChangeDetector { private ChangeVoter voter; /** * Decides whether change was detected (screenshot should be saved). * * @param currentImage * current screenshot * @param image * @return true if given screenshot should be saved */ public synchronized boolean detect(BufferedImage lastImage, BufferedImage currentImage) { if (lastImage == null) { return true; } boolean shouldSave = performVoting(lastImage, currentImage); return shouldSave; } private boolean performVoting(BufferedImage lastImage, BufferedImage currentImage) { boolean shouldSave = false; Vote vote = voter.vote(lastImage, currentImage); if (vote == Vote.SAVE) { shouldSave = true; } else if (vote == Vote.DISCARD) { shouldSave = false; } return shouldSave; } public void setVoter(ChangeVoter voter) { this.voter = voter; } }