package bsearch.algorithms; import java.util.HashMap; import java.util.List; import bsearch.util.GeneralUtils; /** * A convenient abstract class to inherit from when making a new SearchMethod. * */ public abstract class AbstractSearchMethod implements SearchMethod { public boolean supportsAdaptiveSampling() { return false; } Double validDoubleParam( HashMap<String , String> searchMethodParams, String pName, double min, double max) throws SearchParameterException { try { double d = Double.valueOf(searchMethodParams.get( pName )); if (d < min || d > max) { throw new SearchParameterException(getName() + " error: parameter '" + pName + "' should be a number between " + min + " and " + max + ", NOT '" + searchMethodParams.get( pName ) + "'"); } return d; } catch (NumberFormatException ex) { throw new SearchParameterException(getName() + " error: parameter '" + pName + "' should be a number between " + min + " and " + max + ", NOT '" + searchMethodParams.get( pName ) + "'"); } } Integer validIntParam( HashMap<String , String> searchMethodParams, String pName, int min, int max) throws SearchParameterException { try { int n = Integer.valueOf(searchMethodParams.get( pName )); if (n < min || n > max) { throw new SearchParameterException(getName() + " error: parameter '" + pName + "' should be an integer between " + min + " and " + max + ", NOT '" + searchMethodParams.get( pName ) + "'"); } return n; } catch (NumberFormatException ex) { throw new SearchParameterException(getName() + " error: parameter '" + pName + "' should be an integer between " + min + " and " + max + ", NOT '" + searchMethodParams.get( pName ) + "'"); } } String validChoiceParam( HashMap<String , String> searchMethodParams, String pName, List<String> choices) throws SearchParameterException { String s = searchMethodParams.get( pName ); if (!choices.contains(s)) { String errorMessage = getName() + " error: parameter '" + pName + "' was given an invalid value: " + s + ". " + pName + " must be one of the following: "; errorMessage += "'" + GeneralUtils.stringJoin(choices,"', '") + "'"; throw new SearchParameterException(errorMessage); } return s; } public String getHTMLHelpText() { StringBuilder sb = new StringBuilder(); sb.append(String.format("<HTML><BODY><B>%s:</B> %s", this.getName(), this.getDescription())); if (this.getSearchParams().size() > 0) { sb.append("<UL>"); for (String pname: this.getSearchParamsHelp().keySet()) { sb.append(String.format("<LI><I>%s</I> - %s", pname, this.getSearchParamsHelp().get(pname))); } sb.append("</UL></BODY></HTML>"); } return sb.toString(); } }