# coding: utf-8

"""
    Internal API

    SmartDiagnostics REST API for internal users only  # noqa: E501

    OpenAPI spec version: v3
    
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""

import pprint
import re  # noqa: F401

import six

class IndicatorResponse(object):
    """NOTE: This class is auto generated by the swagger code generator program.

    Do not edit the class manually.
    """
    """
    Attributes:
      swagger_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    swagger_types = {
        'id': 'str',
        'name': 'str',
        'abbreviation': 'str',
        'system_sort_order': 'int',
        'indicator_type': 'MetricTypeCodes',
        'measure_of': 'SensorRoleTypeCodes',
        'custom_role_type': 'str',
        'display_units': 'str',
        'base_units': 'str',
        'has_spectrum': 'bool',
        'meta_data': 'str',
        'damage_exponent': 'int',
        'location': 'LocationChild',
        'hierarchy': 'list[HierarchyChild]',
        'alarm_definition': 'AlarmDefinitionChild',
        'band_definition': 'BandDefinitionChild',
        'baseline': 'BaselineIndicatorChild',
        'can_have_baseline': 'bool',
        'is_vibration': 'bool',
        'custom_units': 'str',
        'tags': 'list[str]'
    }

    attribute_map = {
        'id': 'Id',
        'name': 'Name',
        'abbreviation': 'Abbreviation',
        'system_sort_order': 'SystemSortOrder',
        'indicator_type': 'IndicatorType',
        'measure_of': 'MeasureOf',
        'custom_role_type': 'CustomRoleType',
        'display_units': 'DisplayUnits',
        'base_units': 'BaseUnits',
        'has_spectrum': 'HasSpectrum',
        'meta_data': 'MetaData',
        'damage_exponent': 'DamageExponent',
        'location': 'Location',
        'hierarchy': 'Hierarchy',
        'alarm_definition': 'AlarmDefinition',
        'band_definition': 'BandDefinition',
        'baseline': 'Baseline',
        'can_have_baseline': 'CanHaveBaseline',
        'is_vibration': 'IsVibration',
        'custom_units': 'CustomUnits',
        'tags': 'Tags'
    }

    def __init__(self, id=None, name=None, abbreviation=None, system_sort_order=None, indicator_type=None, measure_of=None, custom_role_type=None, display_units=None, base_units=None, has_spectrum=None, meta_data=None, damage_exponent=None, location=None, hierarchy=None, alarm_definition=None, band_definition=None, baseline=None, can_have_baseline=None, is_vibration=None, custom_units=None, tags=None):  # noqa: E501
        """IndicatorResponse - a model defined in Swagger"""  # noqa: E501
        self._id = None
        self._name = None
        self._abbreviation = None
        self._system_sort_order = None
        self._indicator_type = None
        self._measure_of = None
        self._custom_role_type = None
        self._display_units = None
        self._base_units = None
        self._has_spectrum = None
        self._meta_data = None
        self._damage_exponent = None
        self._location = None
        self._hierarchy = None
        self._alarm_definition = None
        self._band_definition = None
        self._baseline = None
        self._can_have_baseline = None
        self._is_vibration = None
        self._custom_units = None
        self._tags = None
        self.discriminator = None
        self.id = id
        self.name = name
        if abbreviation is not None:
            self.abbreviation = abbreviation
        self.system_sort_order = system_sort_order
        self.indicator_type = indicator_type
        self.measure_of = measure_of
        if custom_role_type is not None:
            self.custom_role_type = custom_role_type
        if display_units is not None:
            self.display_units = display_units
        if base_units is not None:
            self.base_units = base_units
        self.has_spectrum = has_spectrum
        if meta_data is not None:
            self.meta_data = meta_data
        if damage_exponent is not None:
            self.damage_exponent = damage_exponent
        self.location = location
        self.hierarchy = hierarchy
        if alarm_definition is not None:
            self.alarm_definition = alarm_definition
        if band_definition is not None:
            self.band_definition = band_definition
        if baseline is not None:
            self.baseline = baseline
        self.can_have_baseline = can_have_baseline
        self.is_vibration = is_vibration
        if custom_units is not None:
            self.custom_units = custom_units
        self.tags = tags

    @property
    def id(self):
        """Gets the id of this IndicatorResponse.  # noqa: E501

        The Id of the indicator  # noqa: E501

        :return: The id of this IndicatorResponse.  # noqa: E501
        :rtype: str
        """
        return self._id

    @id.setter
    def id(self, id):
        """Sets the id of this IndicatorResponse.

        The Id of the indicator  # noqa: E501

        :param id: The id of this IndicatorResponse.  # noqa: E501
        :type: str
        """
        if id is None:
            raise ValueError("Invalid value for `id`, must not be `None`")  # noqa: E501

        self._id = id

    @property
    def name(self):
        """Gets the name of this IndicatorResponse.  # noqa: E501

        The name of the indicator  # noqa: E501

        :return: The name of this IndicatorResponse.  # noqa: E501
        :rtype: str
        """
        return self._name

    @name.setter
    def name(self, name):
        """Sets the name of this IndicatorResponse.

        The name of the indicator  # noqa: E501

        :param name: The name of this IndicatorResponse.  # noqa: E501
        :type: str
        """
        if name is None:
            raise ValueError("Invalid value for `name`, must not be `None`")  # noqa: E501

        self._name = name

    @property
    def abbreviation(self):
        """Gets the abbreviation of this IndicatorResponse.  # noqa: E501

        The abbreviation of the indicator  # noqa: E501

        :return: The abbreviation of this IndicatorResponse.  # noqa: E501
        :rtype: str
        """
        return self._abbreviation

    @abbreviation.setter
    def abbreviation(self, abbreviation):
        """Sets the abbreviation of this IndicatorResponse.

        The abbreviation of the indicator  # noqa: E501

        :param abbreviation: The abbreviation of this IndicatorResponse.  # noqa: E501
        :type: str
        """

        self._abbreviation = abbreviation

    @property
    def system_sort_order(self):
        """Gets the system_sort_order of this IndicatorResponse.  # noqa: E501

        A number indicating where the indicator shows up in the list of indicators for a System.  # noqa: E501

        :return: The system_sort_order of this IndicatorResponse.  # noqa: E501
        :rtype: int
        """
        return self._system_sort_order

    @system_sort_order.setter
    def system_sort_order(self, system_sort_order):
        """Sets the system_sort_order of this IndicatorResponse.

        A number indicating where the indicator shows up in the list of indicators for a System.  # noqa: E501

        :param system_sort_order: The system_sort_order of this IndicatorResponse.  # noqa: E501
        :type: int
        """
        if system_sort_order is None:
            raise ValueError("Invalid value for `system_sort_order`, must not be `None`")  # noqa: E501

        self._system_sort_order = system_sort_order

    @property
    def indicator_type(self):
        """Gets the indicator_type of this IndicatorResponse.  # noqa: E501


        :return: The indicator_type of this IndicatorResponse.  # noqa: E501
        :rtype: MetricTypeCodes
        """
        return self._indicator_type

    @indicator_type.setter
    def indicator_type(self, indicator_type):
        """Sets the indicator_type of this IndicatorResponse.


        :param indicator_type: The indicator_type of this IndicatorResponse.  # noqa: E501
        :type: MetricTypeCodes
        """
        if indicator_type is None:
            raise ValueError("Invalid value for `indicator_type`, must not be `None`")  # noqa: E501

        self._indicator_type = indicator_type

    @property
    def measure_of(self):
        """Gets the measure_of of this IndicatorResponse.  # noqa: E501


        :return: The measure_of of this IndicatorResponse.  # noqa: E501
        :rtype: SensorRoleTypeCodes
        """
        return self._measure_of

    @measure_of.setter
    def measure_of(self, measure_of):
        """Sets the measure_of of this IndicatorResponse.


        :param measure_of: The measure_of of this IndicatorResponse.  # noqa: E501
        :type: SensorRoleTypeCodes
        """
        if measure_of is None:
            raise ValueError("Invalid value for `measure_of`, must not be `None`")  # noqa: E501

        self._measure_of = measure_of

    @property
    def custom_role_type(self):
        """Gets the custom_role_type of this IndicatorResponse.  # noqa: E501

        For indicators with MeasureOf == Custom, the virtual \"sensor\" they read data from  # noqa: E501

        :return: The custom_role_type of this IndicatorResponse.  # noqa: E501
        :rtype: str
        """
        return self._custom_role_type

    @custom_role_type.setter
    def custom_role_type(self, custom_role_type):
        """Sets the custom_role_type of this IndicatorResponse.

        For indicators with MeasureOf == Custom, the virtual \"sensor\" they read data from  # noqa: E501

        :param custom_role_type: The custom_role_type of this IndicatorResponse.  # noqa: E501
        :type: str
        """

        self._custom_role_type = custom_role_type

    @property
    def display_units(self):
        """Gets the display_units of this IndicatorResponse.  # noqa: E501

        The short hand form of the `BaseUnit` used for the display (g, °C, mm/sec)  # noqa: E501

        :return: The display_units of this IndicatorResponse.  # noqa: E501
        :rtype: str
        """
        return self._display_units

    @display_units.setter
    def display_units(self, display_units):
        """Sets the display_units of this IndicatorResponse.

        The short hand form of the `BaseUnit` used for the display (g, °C, mm/sec)  # noqa: E501

        :param display_units: The display_units of this IndicatorResponse.  # noqa: E501
        :type: str
        """

        self._display_units = display_units

    @property
    def base_units(self):
        """Gets the base_units of this IndicatorResponse.  # noqa: E501

        The full name of the Unit (G-Force, Celsius, MillimetersperSec)  # noqa: E501

        :return: The base_units of this IndicatorResponse.  # noqa: E501
        :rtype: str
        """
        return self._base_units

    @base_units.setter
    def base_units(self, base_units):
        """Sets the base_units of this IndicatorResponse.

        The full name of the Unit (G-Force, Celsius, MillimetersperSec)  # noqa: E501

        :param base_units: The base_units of this IndicatorResponse.  # noqa: E501
        :type: str
        """

        self._base_units = base_units

    @property
    def has_spectrum(self):
        """Gets the has_spectrum of this IndicatorResponse.  # noqa: E501

        Whether or not the indicator produces burst data that can be plotted  on a spectrum chart (the frequency or time wave spectrum's)  # noqa: E501

        :return: The has_spectrum of this IndicatorResponse.  # noqa: E501
        :rtype: bool
        """
        return self._has_spectrum

    @has_spectrum.setter
    def has_spectrum(self, has_spectrum):
        """Sets the has_spectrum of this IndicatorResponse.

        Whether or not the indicator produces burst data that can be plotted  on a spectrum chart (the frequency or time wave spectrum's)  # noqa: E501

        :param has_spectrum: The has_spectrum of this IndicatorResponse.  # noqa: E501
        :type: bool
        """
        if has_spectrum is None:
            raise ValueError("Invalid value for `has_spectrum`, must not be `None`")  # noqa: E501

        self._has_spectrum = has_spectrum

    @property
    def meta_data(self):
        """Gets the meta_data of this IndicatorResponse.  # noqa: E501


        :return: The meta_data of this IndicatorResponse.  # noqa: E501
        :rtype: str
        """
        return self._meta_data

    @meta_data.setter
    def meta_data(self, meta_data):
        """Sets the meta_data of this IndicatorResponse.


        :param meta_data: The meta_data of this IndicatorResponse.  # noqa: E501
        :type: str
        """

        self._meta_data = meta_data

    @property
    def damage_exponent(self):
        """Gets the damage_exponent of this IndicatorResponse.  # noqa: E501


        :return: The damage_exponent of this IndicatorResponse.  # noqa: E501
        :rtype: int
        """
        return self._damage_exponent

    @damage_exponent.setter
    def damage_exponent(self, damage_exponent):
        """Sets the damage_exponent of this IndicatorResponse.


        :param damage_exponent: The damage_exponent of this IndicatorResponse.  # noqa: E501
        :type: int
        """

        self._damage_exponent = damage_exponent

    @property
    def location(self):
        """Gets the location of this IndicatorResponse.  # noqa: E501


        :return: The location of this IndicatorResponse.  # noqa: E501
        :rtype: LocationChild
        """
        return self._location

    @location.setter
    def location(self, location):
        """Sets the location of this IndicatorResponse.


        :param location: The location of this IndicatorResponse.  # noqa: E501
        :type: LocationChild
        """
        if location is None:
            raise ValueError("Invalid value for `location`, must not be `None`")  # noqa: E501

        self._location = location

    @property
    def hierarchy(self):
        """Gets the hierarchy of this IndicatorResponse.  # noqa: E501


        :return: The hierarchy of this IndicatorResponse.  # noqa: E501
        :rtype: list[HierarchyChild]
        """
        return self._hierarchy

    @hierarchy.setter
    def hierarchy(self, hierarchy):
        """Sets the hierarchy of this IndicatorResponse.


        :param hierarchy: The hierarchy of this IndicatorResponse.  # noqa: E501
        :type: list[HierarchyChild]
        """
        if hierarchy is None:
            raise ValueError("Invalid value for `hierarchy`, must not be `None`")  # noqa: E501

        self._hierarchy = hierarchy

    @property
    def alarm_definition(self):
        """Gets the alarm_definition of this IndicatorResponse.  # noqa: E501


        :return: The alarm_definition of this IndicatorResponse.  # noqa: E501
        :rtype: AlarmDefinitionChild
        """
        return self._alarm_definition

    @alarm_definition.setter
    def alarm_definition(self, alarm_definition):
        """Sets the alarm_definition of this IndicatorResponse.


        :param alarm_definition: The alarm_definition of this IndicatorResponse.  # noqa: E501
        :type: AlarmDefinitionChild
        """

        self._alarm_definition = alarm_definition

    @property
    def band_definition(self):
        """Gets the band_definition of this IndicatorResponse.  # noqa: E501


        :return: The band_definition of this IndicatorResponse.  # noqa: E501
        :rtype: BandDefinitionChild
        """
        return self._band_definition

    @band_definition.setter
    def band_definition(self, band_definition):
        """Sets the band_definition of this IndicatorResponse.


        :param band_definition: The band_definition of this IndicatorResponse.  # noqa: E501
        :type: BandDefinitionChild
        """

        self._band_definition = band_definition

    @property
    def baseline(self):
        """Gets the baseline of this IndicatorResponse.  # noqa: E501


        :return: The baseline of this IndicatorResponse.  # noqa: E501
        :rtype: BaselineIndicatorChild
        """
        return self._baseline

    @baseline.setter
    def baseline(self, baseline):
        """Sets the baseline of this IndicatorResponse.


        :param baseline: The baseline of this IndicatorResponse.  # noqa: E501
        :type: BaselineIndicatorChild
        """

        self._baseline = baseline

    @property
    def can_have_baseline(self):
        """Gets the can_have_baseline of this IndicatorResponse.  # noqa: E501

        Determines whether or not an indicator can have a baseline.  Only vibration and damage type indicators can have a baseline  # noqa: E501

        :return: The can_have_baseline of this IndicatorResponse.  # noqa: E501
        :rtype: bool
        """
        return self._can_have_baseline

    @can_have_baseline.setter
    def can_have_baseline(self, can_have_baseline):
        """Sets the can_have_baseline of this IndicatorResponse.

        Determines whether or not an indicator can have a baseline.  Only vibration and damage type indicators can have a baseline  # noqa: E501

        :param can_have_baseline: The can_have_baseline of this IndicatorResponse.  # noqa: E501
        :type: bool
        """
        if can_have_baseline is None:
            raise ValueError("Invalid value for `can_have_baseline`, must not be `None`")  # noqa: E501

        self._can_have_baseline = can_have_baseline

    @property
    def is_vibration(self):
        """Gets the is_vibration of this IndicatorResponse.  # noqa: E501

        Determines whether or not an indicator measures vibration.  Note: DamageAccumulationAccel is considered vibration.  # noqa: E501

        :return: The is_vibration of this IndicatorResponse.  # noqa: E501
        :rtype: bool
        """
        return self._is_vibration

    @is_vibration.setter
    def is_vibration(self, is_vibration):
        """Sets the is_vibration of this IndicatorResponse.

        Determines whether or not an indicator measures vibration.  Note: DamageAccumulationAccel is considered vibration.  # noqa: E501

        :param is_vibration: The is_vibration of this IndicatorResponse.  # noqa: E501
        :type: bool
        """
        if is_vibration is None:
            raise ValueError("Invalid value for `is_vibration`, must not be `None`")  # noqa: E501

        self._is_vibration = is_vibration

    @property
    def custom_units(self):
        """Gets the custom_units of this IndicatorResponse.  # noqa: E501

        This property is populated for indicators like General Input that can have custom units  assigned. The `CustomUnits` is used as the display unit when present.  # noqa: E501

        :return: The custom_units of this IndicatorResponse.  # noqa: E501
        :rtype: str
        """
        return self._custom_units

    @custom_units.setter
    def custom_units(self, custom_units):
        """Sets the custom_units of this IndicatorResponse.

        This property is populated for indicators like General Input that can have custom units  assigned. The `CustomUnits` is used as the display unit when present.  # noqa: E501

        :param custom_units: The custom_units of this IndicatorResponse.  # noqa: E501
        :type: str
        """

        self._custom_units = custom_units

    @property
    def tags(self):
        """Gets the tags of this IndicatorResponse.  # noqa: E501

        Tags associated with the indicator.  # noqa: E501

        :return: The tags of this IndicatorResponse.  # noqa: E501
        :rtype: list[str]
        """
        return self._tags

    @tags.setter
    def tags(self, tags):
        """Sets the tags of this IndicatorResponse.

        Tags associated with the indicator.  # noqa: E501

        :param tags: The tags of this IndicatorResponse.  # noqa: E501
        :type: list[str]
        """
        if tags is None:
            raise ValueError("Invalid value for `tags`, must not be `None`")  # noqa: E501

        self._tags = tags

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in six.iteritems(self.swagger_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value
        if issubclass(IndicatorResponse, dict):
            for key, value in self.items():
                result[key] = value

        return result

    def to_str(self):
        """Returns the string representation of the model"""
        return pprint.pformat(self.to_dict())

    def __repr__(self):
        """For `print` and `pprint`"""
        return self.to_str()

    def __eq__(self, other):
        """Returns true if both objects are equal"""
        if not isinstance(other, IndicatorResponse):
            return False

        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        """Returns true if both objects are not equal"""
        return not self == other
