/**
 */
package org.vilang.vilang.impl;

import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.NotificationChain;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.InternalEObject;

import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;

import org.vilang.vilang.DataElements;
import org.vilang.vilang.Feedback;
import org.vilang.vilang.FileInfo;
import org.vilang.vilang.Model;
import org.vilang.vilang.ModelType;
import org.vilang.vilang.VilangPackage;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model object '<em><b>Model</b></em>'.
 * <!-- end-user-doc -->
 * <p>
 * The following features are implemented:
 * </p>
 * <ul>
 *   <li>{@link org.vilang.vilang.impl.ModelImpl#getName <em>Name</em>}</li>
 *   <li>{@link org.vilang.vilang.impl.ModelImpl#getModelType <em>Model Type</em>}</li>
 *   <li>{@link org.vilang.vilang.impl.ModelImpl#getTrainingFileInfo <em>Training File Info</em>}</li>
 *   <li>{@link org.vilang.vilang.impl.ModelImpl#getTrainingDataElements <em>Training Data Elements</em>}</li>
 *   <li>{@link org.vilang.vilang.impl.ModelImpl#getHoldBackValidationPercentage <em>Hold Back Validation Percentage</em>}</li>
 *   <li>{@link org.vilang.vilang.impl.ModelImpl#isHoldBackValidationRandom <em>Hold Back Validation Random</em>}</li>
 *   <li>{@link org.vilang.vilang.impl.ModelImpl#isHoldBackValidationShuffle <em>Hold Back Validation Shuffle</em>}</li>
 *   <li>{@link org.vilang.vilang.impl.ModelImpl#getKFoldValidationValue <em>KFold Validation Value</em>}</li>
 *   <li>{@link org.vilang.vilang.impl.ModelImpl#isKFoldValidationShuffle <em>KFold Validation Shuffle</em>}</li>
 *   <li>{@link org.vilang.vilang.impl.ModelImpl#getTrainingConfigLagWindow <em>Training Config Lag Window</em>}</li>
 *   <li>{@link org.vilang.vilang.impl.ModelImpl#getTrainingConfigLeadWindow <em>Training Config Lead Window</em>}</li>
 *   <li>{@link org.vilang.vilang.impl.ModelImpl#getExecutionFileInfo <em>Execution File Info</em>}</li>
 *   <li>{@link org.vilang.vilang.impl.ModelImpl#getExecutionDataElements <em>Execution Data Elements</em>}</li>
 *   <li>{@link org.vilang.vilang.impl.ModelImpl#getConfigFeedback <em>Config Feedback</em>}</li>
 * </ul>
 *
 * @generated
 */
public class ModelImpl extends MinimalEObjectImpl.Container implements Model
{
  /**
   * The default value of the '{@link #getName() <em>Name</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getName()
   * @generated
   * @ordered
   */
  protected static final String NAME_EDEFAULT = null;

  /**
   * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getName()
   * @generated
   * @ordered
   */
  protected String name = NAME_EDEFAULT;

  /**
   * The cached value of the '{@link #getModelType() <em>Model Type</em>}' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getModelType()
   * @generated
   * @ordered
   */
  protected ModelType modelType;

  /**
   * The cached value of the '{@link #getTrainingFileInfo() <em>Training File Info</em>}' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getTrainingFileInfo()
   * @generated
   * @ordered
   */
  protected FileInfo trainingFileInfo;

  /**
   * The cached value of the '{@link #getTrainingDataElements() <em>Training Data Elements</em>}' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getTrainingDataElements()
   * @generated
   * @ordered
   */
  protected DataElements trainingDataElements;

  /**
   * The default value of the '{@link #getHoldBackValidationPercentage() <em>Hold Back Validation Percentage</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getHoldBackValidationPercentage()
   * @generated
   * @ordered
   */
  protected static final String HOLD_BACK_VALIDATION_PERCENTAGE_EDEFAULT = null;

  /**
   * The cached value of the '{@link #getHoldBackValidationPercentage() <em>Hold Back Validation Percentage</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getHoldBackValidationPercentage()
   * @generated
   * @ordered
   */
  protected String holdBackValidationPercentage = HOLD_BACK_VALIDATION_PERCENTAGE_EDEFAULT;

  /**
   * The default value of the '{@link #isHoldBackValidationRandom() <em>Hold Back Validation Random</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #isHoldBackValidationRandom()
   * @generated
   * @ordered
   */
  protected static final boolean HOLD_BACK_VALIDATION_RANDOM_EDEFAULT = false;

  /**
   * The cached value of the '{@link #isHoldBackValidationRandom() <em>Hold Back Validation Random</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #isHoldBackValidationRandom()
   * @generated
   * @ordered
   */
  protected boolean holdBackValidationRandom = HOLD_BACK_VALIDATION_RANDOM_EDEFAULT;

  /**
   * The default value of the '{@link #isHoldBackValidationShuffle() <em>Hold Back Validation Shuffle</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #isHoldBackValidationShuffle()
   * @generated
   * @ordered
   */
  protected static final boolean HOLD_BACK_VALIDATION_SHUFFLE_EDEFAULT = false;

  /**
   * The cached value of the '{@link #isHoldBackValidationShuffle() <em>Hold Back Validation Shuffle</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #isHoldBackValidationShuffle()
   * @generated
   * @ordered
   */
  protected boolean holdBackValidationShuffle = HOLD_BACK_VALIDATION_SHUFFLE_EDEFAULT;

  /**
   * The default value of the '{@link #getKFoldValidationValue() <em>KFold Validation Value</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getKFoldValidationValue()
   * @generated
   * @ordered
   */
  protected static final int KFOLD_VALIDATION_VALUE_EDEFAULT = 0;

  /**
   * The cached value of the '{@link #getKFoldValidationValue() <em>KFold Validation Value</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getKFoldValidationValue()
   * @generated
   * @ordered
   */
  protected int kFoldValidationValue = KFOLD_VALIDATION_VALUE_EDEFAULT;

  /**
   * The default value of the '{@link #isKFoldValidationShuffle() <em>KFold Validation Shuffle</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #isKFoldValidationShuffle()
   * @generated
   * @ordered
   */
  protected static final boolean KFOLD_VALIDATION_SHUFFLE_EDEFAULT = false;

  /**
   * The cached value of the '{@link #isKFoldValidationShuffle() <em>KFold Validation Shuffle</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #isKFoldValidationShuffle()
   * @generated
   * @ordered
   */
  protected boolean kFoldValidationShuffle = KFOLD_VALIDATION_SHUFFLE_EDEFAULT;

  /**
   * The default value of the '{@link #getTrainingConfigLagWindow() <em>Training Config Lag Window</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getTrainingConfigLagWindow()
   * @generated
   * @ordered
   */
  protected static final int TRAINING_CONFIG_LAG_WINDOW_EDEFAULT = 0;

  /**
   * The cached value of the '{@link #getTrainingConfigLagWindow() <em>Training Config Lag Window</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getTrainingConfigLagWindow()
   * @generated
   * @ordered
   */
  protected int trainingConfigLagWindow = TRAINING_CONFIG_LAG_WINDOW_EDEFAULT;

  /**
   * The default value of the '{@link #getTrainingConfigLeadWindow() <em>Training Config Lead Window</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getTrainingConfigLeadWindow()
   * @generated
   * @ordered
   */
  protected static final int TRAINING_CONFIG_LEAD_WINDOW_EDEFAULT = 0;

  /**
   * The cached value of the '{@link #getTrainingConfigLeadWindow() <em>Training Config Lead Window</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getTrainingConfigLeadWindow()
   * @generated
   * @ordered
   */
  protected int trainingConfigLeadWindow = TRAINING_CONFIG_LEAD_WINDOW_EDEFAULT;

  /**
   * The cached value of the '{@link #getExecutionFileInfo() <em>Execution File Info</em>}' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getExecutionFileInfo()
   * @generated
   * @ordered
   */
  protected FileInfo executionFileInfo;

  /**
   * The cached value of the '{@link #getExecutionDataElements() <em>Execution Data Elements</em>}' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getExecutionDataElements()
   * @generated
   * @ordered
   */
  protected DataElements executionDataElements;

  /**
   * The default value of the '{@link #getConfigFeedback() <em>Config Feedback</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getConfigFeedback()
   * @generated
   * @ordered
   */
  protected static final Feedback CONFIG_FEEDBACK_EDEFAULT = Feedback.INFO;

  /**
   * The cached value of the '{@link #getConfigFeedback() <em>Config Feedback</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getConfigFeedback()
   * @generated
   * @ordered
   */
  protected Feedback configFeedback = CONFIG_FEEDBACK_EDEFAULT;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected ModelImpl()
  {
    super();
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  protected EClass eStaticClass()
  {
    return VilangPackage.Literals.MODEL;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public String getName()
  {
    return name;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setName(String newName)
  {
    String oldName = name;
    name = newName;
    if (eNotificationRequired())
      eNotify(new ENotificationImpl(this, Notification.SET, VilangPackage.MODEL__NAME, oldName, name));
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public ModelType getModelType()
  {
    return modelType;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public NotificationChain basicSetModelType(ModelType newModelType, NotificationChain msgs)
  {
    ModelType oldModelType = modelType;
    modelType = newModelType;
    if (eNotificationRequired())
    {
      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, VilangPackage.MODEL__MODEL_TYPE, oldModelType, newModelType);
      if (msgs == null) msgs = notification; else msgs.add(notification);
    }
    return msgs;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setModelType(ModelType newModelType)
  {
    if (newModelType != modelType)
    {
      NotificationChain msgs = null;
      if (modelType != null)
        msgs = ((InternalEObject)modelType).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - VilangPackage.MODEL__MODEL_TYPE, null, msgs);
      if (newModelType != null)
        msgs = ((InternalEObject)newModelType).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - VilangPackage.MODEL__MODEL_TYPE, null, msgs);
      msgs = basicSetModelType(newModelType, msgs);
      if (msgs != null) msgs.dispatch();
    }
    else if (eNotificationRequired())
      eNotify(new ENotificationImpl(this, Notification.SET, VilangPackage.MODEL__MODEL_TYPE, newModelType, newModelType));
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public FileInfo getTrainingFileInfo()
  {
    return trainingFileInfo;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public NotificationChain basicSetTrainingFileInfo(FileInfo newTrainingFileInfo, NotificationChain msgs)
  {
    FileInfo oldTrainingFileInfo = trainingFileInfo;
    trainingFileInfo = newTrainingFileInfo;
    if (eNotificationRequired())
    {
      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, VilangPackage.MODEL__TRAINING_FILE_INFO, oldTrainingFileInfo, newTrainingFileInfo);
      if (msgs == null) msgs = notification; else msgs.add(notification);
    }
    return msgs;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setTrainingFileInfo(FileInfo newTrainingFileInfo)
  {
    if (newTrainingFileInfo != trainingFileInfo)
    {
      NotificationChain msgs = null;
      if (trainingFileInfo != null)
        msgs = ((InternalEObject)trainingFileInfo).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - VilangPackage.MODEL__TRAINING_FILE_INFO, null, msgs);
      if (newTrainingFileInfo != null)
        msgs = ((InternalEObject)newTrainingFileInfo).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - VilangPackage.MODEL__TRAINING_FILE_INFO, null, msgs);
      msgs = basicSetTrainingFileInfo(newTrainingFileInfo, msgs);
      if (msgs != null) msgs.dispatch();
    }
    else if (eNotificationRequired())
      eNotify(new ENotificationImpl(this, Notification.SET, VilangPackage.MODEL__TRAINING_FILE_INFO, newTrainingFileInfo, newTrainingFileInfo));
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public DataElements getTrainingDataElements()
  {
    return trainingDataElements;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public NotificationChain basicSetTrainingDataElements(DataElements newTrainingDataElements, NotificationChain msgs)
  {
    DataElements oldTrainingDataElements = trainingDataElements;
    trainingDataElements = newTrainingDataElements;
    if (eNotificationRequired())
    {
      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, VilangPackage.MODEL__TRAINING_DATA_ELEMENTS, oldTrainingDataElements, newTrainingDataElements);
      if (msgs == null) msgs = notification; else msgs.add(notification);
    }
    return msgs;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setTrainingDataElements(DataElements newTrainingDataElements)
  {
    if (newTrainingDataElements != trainingDataElements)
    {
      NotificationChain msgs = null;
      if (trainingDataElements != null)
        msgs = ((InternalEObject)trainingDataElements).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - VilangPackage.MODEL__TRAINING_DATA_ELEMENTS, null, msgs);
      if (newTrainingDataElements != null)
        msgs = ((InternalEObject)newTrainingDataElements).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - VilangPackage.MODEL__TRAINING_DATA_ELEMENTS, null, msgs);
      msgs = basicSetTrainingDataElements(newTrainingDataElements, msgs);
      if (msgs != null) msgs.dispatch();
    }
    else if (eNotificationRequired())
      eNotify(new ENotificationImpl(this, Notification.SET, VilangPackage.MODEL__TRAINING_DATA_ELEMENTS, newTrainingDataElements, newTrainingDataElements));
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public String getHoldBackValidationPercentage()
  {
    return holdBackValidationPercentage;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setHoldBackValidationPercentage(String newHoldBackValidationPercentage)
  {
    String oldHoldBackValidationPercentage = holdBackValidationPercentage;
    holdBackValidationPercentage = newHoldBackValidationPercentage;
    if (eNotificationRequired())
      eNotify(new ENotificationImpl(this, Notification.SET, VilangPackage.MODEL__HOLD_BACK_VALIDATION_PERCENTAGE, oldHoldBackValidationPercentage, holdBackValidationPercentage));
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public boolean isHoldBackValidationRandom()
  {
    return holdBackValidationRandom;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setHoldBackValidationRandom(boolean newHoldBackValidationRandom)
  {
    boolean oldHoldBackValidationRandom = holdBackValidationRandom;
    holdBackValidationRandom = newHoldBackValidationRandom;
    if (eNotificationRequired())
      eNotify(new ENotificationImpl(this, Notification.SET, VilangPackage.MODEL__HOLD_BACK_VALIDATION_RANDOM, oldHoldBackValidationRandom, holdBackValidationRandom));
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public boolean isHoldBackValidationShuffle()
  {
    return holdBackValidationShuffle;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setHoldBackValidationShuffle(boolean newHoldBackValidationShuffle)
  {
    boolean oldHoldBackValidationShuffle = holdBackValidationShuffle;
    holdBackValidationShuffle = newHoldBackValidationShuffle;
    if (eNotificationRequired())
      eNotify(new ENotificationImpl(this, Notification.SET, VilangPackage.MODEL__HOLD_BACK_VALIDATION_SHUFFLE, oldHoldBackValidationShuffle, holdBackValidationShuffle));
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public int getKFoldValidationValue()
  {
    return kFoldValidationValue;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setKFoldValidationValue(int newKFoldValidationValue)
  {
    int oldKFoldValidationValue = kFoldValidationValue;
    kFoldValidationValue = newKFoldValidationValue;
    if (eNotificationRequired())
      eNotify(new ENotificationImpl(this, Notification.SET, VilangPackage.MODEL__KFOLD_VALIDATION_VALUE, oldKFoldValidationValue, kFoldValidationValue));
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public boolean isKFoldValidationShuffle()
  {
    return kFoldValidationShuffle;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setKFoldValidationShuffle(boolean newKFoldValidationShuffle)
  {
    boolean oldKFoldValidationShuffle = kFoldValidationShuffle;
    kFoldValidationShuffle = newKFoldValidationShuffle;
    if (eNotificationRequired())
      eNotify(new ENotificationImpl(this, Notification.SET, VilangPackage.MODEL__KFOLD_VALIDATION_SHUFFLE, oldKFoldValidationShuffle, kFoldValidationShuffle));
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public int getTrainingConfigLagWindow()
  {
    return trainingConfigLagWindow;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setTrainingConfigLagWindow(int newTrainingConfigLagWindow)
  {
    int oldTrainingConfigLagWindow = trainingConfigLagWindow;
    trainingConfigLagWindow = newTrainingConfigLagWindow;
    if (eNotificationRequired())
      eNotify(new ENotificationImpl(this, Notification.SET, VilangPackage.MODEL__TRAINING_CONFIG_LAG_WINDOW, oldTrainingConfigLagWindow, trainingConfigLagWindow));
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public int getTrainingConfigLeadWindow()
  {
    return trainingConfigLeadWindow;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setTrainingConfigLeadWindow(int newTrainingConfigLeadWindow)
  {
    int oldTrainingConfigLeadWindow = trainingConfigLeadWindow;
    trainingConfigLeadWindow = newTrainingConfigLeadWindow;
    if (eNotificationRequired())
      eNotify(new ENotificationImpl(this, Notification.SET, VilangPackage.MODEL__TRAINING_CONFIG_LEAD_WINDOW, oldTrainingConfigLeadWindow, trainingConfigLeadWindow));
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public FileInfo getExecutionFileInfo()
  {
    return executionFileInfo;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public NotificationChain basicSetExecutionFileInfo(FileInfo newExecutionFileInfo, NotificationChain msgs)
  {
    FileInfo oldExecutionFileInfo = executionFileInfo;
    executionFileInfo = newExecutionFileInfo;
    if (eNotificationRequired())
    {
      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, VilangPackage.MODEL__EXECUTION_FILE_INFO, oldExecutionFileInfo, newExecutionFileInfo);
      if (msgs == null) msgs = notification; else msgs.add(notification);
    }
    return msgs;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setExecutionFileInfo(FileInfo newExecutionFileInfo)
  {
    if (newExecutionFileInfo != executionFileInfo)
    {
      NotificationChain msgs = null;
      if (executionFileInfo != null)
        msgs = ((InternalEObject)executionFileInfo).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - VilangPackage.MODEL__EXECUTION_FILE_INFO, null, msgs);
      if (newExecutionFileInfo != null)
        msgs = ((InternalEObject)newExecutionFileInfo).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - VilangPackage.MODEL__EXECUTION_FILE_INFO, null, msgs);
      msgs = basicSetExecutionFileInfo(newExecutionFileInfo, msgs);
      if (msgs != null) msgs.dispatch();
    }
    else if (eNotificationRequired())
      eNotify(new ENotificationImpl(this, Notification.SET, VilangPackage.MODEL__EXECUTION_FILE_INFO, newExecutionFileInfo, newExecutionFileInfo));
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public DataElements getExecutionDataElements()
  {
    return executionDataElements;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public NotificationChain basicSetExecutionDataElements(DataElements newExecutionDataElements, NotificationChain msgs)
  {
    DataElements oldExecutionDataElements = executionDataElements;
    executionDataElements = newExecutionDataElements;
    if (eNotificationRequired())
    {
      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, VilangPackage.MODEL__EXECUTION_DATA_ELEMENTS, oldExecutionDataElements, newExecutionDataElements);
      if (msgs == null) msgs = notification; else msgs.add(notification);
    }
    return msgs;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setExecutionDataElements(DataElements newExecutionDataElements)
  {
    if (newExecutionDataElements != executionDataElements)
    {
      NotificationChain msgs = null;
      if (executionDataElements != null)
        msgs = ((InternalEObject)executionDataElements).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - VilangPackage.MODEL__EXECUTION_DATA_ELEMENTS, null, msgs);
      if (newExecutionDataElements != null)
        msgs = ((InternalEObject)newExecutionDataElements).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - VilangPackage.MODEL__EXECUTION_DATA_ELEMENTS, null, msgs);
      msgs = basicSetExecutionDataElements(newExecutionDataElements, msgs);
      if (msgs != null) msgs.dispatch();
    }
    else if (eNotificationRequired())
      eNotify(new ENotificationImpl(this, Notification.SET, VilangPackage.MODEL__EXECUTION_DATA_ELEMENTS, newExecutionDataElements, newExecutionDataElements));
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public Feedback getConfigFeedback()
  {
    return configFeedback;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setConfigFeedback(Feedback newConfigFeedback)
  {
    Feedback oldConfigFeedback = configFeedback;
    configFeedback = newConfigFeedback == null ? CONFIG_FEEDBACK_EDEFAULT : newConfigFeedback;
    if (eNotificationRequired())
      eNotify(new ENotificationImpl(this, Notification.SET, VilangPackage.MODEL__CONFIG_FEEDBACK, oldConfigFeedback, configFeedback));
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
  {
    switch (featureID)
    {
      case VilangPackage.MODEL__MODEL_TYPE:
        return basicSetModelType(null, msgs);
      case VilangPackage.MODEL__TRAINING_FILE_INFO:
        return basicSetTrainingFileInfo(null, msgs);
      case VilangPackage.MODEL__TRAINING_DATA_ELEMENTS:
        return basicSetTrainingDataElements(null, msgs);
      case VilangPackage.MODEL__EXECUTION_FILE_INFO:
        return basicSetExecutionFileInfo(null, msgs);
      case VilangPackage.MODEL__EXECUTION_DATA_ELEMENTS:
        return basicSetExecutionDataElements(null, msgs);
    }
    return super.eInverseRemove(otherEnd, featureID, msgs);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public Object eGet(int featureID, boolean resolve, boolean coreType)
  {
    switch (featureID)
    {
      case VilangPackage.MODEL__NAME:
        return getName();
      case VilangPackage.MODEL__MODEL_TYPE:
        return getModelType();
      case VilangPackage.MODEL__TRAINING_FILE_INFO:
        return getTrainingFileInfo();
      case VilangPackage.MODEL__TRAINING_DATA_ELEMENTS:
        return getTrainingDataElements();
      case VilangPackage.MODEL__HOLD_BACK_VALIDATION_PERCENTAGE:
        return getHoldBackValidationPercentage();
      case VilangPackage.MODEL__HOLD_BACK_VALIDATION_RANDOM:
        return isHoldBackValidationRandom();
      case VilangPackage.MODEL__HOLD_BACK_VALIDATION_SHUFFLE:
        return isHoldBackValidationShuffle();
      case VilangPackage.MODEL__KFOLD_VALIDATION_VALUE:
        return getKFoldValidationValue();
      case VilangPackage.MODEL__KFOLD_VALIDATION_SHUFFLE:
        return isKFoldValidationShuffle();
      case VilangPackage.MODEL__TRAINING_CONFIG_LAG_WINDOW:
        return getTrainingConfigLagWindow();
      case VilangPackage.MODEL__TRAINING_CONFIG_LEAD_WINDOW:
        return getTrainingConfigLeadWindow();
      case VilangPackage.MODEL__EXECUTION_FILE_INFO:
        return getExecutionFileInfo();
      case VilangPackage.MODEL__EXECUTION_DATA_ELEMENTS:
        return getExecutionDataElements();
      case VilangPackage.MODEL__CONFIG_FEEDBACK:
        return getConfigFeedback();
    }
    return super.eGet(featureID, resolve, coreType);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public void eSet(int featureID, Object newValue)
  {
    switch (featureID)
    {
      case VilangPackage.MODEL__NAME:
        setName((String)newValue);
        return;
      case VilangPackage.MODEL__MODEL_TYPE:
        setModelType((ModelType)newValue);
        return;
      case VilangPackage.MODEL__TRAINING_FILE_INFO:
        setTrainingFileInfo((FileInfo)newValue);
        return;
      case VilangPackage.MODEL__TRAINING_DATA_ELEMENTS:
        setTrainingDataElements((DataElements)newValue);
        return;
      case VilangPackage.MODEL__HOLD_BACK_VALIDATION_PERCENTAGE:
        setHoldBackValidationPercentage((String)newValue);
        return;
      case VilangPackage.MODEL__HOLD_BACK_VALIDATION_RANDOM:
        setHoldBackValidationRandom((Boolean)newValue);
        return;
      case VilangPackage.MODEL__HOLD_BACK_VALIDATION_SHUFFLE:
        setHoldBackValidationShuffle((Boolean)newValue);
        return;
      case VilangPackage.MODEL__KFOLD_VALIDATION_VALUE:
        setKFoldValidationValue((Integer)newValue);
        return;
      case VilangPackage.MODEL__KFOLD_VALIDATION_SHUFFLE:
        setKFoldValidationShuffle((Boolean)newValue);
        return;
      case VilangPackage.MODEL__TRAINING_CONFIG_LAG_WINDOW:
        setTrainingConfigLagWindow((Integer)newValue);
        return;
      case VilangPackage.MODEL__TRAINING_CONFIG_LEAD_WINDOW:
        setTrainingConfigLeadWindow((Integer)newValue);
        return;
      case VilangPackage.MODEL__EXECUTION_FILE_INFO:
        setExecutionFileInfo((FileInfo)newValue);
        return;
      case VilangPackage.MODEL__EXECUTION_DATA_ELEMENTS:
        setExecutionDataElements((DataElements)newValue);
        return;
      case VilangPackage.MODEL__CONFIG_FEEDBACK:
        setConfigFeedback((Feedback)newValue);
        return;
    }
    super.eSet(featureID, newValue);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public void eUnset(int featureID)
  {
    switch (featureID)
    {
      case VilangPackage.MODEL__NAME:
        setName(NAME_EDEFAULT);
        return;
      case VilangPackage.MODEL__MODEL_TYPE:
        setModelType((ModelType)null);
        return;
      case VilangPackage.MODEL__TRAINING_FILE_INFO:
        setTrainingFileInfo((FileInfo)null);
        return;
      case VilangPackage.MODEL__TRAINING_DATA_ELEMENTS:
        setTrainingDataElements((DataElements)null);
        return;
      case VilangPackage.MODEL__HOLD_BACK_VALIDATION_PERCENTAGE:
        setHoldBackValidationPercentage(HOLD_BACK_VALIDATION_PERCENTAGE_EDEFAULT);
        return;
      case VilangPackage.MODEL__HOLD_BACK_VALIDATION_RANDOM:
        setHoldBackValidationRandom(HOLD_BACK_VALIDATION_RANDOM_EDEFAULT);
        return;
      case VilangPackage.MODEL__HOLD_BACK_VALIDATION_SHUFFLE:
        setHoldBackValidationShuffle(HOLD_BACK_VALIDATION_SHUFFLE_EDEFAULT);
        return;
      case VilangPackage.MODEL__KFOLD_VALIDATION_VALUE:
        setKFoldValidationValue(KFOLD_VALIDATION_VALUE_EDEFAULT);
        return;
      case VilangPackage.MODEL__KFOLD_VALIDATION_SHUFFLE:
        setKFoldValidationShuffle(KFOLD_VALIDATION_SHUFFLE_EDEFAULT);
        return;
      case VilangPackage.MODEL__TRAINING_CONFIG_LAG_WINDOW:
        setTrainingConfigLagWindow(TRAINING_CONFIG_LAG_WINDOW_EDEFAULT);
        return;
      case VilangPackage.MODEL__TRAINING_CONFIG_LEAD_WINDOW:
        setTrainingConfigLeadWindow(TRAINING_CONFIG_LEAD_WINDOW_EDEFAULT);
        return;
      case VilangPackage.MODEL__EXECUTION_FILE_INFO:
        setExecutionFileInfo((FileInfo)null);
        return;
      case VilangPackage.MODEL__EXECUTION_DATA_ELEMENTS:
        setExecutionDataElements((DataElements)null);
        return;
      case VilangPackage.MODEL__CONFIG_FEEDBACK:
        setConfigFeedback(CONFIG_FEEDBACK_EDEFAULT);
        return;
    }
    super.eUnset(featureID);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public boolean eIsSet(int featureID)
  {
    switch (featureID)
    {
      case VilangPackage.MODEL__NAME:
        return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
      case VilangPackage.MODEL__MODEL_TYPE:
        return modelType != null;
      case VilangPackage.MODEL__TRAINING_FILE_INFO:
        return trainingFileInfo != null;
      case VilangPackage.MODEL__TRAINING_DATA_ELEMENTS:
        return trainingDataElements != null;
      case VilangPackage.MODEL__HOLD_BACK_VALIDATION_PERCENTAGE:
        return HOLD_BACK_VALIDATION_PERCENTAGE_EDEFAULT == null ? holdBackValidationPercentage != null : !HOLD_BACK_VALIDATION_PERCENTAGE_EDEFAULT.equals(holdBackValidationPercentage);
      case VilangPackage.MODEL__HOLD_BACK_VALIDATION_RANDOM:
        return holdBackValidationRandom != HOLD_BACK_VALIDATION_RANDOM_EDEFAULT;
      case VilangPackage.MODEL__HOLD_BACK_VALIDATION_SHUFFLE:
        return holdBackValidationShuffle != HOLD_BACK_VALIDATION_SHUFFLE_EDEFAULT;
      case VilangPackage.MODEL__KFOLD_VALIDATION_VALUE:
        return kFoldValidationValue != KFOLD_VALIDATION_VALUE_EDEFAULT;
      case VilangPackage.MODEL__KFOLD_VALIDATION_SHUFFLE:
        return kFoldValidationShuffle != KFOLD_VALIDATION_SHUFFLE_EDEFAULT;
      case VilangPackage.MODEL__TRAINING_CONFIG_LAG_WINDOW:
        return trainingConfigLagWindow != TRAINING_CONFIG_LAG_WINDOW_EDEFAULT;
      case VilangPackage.MODEL__TRAINING_CONFIG_LEAD_WINDOW:
        return trainingConfigLeadWindow != TRAINING_CONFIG_LEAD_WINDOW_EDEFAULT;
      case VilangPackage.MODEL__EXECUTION_FILE_INFO:
        return executionFileInfo != null;
      case VilangPackage.MODEL__EXECUTION_DATA_ELEMENTS:
        return executionDataElements != null;
      case VilangPackage.MODEL__CONFIG_FEEDBACK:
        return configFeedback != CONFIG_FEEDBACK_EDEFAULT;
    }
    return super.eIsSet(featureID);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public String toString()
  {
    if (eIsProxy()) return super.toString();

    StringBuffer result = new StringBuffer(super.toString());
    result.append(" (name: ");
    result.append(name);
    result.append(", holdBackValidationPercentage: ");
    result.append(holdBackValidationPercentage);
    result.append(", holdBackValidationRandom: ");
    result.append(holdBackValidationRandom);
    result.append(", holdBackValidationShuffle: ");
    result.append(holdBackValidationShuffle);
    result.append(", kFoldValidationValue: ");
    result.append(kFoldValidationValue);
    result.append(", kFoldValidationShuffle: ");
    result.append(kFoldValidationShuffle);
    result.append(", trainingConfigLagWindow: ");
    result.append(trainingConfigLagWindow);
    result.append(", trainingConfigLeadWindow: ");
    result.append(trainingConfigLeadWindow);
    result.append(", configFeedback: ");
    result.append(configFeedback);
    result.append(')');
    return result.toString();
  }

} //ModelImpl
