ParsedCliOptions.java

package eu.javaexperience.cli;

import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import eu.javaexperience.asserts.AssertArgument;
import eu.javaexperience.exceptions.CheckedIllegalArgumentException;

/**
 * Functions for parsed CLI (parsed by the {@link CliTools#parseCliOpts(String...)})
 * options encapsulated into an instance. 
 * */
public class ParsedCliOptions
{
	protected Map<String, List<String>> opts;

	public ParsedCliOptions(Map<String, List<String>> opts)
	{
		AssertArgument.assertNotNull(this.opts = opts, "cli_options");
	}
	
	public boolean hasOptionAnyOf(String... opt)
	{
		for(String s: opt)
		{
			if(opts.containsKey(s))
			{
				return true;
			}
		}
		return false;
	}
	
	public boolean hasOption(String opt)
	{
		return opts.containsKey(opt);
	}
	
	@Override
	public String toString()
	{
		StringBuilder sb = new StringBuilder();
		
		for(Entry<String, List<String>> kv:opts.entrySet())
		{
			sb.append("-");
			sb.append(kv.getKey());
			sb.append(" ");
			for(String s:kv.getValue())
			{
				sb.append(s);
				sb.append(" ");
			}
		}
		return sb.toString();
	}
	
	public static ParsedCliOptions parse(String... opts) throws CheckedIllegalArgumentException
	{
		return new ParsedCliOptions(CliTools.parseCliOpts(opts));
	}

	public String getFirstOptMatch(String... keys)
	{
		for(String s:keys)
		{
			if(opts.containsKey(s))
			{
				return s;
			}
		}
		
		return null;
	}

	public List<String> getOptArguments(String key)
	{
		return opts.get(key);
	}

	public Map<String, List<String>> getMap()
	{
		return opts;
	}
}