public IEnumerable <IVersionable> Build(IEnumerable <IVersionable> ws) { var qcs = ws.OfType <ControlConstructScheme>().Single(x => x.ItemName.Best == ccsName).GetChildren().OfType <QuestionActivity>().ToList(); foreach (var fileName in fileEntries) { string[] fileNamePieces = fileName.Split(new char[] { '\\' }); string[] parts = fileNamePieces.Last().Split(new char[] { '.' }); string qc = parts[0]; string format = parts[1].ToLower(); var questionConstruct = qcs.Single(x => string.Compare(x.ItemName.Best, qc, ignoreCase: true) == 0); var aid = new OtherMaterial(); aid.MaterialType = "image"; aid.MimeType = "image/png"; aid.UrlReference = new System.Uri("https://discovery.closer.ac.uk/external_aids/" + urlDir + "/" + fileNamePieces.Last()); string label = ""; if (questionConstruct.Question != null) { questionConstruct.Question.ExternalAids.Add(aid); label = questionConstruct.Question.Label.Best; } else if (questionConstruct.QuestionGrid != null) { questionConstruct.QuestionGrid.ExternalAids.Add(aid); label = questionConstruct.QuestionGrid.Label.Best; } aid.DublinCoreMetadata.Title.SetStringForDefaultAudience("en-GB", label); } return(new List <IVersionable>()); }
public void Map(ManagedFile file, OtherMaterial material) { if (file == null) { throw new ArgumentNullException("file"); } if (material == null) { throw new ArgumentNullException("material"); } material.Identifier = file.Id; material.SetUserId("FileNumber", file.Number?.ToString()); material.DublinCoreMetadata.Title.Current = file.Title; material.DublinCoreMetadata.AlternateTitle.Current = file.PublicName; Uri uri = null; bool gotUri = Uri.TryCreate(file.PersistentLink, UriKind.RelativeOrAbsolute, out uri); if (gotUri) { material.UrlReference = uri; } material.SetUserId("PersistentLinkDate", file.PersistentLinkDate?.ToString()); material.SetUserId("Version", file.Version.ToString()); material.SetUserId("Type", file.Type); material.SetUserId("FormatName", file.FormatName); material.SetUserId("FormatId", file.FormatId); material.SetUserId("Size", file.Size.ToString()); material.SetUserId("CreationDate", file.CreationDate?.ToString()); material.SetUserId("KindOfData", file.KindOfData); material.DublinCoreMetadata.Source.Current = file.Source; material.SetUserId("SourceInformation", file.SourceInformation); material.DublinCoreMetadata.Rights.Current = file.Rights; material.SetUserId("IsPublicAccess", file.IsPublicAccess.ToString()); material.SetUserId("UploadedDate", file.UploadedDate?.ToString()); material.SetUserId("ExternalDatabase", file.ExternalDatabase); material.SetUserId("Software", file.Software); material.SetUserId("SoftwareVersion", file.SoftwareVersion); material.SetUserId("Hardware", file.Hardware); material.SetUserId("Checksum", file.Checksum); material.SetUserId("ChecksumMethod", file.ChecksumMethod); material.SetUserId("ChecksumDate", file.ChecksumDate?.ToString()); material.SetUserId("VirusCheckOutcome", file.VirusCheckOutcome); material.SetUserId("VirusCheckMethod", file.VirusCheckMethod); material.SetUserId("VirusCheckDate", file.VirusCheckDate?.ToString()); material.SetUserId("AcceptedDate", file.AcceptedDate?.ToString()); material.SetUserId("CertifiedDate", file.CertifiedDate?.ToString()); }
public static void UpdateRepositoryItemFromModel(CatalogRecord record) { var client = RepositoryHelper.GetClient(); var logger = LogManager.GetLogger("Curation"); long version = 0; try { version = client.GetLatestVersionNumber(record.Id, record.Organization.AgencyID); } catch { // StudyUnit does not exist yet. That is okay, because we are making one from // scratch anyway. logger.Debug("StudyUnit does not yet exist in the repository"); } var study = new StudyUnit() { Identifier = record.Id, AgencyId = record.Organization.AgencyID, Version = version + 1 }; var studyMapper = new CatalogRecordToStudyUnitMapper(); studyMapper.Map(record, study); // Add each file as either a PhysicalInstance or an OtherMaterial. foreach (var file in record.Files.Where(x => x.Status != FileStatus.Removed)) { if (file.IsStatisticalDataFile()) { try { var pi = client.GetLatestItem(file.Id, record.Organization.AgencyID) as PhysicalInstance; if (pi != null) { var mapper = new ManagedFileToPhysicalInstanceMapper(); mapper.Map(file, pi); pi.Version++; // Make sure the file is added to the StudyUnit. if (!study.PhysicalInstances.Any(x => x.Identifier == pi.Identifier)) { study.PhysicalInstances.Add(pi); } } } catch (Exception ex) { logger.Warn("Could not attach PhysicalInstance to StudyUnit", ex); } } else { var material = study.OtherMaterials.Where(x => x.DublinCoreMetadata.Title.Current == file.PublicName) .FirstOrDefault(); // If this material is not already on the study, add it. if (material == null) { material = new OtherMaterial(); study.OtherMaterials.Add(material); } // Perform the mapping. var mapper = new ManagedFileToOtherMaterialMapper(); mapper.Map(file, material); material.Version++; } } // Register the updated item with the repository. var commitOptions = new CommitOptions(); commitOptions.NamedOptions.Add("RegisterOrReplace"); var dirty = new DirtyItemGatherer(); study.Accept(dirty); foreach (var dirtyItem in dirty.DirtyItems) { client.RegisterItem(dirtyItem, commitOptions); } }