Beispiel #1
0
        /// <summary>
        /// Parse child tag
        /// </summary>
        protected override ITlvTag ParseChild(ITlvTag childTag)
        {
            switch (childTag.Type)
            {
            case Constants.PublicationsFileHeader.TagType:
                _headerIndex = Count;
                return(_publicationsHeader = childTag as PublicationsFileHeader ?? new PublicationsFileHeader(childTag));

            case Constants.CertificateRecord.TagType:
                _lastCertRecordIndex = Count;
                CertificateRecord certificateRecord = childTag as CertificateRecord ?? new CertificateRecord(childTag);
                _certificateRecordList.Add(certificateRecord);
                return(certificateRecord);

            case Constants.PublicationRecord.TagTypeInPublicationsFile:
                if (_firstPublicationRecordIndex == 0)
                {
                    _firstPublicationRecordIndex = Count;
                }
                PublicationRecordInPublicationFile publicationRecord = childTag as PublicationRecordInPublicationFile ?? new PublicationRecordInPublicationFile(childTag);
                _publicationRecordList.Add(publicationRecord);
                return(publicationRecord);

            case Constants.PublicationsFile.CmsSignatureTagType:
                _cmsSignatureIndex = Count;
                return(_cmsSignature = GetRawTag(childTag));

            default:
                return(base.ParseChild(childTag));
            }
        }
Beispiel #2
0
        /// <summary>
        ///     Get latest publication record.
        /// </summary>
        /// <returns>publication record</returns>
        public PublicationRecordInPublicationFile GetLatestPublication()
        {
            PublicationRecordInPublicationFile latest = null;

            foreach (PublicationRecordInPublicationFile publicationRecord in _publicationRecordList)
            {
                if (latest == null)
                {
                    latest = publicationRecord;
                    continue;
                }

                if (publicationRecord.PublicationData.PublicationTime.CompareTo(latest.PublicationData.PublicationTime) > 0)
                {
                    latest = publicationRecord;
                }
            }

            return(latest);
        }
Beispiel #3
0
        /// <summary>
        ///     Convert publications file to string.
        /// </summary>
        /// <returns>publications file as string</returns>
        public override string ToString()
        {
            StringBuilder builder = new StringBuilder();

            builder.Append("Publications file");

            builder.Append(", created: ").Append(_publicationsHeader.CreationTime);

            PublicationRecordInPublicationFile latestPublication = GetLatestPublication();

            if (latestPublication != null)
            {
                builder.Append(", last publication: ").Append(latestPublication.PublicationData.PublicationTime);
            }

            if (_publicationsHeader.RepositoryUri != null)
            {
                builder.Append(", published at: ").Append(_publicationsHeader.RepositoryUri);
            }

            return(builder.ToString());
        }
Beispiel #4
0
        /// <summary>
        ///     Get nearest publication record subsequent to given time.
        /// </summary>
        /// <param name="time">time</param>
        /// <returns>publication record closest to time</returns>
        public PublicationRecordInPublicationFile GetNearestPublicationRecord(ulong time)
        {
            PublicationRecordInPublicationFile nearestPublicationRecord = null;

            foreach (PublicationRecordInPublicationFile publicationRecord in _publicationRecordList)
            {
                ulong publicationTime = publicationRecord.PublicationData.PublicationTime;
                if (publicationTime < time)
                {
                    continue;
                }

                if (nearestPublicationRecord == null)
                {
                    nearestPublicationRecord = publicationRecord;
                }
                else if (publicationTime < nearestPublicationRecord.PublicationData.PublicationTime)
                {
                    nearestPublicationRecord = publicationRecord;
                }
            }

            return(nearestPublicationRecord);
        }