/// <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)); } }
/// <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); }
/// <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()); }
/// <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); }