/// <summary>
 /// Reset species fact that has been deleted from database.
 /// Set all values to default or null.
 /// </summary>
 internal void Reset()
 {
     UpdateId(-1);
     _hasId              = false;
     _quality            = SpeciesFactManager.GetDefaultSpeciesFactQuality();
     _oldQuality         = _quality;
     _reference          = null;
     _oldReference       = null;
     _updateUserFullName = null;
     _updateDate         = DateTime.MinValue;
     _hasUpdateDate      = false;
     foreach (SpeciesFactField field in _fields)
     {
         field.Reset();
     }
 }
        /// <summary>
        /// Creates a species fact instance with no data from web service.
        /// </summary>
        /// <param name="taxon">Taxon object of the species fact</param>
        /// <param name="individualCategory">Individual category object of the species fact</param>
        /// <param name="factor">Factor object of the species fact</param>
        /// <param name="host">Host taxon object of the species fact</param>
        /// <param name="period">Period object of the species fact</param>
        public SpeciesFact(
            Taxon taxon,
            IndividualCategory individualCategory,
            Factor factor,
            Taxon host,
            Period period)
            : base(-1, -1)
        {
            Int32 fieldIndex;

            _fields            = null;
            _substantialFields = null;
            _mainField         = null;
            _hasId             = false;

            _identifier = SpeciesFactManager.GetSpeciesFactIdentifier(
                taxon,
                individualCategory,
                factor,
                host,
                period);

            _taxon = taxon;
            _individualCategory = individualCategory;
            _factor             = factor;
            _host               = host;
            _hasHost            = _host.IsNotNull();
            _period             = period;
            _hasPeriod          = _period.IsNotNull();
            _quality            = SpeciesFactManager.GetDefaultSpeciesFactQuality();
            _oldQuality         = _quality;
            _reference          = null;
            _oldReference       = null;
            _updateUserFullName = null;
            _updateDate         = DateTime.MinValue;
            _hasUpdateDate      = false;

            if (!_factor.FactorUpdateMode.IsHeader)
            {
                _fields            = new SpeciesFactFieldList();
                _substantialFields = new SpeciesFactFieldList();
                _fieldArray        = new SpeciesFactField[FactorManager.GetFactorFieldMaxCount()];
                for (fieldIndex = 0; fieldIndex < FactorManager.GetFactorFieldMaxCount(); fieldIndex++)
                {
                    _fieldArray[fieldIndex] = null;
                }

                foreach (FactorField factorField in _factor.FactorDataType.Fields)
                {
                    SpeciesFactField field;

                    field = new SpeciesFactField(this, factorField, false, null);
                    _fields.Add(field);
                    _fieldArray[field.Index] = field;

                    if (factorField.IsSubstantial)
                    {
                        _substantialFields.Add(field);
                    }

                    if (factorField.IsMain)
                    {
                        _mainField = field;
                    }
                }
            }
            _shouldBeSaved = AllowUpdate;
        }