public void TestRelationCrud() { var taxonRepo = Container.Resolve <TaxonRepository>(); var taxon1 = new TaxonEntity(); taxon1.Name = "Test1"; taxonRepo.SaveOrUpdate(taxon1); var taxon2 = new TaxonEntity(); taxon2.Name = "Test2"; taxonRepo.SaveOrUpdate(taxon2); var taxon3 = new TaxonEntity(); taxon3.Name = "Test3"; taxonRepo.SaveOrUpdate(taxon3); var taxon4 = new TaxonEntity(); taxon4.Name = "Test4"; taxonRepo.SaveOrUpdate(taxon4); var relationService = Container.Resolve <RelationService>(); //relationService.Relate(taxon1, taxon2, RelationDirection.Both); //relationService.Relate(taxon1, taxon2, RelationDirection.Forward); relationService.AddRelation(taxon1, taxon3, RelationDirection.Forward); relationService.AddRelation(taxon1, taxon3); //relationService.Relate(taxon3, taxon4, RelationDirection.Both); }
internal TaxonomyNode(TaxonomyTree tree, TaxonEntity entity) { this.tree = tree; this.entity = entity; this.IsDetached = false; //tree.log.Debug("Node init:" + Name); }
public TaxonomyTree(ILog log, TaxonRepository repo, RelationService relationSrv, int rootId) { this.log = log; this.rootId = rootId; this.repo = repo; this.relationSrv = relationSrv; rootEntity = repo.Get(rootId); if (rootEntity == null) { if (rootId == 1) { rootEntity = new TaxonEntity() { Name = "Root", Description = "Root node - parent of all taxon entries" }; repo.Save(rootEntity); } else { throw new Exception("Root node is not found"); } } rootNode = new TaxonomyNode(this, rootEntity); }
internal TaxonomyNode AddChildTo(TaxonomyNode taxon, string name, string description) { if (taxon.IsDetached) { throw new Exception(String.Format("Taxon '{0}' is detached", taxon.Name)); } if (taxon.Children.Any(x => x.Name == name)) { throw new DataLayerException("Duplicate taxon name in node"); } var entity = new TaxonEntity() { Name = name, Description = description }; repo.Save(entity); relationSrv.AddRelation(taxon.entity, entity, RelationDirection.Forward, rootNode); var newNode = new TaxonomyNode(this, entity) { parent = taxon }; taxon.children.Add(newNode); return(newNode); }
public void TestTaxonCrud() { var taxonRepo = Container.Resolve <TaxonRepository>(); var taxon = new TaxonEntity(); taxon.Name = "aaa"; taxonRepo.SaveOrUpdate(taxon); var persistentTaxon = taxonRepo.Get(taxon.Id); taxonRepo.Delete(taxon); var deletedTaxon = taxonRepo.Get(taxon.Id); Assert.IsNull(deletedTaxon); }
internal TaxonomyNode FindByEntity(TaxonEntity entity) { //TODO: optimize var path = ""; TaxonEntity parent = entity; do { path = parent.Name + (String.IsNullOrEmpty(path) ? "" : "/" + path); parent = relationSrv.GetByRelated <TaxonEntity>(parent, RelationDirection.Forward, rootNode).FirstOrDefault(); } while (parent != null && parent.Id != rootNode.Id); var ret = FindOne(path); if (ret == null) { throw new InvalidOperationException( String.Format("Entity not found in tree ({0}:{1}", entity.Id, path)); } return(ret); }