@Override
    public Collection<InvalidProperty> process(Map<String,String> props) {
        List<InvalidProperty> rv = new ArrayList<InvalidProperty>();

        final String role = 
            props.get(DeployerConstants.SETTINGS_ROLE);
        final String env_variables =
            props.get(DeployerConstants.SETTINGS_ENV_VARIABLES);
        final String task = 
            props.get(DeployerConstants.SETTINGS_TASK);
        final String args = 
            props.get(DeployerConstants.SETTINGS_ARGUMENTS);
        final String ant_target = 
            props.get(DeployerConstants.SETTINGS_ANT_TARGET);
        final String ant_args = 
            props.get(DeployerConstants.SETTINGS_ANT_ARGUMENTS);
        final String exec_command =
            props.get(DeployerConstants.SETTINGS_EXECUTE_COMMAND);
        
        if (PropertiesUtil.isEmptyOrNull(role)) {
            InvalidProperty p = new InvalidProperty(
                DeployerConstants.SETTINGS_ROLE,
                "A deploy role must be specified, e.g. dev, staging, prod");
        }
        
        if (PropertiesUtil.isEmptyOrNull(task)) {
            InvalidProperty p = new InvalidProperty(
                DeployerConstants.SETTINGS_TASK,
                "A deploy task must be specified.");
            rv.add(p);
        } else if (task.equals(DeployerConstants.TASK_TYPE_ANT)) {
            if (PropertiesUtil.isEmptyOrNull(ant_target)) {
                InvalidProperty p = new InvalidProperty(
                    DeployerConstants.SETTINGS_ANT_TARGET,
                    "A ant target must be specified.");
                rv.add(p);
            }
        } else if (task.equals(DeployerConstants.TASK_TYPE_EXECUTE)) {
            if (PropertiesUtil.isEmptyOrNull(exec_command)) {
                InvalidProperty p = new InvalidProperty(
                    DeployerConstants.SETTINGS_EXECUTE_COMMAND,
                    "A command must be specified.");
                rv.add(p);
            }
        }
        
        return rv;
    }