/**
 * Nudr_DataRepository API OpenAPI file
 * Unified Data Repository Service. © 2020, 3GPP Organizational Partners (ARIB,
 * ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
 *
 * The version of the OpenAPI document: 2.1.2
 *
 *
 * NOTE: This class is auto generated by OpenAPI Generator
 * (https://openapi-generator.tech). https://openapi-generator.tech Do not edit
 * the class manually.
 */
/*
 * TrafficInfluData.h
 *
 *
 */

#ifndef TrafficInfluData_H_
#define TrafficInfluData_H_

#include "DnaiChangeType.h"
#include "EthFlowDescription.h"
#include "FlowInfo.h"
#include "NetworkAreaInfo_2.h"
#include "RouteToLocation.h"
#include "Snssai.h"
#include "SubscribedEvent.h"
#include "TemporalValidity.h"
#include <nlohmann/json.hpp>
#include <string>
#include <vector>

namespace org {
namespace openapitools {
namespace server {
namespace model {

/// <summary>
///
/// </summary>
class TrafficInfluData {
public:
  TrafficInfluData();
  virtual ~TrafficInfluData();

  void validate();

  /////////////////////////////////////////////
  /// TrafficInfluData members

  /// <summary>
  /// Contains the Notification Correlation Id allocated by the NEF for the UP
  /// path change notification.
  /// </summary>
  std::string getUpPathChgNotifCorreId() const;
  void setUpPathChgNotifCorreId(std::string const &value);
  bool upPathChgNotifCorreIdIsSet() const;
  void unsetUpPathChgNotifCorreId();
  /// <summary>
  /// Identifies whether an application can be relocated once a location of the
  /// application has been selected.
  /// </summary>
  bool isAppReloInd() const;
  void setAppReloInd(bool const value);
  bool appReloIndIsSet() const;
  void unsetAppReloInd();
  /// <summary>
  /// Identifies an application.
  /// </summary>
  std::string getAfAppId() const;
  void setAfAppId(std::string const &value);
  bool afAppIdIsSet() const;
  void unsetAfAppId();
  /// <summary>
  ///
  /// </summary>
  std::string getDnn() const;
  void setDnn(std::string const &value);
  bool dnnIsSet() const;
  void unsetDnn();
  /// <summary>
  /// Identifies Ethernet packet filters. Either \&quot;trafficFilters\&quot; or
  /// \&quot;ethTrafficFilters\&quot; shall be included if applicable.
  /// </summary>
  std::vector<EthFlowDescription> &getEthTrafficFilters();
  void setEthTrafficFilters(std::vector<EthFlowDescription> const &value);
  bool ethTrafficFiltersIsSet() const;
  void unsetEthTrafficFilters();
  /// <summary>
  ///
  /// </summary>
  Snssai getSnssai() const;
  void setSnssai(Snssai const &value);
  bool snssaiIsSet() const;
  void unsetSnssai();
  /// <summary>
  ///
  /// </summary>
  std::string getInterGroupId() const;
  void setInterGroupId(std::string const &value);
  bool interGroupIdIsSet() const;
  void unsetInterGroupId();
  /// <summary>
  ///
  /// </summary>
  std::string getSupi() const;
  void setSupi(std::string const &value);
  bool supiIsSet() const;
  void unsetSupi();
  /// <summary>
  /// Identifies IP packet filters. Either \&quot;trafficFilters\&quot; or
  /// \&quot;ethTrafficFilters\&quot; shall be included if applicable.
  /// </summary>
  std::vector<FlowInfo> &getTrafficFilters();
  void setTrafficFilters(std::vector<FlowInfo> const &value);
  bool trafficFiltersIsSet() const;
  void unsetTrafficFilters();
  /// <summary>
  /// Identifies the N6 traffic routing requirement.
  /// </summary>
  std::vector<RouteToLocation> &getTrafficRoutes();
  void setTrafficRoutes(std::vector<RouteToLocation> const &value);
  bool trafficRoutesIsSet() const;
  void unsetTrafficRoutes();
  /// <summary>
  ///
  /// </summary>
  bool isTraffCorreInd() const;
  void setTraffCorreInd(bool const value);
  bool traffCorreIndIsSet() const;
  void unsetTraffCorreInd();
  /// <summary>
  ///
  /// </summary>
  std::string getValidStartTime() const;
  void setValidStartTime(std::string const &value);
  bool validStartTimeIsSet() const;
  void unsetValidStartTime();
  /// <summary>
  ///
  /// </summary>
  std::string getValidEndTime() const;
  void setValidEndTime(std::string const &value);
  bool validEndTimeIsSet() const;
  void unsetValidEndTime();
  /// <summary>
  /// Identifies the temporal validities for the N6 traffic routing requirement.
  /// </summary>
  std::vector<TemporalValidity> &getTempValidities();
  void setTempValidities(std::vector<TemporalValidity> const &value);
  bool tempValiditiesIsSet() const;
  void unsetTempValidities();
  /// <summary>
  ///
  /// </summary>
  NetworkAreaInfo_2 getNwAreaInfo() const;
  void setNwAreaInfo(NetworkAreaInfo_2 const &value);
  bool nwAreaInfoIsSet() const;
  void unsetNwAreaInfo();
  /// <summary>
  ///
  /// </summary>
  std::string getUpPathChgNotifUri() const;
  void setUpPathChgNotifUri(std::string const &value);
  bool upPathChgNotifUriIsSet() const;
  void unsetUpPathChgNotifUri();
  /// <summary>
  ///
  /// </summary>
  std::vector<std::string> &getHeaders();
  void setHeaders(std::vector<std::string> const &value);
  bool headersIsSet() const;
  void unsetHeaders();
  /// <summary>
  ///
  /// </summary>
  std::vector<SubscribedEvent> &getSubscribedEvents();
  void setSubscribedEvents(std::vector<SubscribedEvent> const &value);
  bool subscribedEventsIsSet() const;
  void unsetSubscribedEvents();
  /// <summary>
  ///
  /// </summary>
  DnaiChangeType getDnaiChgType() const;
  void setDnaiChgType(DnaiChangeType const &value);
  bool dnaiChgTypeIsSet() const;
  void unsetDnaiChgType();
  /// <summary>
  ///
  /// </summary>
  bool isAfAckInd() const;
  void setAfAckInd(bool const value);
  bool afAckIndIsSet() const;
  void unsetAfAckInd();
  /// <summary>
  ///
  /// </summary>
  bool isAddrPreserInd() const;
  void setAddrPreserInd(bool const value);
  bool addrPreserIndIsSet() const;
  void unsetAddrPreserInd();
  /// <summary>
  ///
  /// </summary>
  std::string getSupportedFeatures() const;
  void setSupportedFeatures(std::string const &value);
  bool supportedFeaturesIsSet() const;
  void unsetSupportedFeatures();
  /// <summary>
  ///
  /// </summary>
  std::string getResUri() const;
  void setResUri(std::string const &value);
  bool resUriIsSet() const;
  void unsetResUri();

  friend void to_json(nlohmann::json &j, const TrafficInfluData &o);
  friend void from_json(const nlohmann::json &j, TrafficInfluData &o);

protected:
  std::string m_UpPathChgNotifCorreId;
  bool m_UpPathChgNotifCorreIdIsSet;
  bool m_AppReloInd;
  bool m_AppReloIndIsSet;
  std::string m_AfAppId;
  bool m_AfAppIdIsSet;
  std::string m_Dnn;
  bool m_DnnIsSet;
  std::vector<EthFlowDescription> m_EthTrafficFilters;
  bool m_EthTrafficFiltersIsSet;
  Snssai m_Snssai;
  bool m_SnssaiIsSet;
  std::string m_InterGroupId;
  bool m_InterGroupIdIsSet;
  std::string m_Supi;
  bool m_SupiIsSet;
  std::vector<FlowInfo> m_TrafficFilters;
  bool m_TrafficFiltersIsSet;
  std::vector<RouteToLocation> m_TrafficRoutes;
  bool m_TrafficRoutesIsSet;
  bool m_TraffCorreInd;
  bool m_TraffCorreIndIsSet;
  std::string m_ValidStartTime;
  bool m_ValidStartTimeIsSet;
  std::string m_ValidEndTime;
  bool m_ValidEndTimeIsSet;
  std::vector<TemporalValidity> m_TempValidities;
  bool m_TempValiditiesIsSet;
  NetworkAreaInfo_2 m_NwAreaInfo;
  bool m_NwAreaInfoIsSet;
  std::string m_UpPathChgNotifUri;
  bool m_UpPathChgNotifUriIsSet;
  std::vector<std::string> m_Headers;
  bool m_HeadersIsSet;
  std::vector<SubscribedEvent> m_SubscribedEvents;
  bool m_SubscribedEventsIsSet;
  DnaiChangeType m_DnaiChgType;
  bool m_DnaiChgTypeIsSet;
  bool m_AfAckInd;
  bool m_AfAckIndIsSet;
  bool m_AddrPreserInd;
  bool m_AddrPreserIndIsSet;
  std::string m_SupportedFeatures;
  bool m_SupportedFeaturesIsSet;
  std::string m_ResUri;
  bool m_ResUriIsSet;
};

} // namespace model
} // namespace server
} // namespace openapitools
} // namespace org

#endif /* TrafficInfluData_H_ */
