Ejemplo n.º 1
0
        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>());
        }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        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);
            }
        }