public List<Argument> parseArguments(String[] args)
            throws InvalidArgumentException {
        List<Argument> parsedArgs = new LinkedList<Argument>();
        for (int i = 0; i < args.length; i++) {
            String opt = args[i];
            if (opt.length() == 0) continue;
            if (opt.charAt(0) == '-' && opt.charAt(1) != '-' && opt.length() > 2) {
                //multiple options!
                opt = opt.substring(0,2);
                args[i] = "-" + args[i].substring(2);
                i--;
            }
            Argument arg = optionsMap.get(opt);
            if (arg == null) throw new InvalidArgumentException(opt
                    + " is not a valid argument.");
            else {
                if (arg.hasValue) {
                    i++;
                    if (args.length <= i || args[i].charAt(0) == '-') throw new InvalidArgumentException(
                            "Mising operand for argument " + opt);
                    arg.value = args[i];
                }
                parsedArgs.add(arg);
            }
        }
        return parsedArgs;
    }