/// <summary> /// Initializes a new instance of the <see cref="SequenceMixerController"/> class. /// </summary> public SequenceMixerController() { db = new LibiadaWebEntities(); sequenceRepository = new CommonSequenceRepository(db); dnaSequenceRepository = new GeneticSequenceRepository(db); musicSequenceRepository = new MusicSequenceRepository(db); literatureSequenceRepository = new LiteratureSequenceRepository(db); dataSequenceRepository = new DataSequenceRepository(db); elementRepository = new ElementRepository(db); }
public ActionResult Index(Notation notation, bool dropPunctuation) { return(CreateTask(() => { var importResults = new List <MatterImportResult>(); using (var db = new LibiadaWebEntities()) { Matter[] matters = db.Matter.Where(m => m.Nature == Nature.Literature).ToArray(); for (int i = 0; i < Request.Files.Count; i++) { string sequenceName = Request.Files[i].FileName.Substring(0, Request.Files[i].FileName.LastIndexOf('.')); var importResult = new MatterImportResult() { MatterName = sequenceName }; try { var sequence = new CommonSequence { Notation = notation }; if (matters.Any(m => m.Name == sequenceName)) { sequence.MatterId = matters.Single(m => m.Name == sequenceName).Id; importResult.Result = "Successfully imported poem for existing matter"; } else { sequence.Matter = new Matter { Name = sequenceName, Group = Group.ClassicalLiterature, Nature = Nature.Literature, SequenceType = SequenceType.CompleteText }; importResult.Result = "Successfully imported poem and created matter"; } var repository = new LiteratureSequenceRepository(db); repository.Create(sequence, Request.Files[i].InputStream, Language.Russian, true, Translator.NoneOrManual, dropPunctuation); importResult.Status = "Success"; importResults.Add(importResult); } catch (Exception exception) { importResult.Result = $"Failed to import poem: {exception.Message}"; while (exception.InnerException != null) { importResult.Result += $" {exception.InnerException.Message}"; exception = exception.InnerException; } importResult.Status = "Error"; importResults.Add(importResult); } } var data = new Dictionary <string, object> { { "result", importResults } }; return new Dictionary <string, object> { { "data", JsonConvert.SerializeObject(data) } }; } })); }
public ActionResult Create( [Bind(Include = "Id,Notation,RemoteDb,RemoteId,Description,Matter,MatterId")] CommonSequence commonSequence, bool localFile, Language?language, bool?original, Translator?translator, bool?partial, int?precision) { return(CreateTask(() => { var db = new LibiadaWebEntities(); try { if (!ModelState.IsValid) { throw new Exception("Model state is invalid"); } Stream sequenceStream; Nature nature = commonSequence.Notation.GetNature(); if (nature == Nature.Genetic && !localFile) { sequenceStream = NcbiHelper.GetFastaFileStream(commonSequence.RemoteId); } else { sequenceStream = FileHelper.GetFileStream(Request.Files[0]); } switch (nature) { case Nature.Genetic: ISequence bioSequence = NcbiHelper.GetFastaSequence(sequenceStream); var dnaSequenceRepository = new GeneticSequenceRepository(db); dnaSequenceRepository.Create(commonSequence, bioSequence, partial ?? false); break; case Nature.Music: var musicSequenceRepository = new MusicSequenceRepository(db); musicSequenceRepository.Create(commonSequence, sequenceStream); break; case Nature.Literature: var literatureSequenceRepository = new LiteratureSequenceRepository(db); literatureSequenceRepository.Create(commonSequence, sequenceStream, language ?? Language.Russian, original ?? true, translator ?? Translator.NoneOrManual); break; case Nature.MeasurementData: var dataSequenceRepository = new DataSequenceRepository(db); dataSequenceRepository.Create(commonSequence, sequenceStream, precision ?? 0); break; case Nature.Image: var matterRepository = new MatterRepository(db); int fileSize = Request.Files[0].ContentLength; var file = new byte[fileSize]; Request.Files[0].InputStream.Read(file, 0, fileSize); var matter = new Matter { Nature = Nature.Image, SequenceType = commonSequence.Matter.SequenceType, Name = commonSequence.Matter.Name, Source = file, Group = commonSequence.Matter.Group }; matterRepository.SaveToDatabase(matter); break; default: throw new InvalidEnumArgumentException(nameof(nature), (int)nature, typeof(Nature)); } string multisequenceName = db.Multisequence.SingleOrDefault(ms => ms.Id == commonSequence.Matter.MultisequenceId).Name; var result = new ImportResult(commonSequence, language, original, translator, partial, precision, multisequenceName); return new Dictionary <string, string> { { "data", JsonConvert.SerializeObject(result) } }; } catch (Exception) { long matterId = commonSequence.MatterId; if (matterId != 0) { List <Matter> orphanMatter = db.Matter .Include(m => m.Sequence) .Where(m => m.Id == matterId && m.Sequence.Count == 0) .ToList(); if (orphanMatter.Count > 0) { db.Matter.Remove(orphanMatter[0]); db.SaveChanges(); } } throw; } finally { Dispose(true); } })); }