@Override
	public final void setModelStatus(ModelStatus modelStatus) {
		CheckUtils.isNotNull(modelStatus);
		
		if (!this.checkBeforeSet(this.getModelStatus(), modelStatus))
			return;
		
		if (this.modelStatus != null
				&& this.modelStatus.equals(ModelStatus.DELETED)) {
			throw new IllegalStateException(
					"You cannot update the status of a deleted model");
		}
		
		ModelStatus oldModelStatus = this.modelStatus;
		this.modelStatus = modelStatus;
		this.propertyChangeSupport.firePropertyChange(
				PROP_MODEL_STATUS,
				oldModelStatus,
				modelStatus);
		
		if (modelStatus.equals(ModelStatus.TO_UPDATE)
				|| modelStatus.equals(ModelStatus.TO_DELETE)
				|| modelStatus.equals(ModelStatus.DELETED))
			this.setModelUpdateDate(Calendar.getInstance());
	}