/// <summary> /// Initializes a new instance of the <see cref="LocalCalculationController"/> class. /// </summary> public LocalCalculationController() : base("Local calculation") { db = new LibiadaWebEntities(); commonSequenceRepository = new CommonSequenceRepository(db); characteristicTypeLinkRepository = new CharacteristicTypeLinkRepository(db); }
public ActionResult Index( long[] matterIds, int[] characteristicTypeLinkIds, int[] notationIds, int[] languageIds, int?[] translatorIds, bool rotate, bool complementary, uint? rotationLength) { return Action(() => { var sequencesCharacteristics = new SequenceCharacteristics[matterIds.Length]; var characteristicNames = new string[characteristicTypeLinkIds.Length]; var characteristicsList = new SelectListItem[characteristicTypeLinkIds.Length]; var links = new Link[characteristicTypeLinkIds.Length]; var calculators = new IFullCalculator[characteristicTypeLinkIds.Length]; Dictionary<long, string> mattersNames; double[][] characteristics; Chain[][] chains; using (var db = new LibiadaWebEntities()) { mattersNames = db.Matter.Where(m => matterIds.Contains(m.Id)).ToDictionary(m => m.Id, m => m.Name); var commonSequenceRepository = new CommonSequenceRepository(db); chains = commonSequenceRepository.GetChains(matterIds, notationIds, languageIds, translatorIds); var characteristicTypeLinkRepository = new CharacteristicTypeLinkRepository(db); for (int k = 0; k < characteristicTypeLinkIds.Length; k++) { links[k] = characteristicTypeLinkRepository.GetLibiadaLink(characteristicTypeLinkIds[k]); string className = characteristicTypeLinkRepository.GetCharacteristicType(characteristicTypeLinkIds[k]).ClassName; calculators[k] = CalculatorsFactory.CreateFullCalculator(className); characteristicNames[k] = characteristicTypeLinkRepository.GetCharacteristicName(characteristicTypeLinkIds[k], notationIds[k]); characteristicsList[k] = new SelectListItem { Value = k.ToString(), Text = characteristicNames[k], Selected = false }; } } if (!rotate && !complementary) { characteristics = SequencesCharacteristicsCalculator.Calculate(chains, calculators, links, characteristicTypeLinkIds); } else { characteristics = SequencesCharacteristicsCalculator.Calculate(chains, calculators, links, rotate, complementary, rotationLength); } for (int i = 0; i < matterIds.Length; i++) { sequencesCharacteristics[i] = new SequenceCharacteristics { MatterName = mattersNames[matterIds[i]], Characteristics = characteristics[i] }; } var result = new Dictionary<string, object> { { "characteristics", sequencesCharacteristics }, { "characteristicNames", characteristicNames }, { "characteristicsList", characteristicsList } }; return new Dictionary<string, object> { { "data", JsonConvert.SerializeObject(result) } }; }); }