From e5a452bae423dee7b113acf224cd0af655a297ee Mon Sep 17 00:00:00 2001 From: Jesse Morgan Date: Fri, 19 Oct 2012 21:31:29 -0700 Subject: Implemented Preset. --- src/net/tuschhcm/routercontrol/Preset.java | 119 ++++++++++++++++++++++++++--- 1 file changed, 107 insertions(+), 12 deletions(-) (limited to 'src/net/tuschhcm/routercontrol') diff --git a/src/net/tuschhcm/routercontrol/Preset.java b/src/net/tuschhcm/routercontrol/Preset.java index 35ba8ab..ef2ba49 100644 --- a/src/net/tuschhcm/routercontrol/Preset.java +++ b/src/net/tuschhcm/routercontrol/Preset.java @@ -1,39 +1,134 @@ package net.tuschhcm.routercontrol; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; + /** * Class to represent a router preset. */ public class Preset { + private static final String UNNAMED = ""; + + /** + * Name of the preset. + */ + private String mName; + + /** + * List of inputs for outputs. + * List index corresponds with the output. + */ + private final ArrayList mInputs; /** * Load a preset from the given file. - * + * * @param filename The file to load. * @return the Preset object + * @throws IllegalArgumentException if the preset can't be loaded. */ - public static Preset loadPresetFile(String filename) { - // TODO: Implement - return null; + public static Preset loadPresetFile(String filename) throws IllegalArgumentException { + try { + Preset preset = new Preset(); + + BufferedReader in = new BufferedReader(new FileReader(filename)); + int lineno = 1; + + String line = in.readLine(); + if (line == null) { + throw new IllegalArgumentException("Empty preset file: " + filename); + } + + // The name is optional and starts with a # + if (line.charAt(0) == '#') { + preset.mName = line.substring(1).trim(); + line = in.readLine(); + lineno++; + } + + // Read the inputs. + int output = 1; + while (line != null && !line.equals("")) { + try { + final Integer input = Integer.valueOf(line.trim()); + preset.mInputs.add(input); + output++; + + } catch (final NumberFormatException nfe) { + throw new IllegalArgumentException( + String.format("%s: Input set for output %d on line %d is not a number.", + filename, output, lineno)); + } + + line = in.readLine(); + lineno++; + } + + in.close(); + + return preset; + + } catch (final IOException e) { + throw new IllegalArgumentException("Could not read " + filename, e); + } } - + + /** + * Constructor for Preset. + */ + public Preset() { + mName = UNNAMED; + mInputs = new ArrayList(); + } + /** * Get the name of the preset. - * + * * @return The preset name */ public String getName() { - // TODO: Implement - return null; + return mName; } - + /** * Get an input for the given output. - * + * * @param output * @return Input number, or 0 if no change. + * @throws IllegalArgumentException if the output isn't defined. */ public int getInputForOutput(final int output) { - // TODO: Implement - return 0; + final int index = output - 1; + if (index < 0 || index > mInputs.size()) { + throw new IllegalArgumentException("Output out of range."); + } + + return mInputs.get(output); + } + + /** + * @return The number of outputs defined in this preset. + */ + public int getNumberOfOutputs() { + return mInputs.size(); + } + + /** + * Return a string representation of this preset. + */ + public String toString() { + String str = ""; + if (!mName.equals(UNNAMED)) { + str = "# " + mName + "\n"; + } + + for (Integer in : mInputs) { + str += in + "\n"; + } + + return str; } } -- cgit v1.2.3