package MusicLandscape.util.matcher;
import MusicLandscape.entities.Track;
import MusicLandscape.util.MyRangeMatcher;package MusicLandscape.util.matcher;
import MusicLandscape.entities.Track;
import MusicLandscape.util.MyRangeMatcher;This class does the same as in ES06, but is a little less code, because
the bulk lives in MyRangeMatcher now.
/**
* Encapsulates the concept of matching a track based on its duration.
* <p>
* This class is used to test whether given a given track's duration lies in a certain range, the range being the
* pattern of this matcher.The pattern is a simple string consisting of the (white-space separated) lower and upper
* bounds (inclusive) of the range of duration s (in seconds) accepted by this matcher.
*
* @author Jonas Altrock (ew20b126@technikum-wien.at)
* @version 2
* @since ExerciseSheet05
*/
public class DurationMatcher extends MyRangeMatcher<Track> {
/**
* Creates a default duration matcher.<br>
* By default, a matcher matches any duration, including unknown duration.
*/
public DurationMatcher() {
this("");
}
/**
* Creates a duration matcher with a specified pattern.
*
* @param pat the pattern of this matcher
*/
public DurationMatcher(String pat) {
super(pat);
}
/**
* A track matches if its duration is in the range accepted by this matcher.
*
* @param track the object to match
* @return whether t matches the pattern of this matcher.
*/
@Override
public boolean matches(Track track) {
return track.getDuration() >= lower && track.getDuration() <= upper;
}
/**
* the string representation is duration in range (RANGE)<br>
* with range as described in getPattern
*
* @return a string representation of the object.
*/
@Override
public String toString() {
return "duration in range (" + lower + " " + upper + ")";
}Heh, yeah only a little less code, because the test is written so we must have the fields here.
/**
* We have to redeclare the bounds fields because the DurationMatcherTest is brittle.<br>
* Lower bound for matched range.
*/
protected int lower;
/**
* We have to redeclare the bounds fields because the DurationMatcherTest is brittle.<br>
* Upper bound for matched range.
*/
protected int upper;
/**
* We have to override this method because the DurationMatcherTest is brittle.<br>
* Sets the pattern of this matcher.
* <p>
* Interprets the argument as described in the class documentation. First sets the lower, then the upper bound.
* The bounds specified are set if and only if at the time of setting they are actually lower (for the lower bound)
* or higher (for the upper bound) than the other or at least equal to the other.
*
* @param pat the pattern to set
*/
@Override
public void setPattern(String pat) {
super.setPattern(pat);
lower = super.lower;
upper = super.upper;
}
}