package ru.rsdn.patterns.mvc.controller;

import java.util.Collection;
import java.util.Collections;

import ru.rsdn.patterns.behavioral.command.ICommand;
import ru.rsdn.patterns.mvc.model.ListModel;
import ru.rsdn.patterns.mvc.model.Model;

/**
 * Команда на удаление моделей
 * @param
 * <P>
 * свойство модели
 */
public class RemoveCommand<P> implements ICommand<ListModel<P>> {
	private final Collection<Model<P>> models;

	/**
	 * Конструктор
	 * @param _models удаляемые модели
	 */
	public RemoveCommand(Collection<Model<P>> _models) {
		if (_models == null)
			throw new NullPointerException("Пустой параметр");
		models = _models;
	}

	/**
	 * Конструктор
	 * @param model удаляемая модель
	 */
	public RemoveCommand(Model<P> model) {
		if (model == null)
			throw new NullPointerException("Пустой параметр");
		models = Collections.singleton(model);
	}

	public ICommand<ListModel<P>> execute(ListModel<P> model) {
		if (model == null)
			throw new NullPointerException("Пустой параметр");
		for (final Model<P> _model : models)
			model.remove(_model);
		return new AddCommand<P>(models);
	}
}
