package org.jfugue;

public abstract class PatternTool extends ParserListenerAdapter {
	/**
	 * Resets the variables in a subclass of PatternTool. This method is called
	 * every time this class's execute() method is called.
	 */
	public abstract void reset();

	/**
	 * Returns the result of the pattern tool after it has been executed on a
	 * pattern.
	 * 
	 * @return the result of executing this pattern tool on a pattern
	 */
	public abstract Object getResult();

	/**
	 * Indicates what this PatternTool does.
	 * 
	 * @return A String giving a quick description of this tool
	 */
	public abstract String getDescription();

	/**
	 * Runs the pattern tool and returns the result
	 * 
	 * @param pattern
	 *            the pattern on which to use this tool
	 * @return the result of performing this pattern tool on the given pattern
	 */
	public Object execute(Pattern pattern) {
		this.reset();

		MusicStringParser parser = new MusicStringParser();
		parser.addParserListener(this);
		try {
			parser.parse(pattern);
		} catch (JFugueException e) {
			e.printStackTrace();
		}

		return this.getResult();
	}
}
