package ru.rsdn.patterns.mvc.controller;

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

/**
 * Команда на изменение модели
 * @param
 * <P>
 * свойство модели
 */
public class EditCommand<P> implements ICommand<Model<P>> {
	private final P property;

	/**
	 * Конструктор
	 * @param _property новое свойство модели
	 */
	public EditCommand(P _property) {
		if (_property == null)
			throw new NullPointerException("Пустой параметр");
		property = _property;
	}

	public ICommand<Model<P>> execute(Model<P> model) {
		if (model == null)
			throw new NullPointerException("Пустой параметр");
		final P oldProperty = model.getProperty();
		if (!property.equals(oldProperty)) {
			model.setProperty(property);
			return new EditCommand<P>(oldProperty);
		}
		return null;
	}
}
