/**
   * @see
   *     com.sensus.common.validation.IValidator#validate(com.sensus.common.validation.ValidationContext)
   */
  @Override
  public void validate(ValidationContext validationContext) {
    DMPersistanceActionEnum action =
        (DMPersistanceActionEnum)
            validationContext
                .getValidationArguments()
                .get(DMPersistanceActionEnum.getDefaultName());

    Device device = (Device) validationContext.getObjectToBeValidated(Device.class.getSimpleName());

    if (ValidationUtil.isNull(action) || ValidationUtil.isNull(device)) {
      validationContext.getMessages().add(MessageInfo.createFieldValidationError(DEVICE_REQUIRED));
      return;
    }

    switch (action) {
      case FETCH_UPDATED_LOAD_PROFILE:
      case FETCH_ALL_WATER_GAS_DATA_READ:
      case FETCH_ALL_INTERVAL_READ:
      case FETCH_ALL_LOAD_PROFILE_READ:
      case FETCH_ALL_TOU_READ:
      case FETCH_ALL_SNAPSHOT:
      case GENERATE_FILE_CSV_WATER_GAS_DATA_READ:
      case GENERATE_FILE_CSV_INTERVAL_READ:
      case GENERATE_FILE_CSV_LOAD_PROFILE_READ:
      case GENERATE_FILE_CSV_SNAPSHOT:
      case GENERATE_FILE_CSV_TOU:
        ValidationUtil.isNullOrEmpty(
            device.getDeviceId(), DEVICE_ID_REQUIRED, validationContext.getMessages());
        ValidationUtil.isNull(
            device.getDeviceType(), DEVICE_TYPE_ENUM_REQUIRED, validationContext.getMessages());
        break;
      case FETCH_ALL:
        validateDeviceId(validationContext.getMessages(), device);
        break;
      case FETCH_DEVICE_BY_ID:
        validateDeviceIdOrFlexNetIdRequired(validationContext.getMessages(), device);
        ValidationUtil.isNull(
            device.getDeviceType(), DEVICE_TYPE_ENUM_REQUIRED, validationContext.getMessages());
        break;
      case FETCH_DEVICE_BY_ID_IMPORT:
        validateDeviceIdOrFlexNetIdRequired(validationContext.getMessages(), device);
        break;
      case FETCH_ALL_MODEL_BY_HAN_DEVICE_TYPE:
      case FETCH_ALL_MANUFACTURE_BY_HAN_DEVICE_TYPE:
        ValidationUtil.isNull(
            device.getDeviceType(), DEVICE_TYPE_ENUM_REQUIRED, validationContext.getMessages());
        break;
      case FETCH_ALL_PEAK_DEMAND:
      case GENERATE_FILE_CSV_PEAK_READ:
        ValidationUtil.isNullOrEmpty(
            device.getDeviceId(), DEVICE_ID_REQUIRED, validationContext.getMessages());
        break;
      default:
        break;
    }
  }