public CrawlEventCollection GenerateEvents(DescendantsTreeCollection trees) { IObjectTree <IMappedObject> storedTree = trees.StoredTree; IObjectTree <IFileSystemInfo> localTree = trees.LocalTree; IObjectTree <IFileableCmisObject> remoteTree = trees.RemoteTree; CrawlEventCollection createdEvents = new CrawlEventCollection(); List <IMappedObject> storedObjectsForRemote = storedTree.ToList(); List <IMappedObject> storedObjectsForLocal = new List <IMappedObject>(storedObjectsForRemote); Dictionary <string, Tuple <AbstractFolderEvent, AbstractFolderEvent> > eventMap = new Dictionary <string, Tuple <AbstractFolderEvent, AbstractFolderEvent> >(); createdEvents.creationEvents = this.remoteEventGenerator.CreateEvents(storedObjectsForRemote, remoteTree, eventMap); createdEvents.creationEvents.AddRange(this.localEventGenerator.CreateEvents(storedObjectsForLocal, localTree, eventMap)); createdEvents.mergableEvents = eventMap; IMappedObject rootNode = storedTree.Item; storedObjectsForLocal.Remove(rootNode); storedObjectsForRemote.Remove(rootNode); createdEvents.removedLocalObjects = this.TransformToFileSystemInfoDict(storedObjectsForLocal); createdEvents.removedRemoteObjects = this.TransformToFileSystemInfoDict(storedObjectsForRemote); return(createdEvents); }
/// <summary> /// Creates the local events and returns the creationEvents, the other Events are stored in the eventMap, handled objects are removed from storedObjects. /// </summary> /// <returns> /// The remote events. /// </returns> /// <param name='storedObjects'> /// Stored objects. /// </param> /// <param name='remoteTree'> /// Remote tree. /// </param> /// <param name='eventMap'> /// Event map. /// </param> public List <AbstractFolderEvent> CreateEvents( List <IMappedObject> storedObjects, IObjectTree <IFileableCmisObject> remoteTree, Dictionary <string, Tuple <AbstractFolderEvent, AbstractFolderEvent> > eventMap, ISet <IMappedObject> handledStoredObjects) { List <AbstractFolderEvent> createdEvents = new List <AbstractFolderEvent>(); var storedParent = storedObjects.Find(o => o.RemoteObjectId == remoteTree.Item.Id); foreach (var child in remoteTree.Children) { var storedMappedChild = storedObjects.Find(o => o.RemoteObjectId == child.Item.Id); if (storedMappedChild != null) { AbstractFolderEvent newEvent = this.CreateRemoteEventBasedOnStorage(child.Item, storedParent, storedMappedChild); eventMap[child.Item.Id] = new Tuple <AbstractFolderEvent, AbstractFolderEvent>(null, newEvent); } else { // Added AbstractFolderEvent addEvent = FileOrFolderEventFactory.CreateEvent(child.Item, null, MetaDataChangeType.CREATED, src: this); createdEvents.Add(addEvent); } createdEvents.AddRange(this.CreateEvents(storedObjects, child, eventMap, handledStoredObjects)); if (storedMappedChild != null) { handledStoredObjects.Add(storedMappedChild); } } return(createdEvents); }
/// <summary> /// Creates the local events and returns the creationEvents, the other Events are stored in the eventMap, handled objects are removed from storedObjects. /// </summary> /// <returns> /// The remote events. /// </returns> /// <param name='storedObjects'> /// Stored objects. /// </param> /// <param name='remoteTree'> /// Remote tree. /// </param> /// <param name='eventMap'> /// Event map. /// </param> public List<AbstractFolderEvent> CreateEvents( List<IMappedObject> storedObjects, IObjectTree<IFileableCmisObject> remoteTree, Dictionary<string, Tuple<AbstractFolderEvent, AbstractFolderEvent>> eventMap, ISet<IMappedObject> handledStoredObjects) { List<AbstractFolderEvent> createdEvents = new List<AbstractFolderEvent>(); var storedParent = storedObjects.Find(o => o.RemoteObjectId == remoteTree.Item.Id); foreach (var child in remoteTree.Children) { var storedMappedChild = storedObjects.Find(o => o.RemoteObjectId == child.Item.Id); if (storedMappedChild != null) { AbstractFolderEvent newEvent = this.CreateRemoteEventBasedOnStorage(child.Item, storedParent, storedMappedChild); eventMap[child.Item.Id] = new Tuple<AbstractFolderEvent, AbstractFolderEvent>(null, newEvent); } else { // Added AbstractFolderEvent addEvent = FileOrFolderEventFactory.CreateEvent(child.Item, null, MetaDataChangeType.CREATED, src: this); createdEvents.Add(addEvent); } createdEvents.AddRange(this.CreateEvents(storedObjects, child, eventMap, handledStoredObjects)); if (storedMappedChild != null) { handledStoredObjects.Add(storedMappedChild); } } return createdEvents; }
private static void PersistModuleToFile(string folder, IModule module, IObjectTree tree) { string fileName = Path.Combine(folder, module.Name + ".module"); using (StreamWriter writer = new StreamWriter(fileName)) { writer.Write("#"); foreach (string dependent in module.Dependents) { writer.Write(dependent); writer.Write(','); } writer.WriteLine(); foreach (IEntity entity in module.Entities) { IDefinition node = tree.Find(module.Name, entity.Name); if (node == null) { continue; } uint[] id = node.GetNumericalForm(); /* 0: id * 1: type * 2: name * 3: parent name */ writer.WriteLine(ObjectIdentifier.Convert(id) + "," + entity.GetType() + "," + entity.Name + "," + entity.Parent); } writer.Close(); } }
public static void Main(string[] args) { if (args.Length != 1) { Console.WriteLine(@"This application takes one parameter."); return; } IObjectRegistry registry = new ReloadableObjectRegistry("modules"); IObjectTree tree = registry.Tree; if (args[0].Contains("::")) { string name = args[0]; var oid = registry.Translate(name); var id = new ObjectIdentifier(oid); Console.WriteLine(id); } else { string oid = args[0]; var o = tree.Search(ObjectIdentifier.Convert(oid)); string textual = o.AlternativeText; Console.WriteLine(textual); if (o.GetRemaining().Count == 0) { Console.WriteLine(o.Definition.Type.ToString()); } } }
public CrawlEventCollection GenerateEvents(DescendantsTreeCollection trees) { IObjectTree <IMappedObject> storedTree = trees.StoredTree; IObjectTree <IFileSystemInfo> localTree = trees.LocalTree; IObjectTree <IFileableCmisObject> remoteTree = trees.RemoteTree; CrawlEventCollection createdEvents = new CrawlEventCollection(); List <IMappedObject> storedObjectsForRemote = storedTree.ToList(); List <IMappedObject> storedObjectsForLocal = new List <IMappedObject>(storedObjectsForRemote); ISet <IMappedObject> handledLocalStoredObjects = new HashSet <IMappedObject>(); ISet <IMappedObject> handledRemoteStoredObjects = new HashSet <IMappedObject>(); Dictionary <string, Tuple <AbstractFolderEvent, AbstractFolderEvent> > eventMap = new Dictionary <string, Tuple <AbstractFolderEvent, AbstractFolderEvent> >(); createdEvents.creationEvents = this.remoteEventGenerator.CreateEvents(storedObjectsForRemote, remoteTree, eventMap, handledRemoteStoredObjects); createdEvents.creationEvents.AddRange(this.localEventGenerator.CreateEvents(storedObjectsForLocal, localTree, eventMap, handledLocalStoredObjects)); createdEvents.mergableEvents = eventMap; handledLocalStoredObjects.Add(storedTree.Item); handledRemoteStoredObjects.Add(storedTree.Item); foreach (var handledObject in handledLocalStoredObjects) { storedObjectsForLocal.Remove(handledObject); } foreach (var handledObject in handledRemoteStoredObjects) { storedObjectsForRemote.Remove(handledObject); } this.AddDeletedObjectsToMergableEvents(storedObjectsForLocal, eventMap, true); this.AddDeletedObjectsToMergableEvents(storedObjectsForRemote, eventMap, false); return(createdEvents); }
/// <summary> /// Creates the local events and returns the creationEvents, the other Events are stored in the eventMap, handled objects are removed from storedObjects /// </summary> /// <returns> /// The local events. /// </returns> /// <param name='storedObjects'> /// Stored objects. /// </param> /// <param name='localTree'> /// Local tree. /// </param> /// <param name='eventMap'> /// Event map. /// </param> public List <AbstractFolderEvent> CreateEvents( List <IMappedObject> storedObjects, IObjectTree <IFileSystemInfo> localTree, Dictionary <string, Tuple <AbstractFolderEvent, AbstractFolderEvent> > eventMap) { List <AbstractFolderEvent> creationEvents = new List <AbstractFolderEvent>(); var parent = localTree.Item; IMappedObject storedParent = null; Guid? guid = parent.Uuid; if (guid != null) { storedParent = storedObjects.Find(o => o.Guid.Equals((Guid)guid)); } foreach (var child in localTree.Children) { bool removeStoredMappedChild = false; IMappedObject storedMappedChild = this.FindStoredObjectByFileSystemInfo(storedObjects, child.Item); if (storedMappedChild != null) { var localPath = this.storage.GetLocalPath(storedMappedChild); #if __COCOA__ if ((!localPath.Normalize(NormalizationForm.FormD).Equals(child.Item.FullName.Normalize(NormalizationForm.FormD))) && this.fsFactory.IsDirectory(localPath) != null) { #else if ((!localPath.Equals(child.Item.FullName)) && this.fsFactory.IsDirectory(localPath) != null) { #endif // Copied creationEvents.Add(this.GenerateCreatedEvent(child.Item)); } else { // Moved, Renamed, Updated or Equal AbstractFolderEvent correspondingRemoteEvent = GetCorrespondingRemoteEvent(eventMap, storedMappedChild); AbstractFolderEvent createdEvent = this.CreateLocalEventBasedOnStorage(child.Item, storedParent, storedMappedChild); eventMap[storedMappedChild.RemoteObjectId] = new Tuple <AbstractFolderEvent, AbstractFolderEvent>(createdEvent, correspondingRemoteEvent); removeStoredMappedChild = true; } } else { // Added creationEvents.Add(this.GenerateCreatedEvent(child.Item)); } creationEvents.AddRange(this.CreateEvents(storedObjects, child, eventMap)); if (removeStoredMappedChild) { storedObjects.Remove(storedMappedChild); } } return(creationEvents); }
public static void ToDotStream <T>(this IObjectTree <T> tree, Stream outputsteam) { using (var writer = new StreamWriter(outputsteam)) { writer.WriteLine("digraph tree {"); writer.WriteLine("\tgraph [rankdir = \"LR\"];"); tree.ToDotString(writer); writer.WriteLine("}"); } }
//--------------------------------------------------- public static void SendTrap(IDefinition definition, IObjectTree objectTree) { CFormSendTrap frm = new CFormSendTrap(); frm.m_objectTree = objectTree; frm.m_definition = definition; frm.ShowDialog(); frm.Dispose(); }
public static void ViewResult( string strInfoRequete, Variable variable, IMibNavigator navigateur, IObjectTree mibTree) { List <Variable> lst = new List <Variable>(); lst.Add(variable); ViewResult(strInfoRequete, lst, navigateur, mibTree); }
public void ToDotString(IObjectTree <T> tree, StreamWriter writer) { IObjectTree <IMappedObject> t = tree as IObjectTree <IMappedObject>; writer.WriteLine(string.Format("\t\"{0}\" [label=\"{1}|<id>ObjectId: {2}|<uuid>UUID: {3}\", shape=record] ;", t.Item.RemoteObjectId, t.Item.Name, t.Item.RemoteObjectId, t.Item.Guid)); foreach (var child in t.Children ?? new List <IObjectTree <IMappedObject> >()) { writer.WriteLine(string.Format("\t\"{0}\" -> \"{1}\" ;", t.Item.RemoteObjectId, child.Item.RemoteObjectId)); child.ToDotString(writer); } }
internal RootDefinition( IObjectTree arbre, uint[] id, string name, string parent, string module, string typeString) : base(id, name, parent, module, typeString) { m_arbre = arbre; }
public void ToDotString(IObjectTree <T> tree, StreamWriter writer) { IObjectTree <IFileSystemInfo> t = tree as IObjectTree <IFileSystemInfo>; writer.WriteLine(string.Format("\t\"{0}\" [label=\"{1}|<uuid>UUID: {2}\", shape=record] ;", t.Item.FullName, t.Item.Name, t.Item.Uuid.GetValueOrDefault())); foreach (var child in t.Children ?? new List <IObjectTree <IFileSystemInfo> >()) { writer.WriteLine(string.Format("\t\"{0}\" -> \"{1}\" ;", t.Item.FullName, child.Item.FullName)); child.ToDotString(writer); } }
public void ToDotString(IObjectTree <T> tree, StreamWriter writer) { foreach (var child in tree.Children ?? new List <IObjectTree <T> >()) { writer.Write("\t"); writer.Write(tree.Item.ToString()); writer.Write(" -> "); writer.Write(child.Item.ToString()); writer.WriteLine(";"); child.ToDotString(writer); } }
public static void ViewResult( string strInfoRequete, IList <Variable> lstVariables, IMibNavigator navigateur, IObjectTree mibTree) { CFormViewSNMPResult form = new CFormViewSNMPResult(); form.m_listeVariables = lstVariables; form.m_strInfoRequete = strInfoRequete; form.m_navigateur = navigateur; form.m_mibTree = mibTree; form.Show(); }
//--------------------------------------------------- public void InitDialog(IDefinition definition, IObjectTree mibTree) { m_definition = definition; m_trap = m_definition.Entity as TrapType; m_notification = m_definition.Entity as NotificationType; InitComboVersions(); InitComboGenericCode(); m_cmbGenericCode.Text = GenericCode.EnterpriseSpecific.ToString(); m_cmbTrapVersion.Text = VersionCode.V1.ToString(); string strOID = ObjectIdentifier.Convert(m_definition.GetNumericalForm()); if (strOID.IndexOf('.') >= 0) { string strGeneric = strOID.Substring(strOID.LastIndexOf('.') + 1); strOID = strOID.Substring(0, strOID.LastIndexOf('.')); m_txtSpecificCode.Text = strGeneric; } m_txtEntreprise.Text = strOID; m_txtCommunity.Text = "public"; m_panelVariables.SuspendDrawing(); m_panelVariables.ClearAndDisposeControls(); List <string> lstVariables = new List <string>(); if (m_trap != null) { lstVariables.AddRange(m_trap.Variables); } else if (m_notification != null) { lstVariables.AddRange(m_notification.Objects); } foreach (string strVariable in lstVariables) { IDefinition defVar = mibTree.Find(strVariable); if (defVar != null) { CControlTrapVariable ctrl = new CControlTrapVariable(); m_panelVariables.Controls.Add(ctrl); ctrl.Dock = DockStyle.Top; ctrl.BringToFront(); ctrl.Init(defVar); } } m_panelVariables.ResumeDrawing(); }
/// <summary> /// Creates the local events and returns the creationEvents, the other Events are stored in the eventMap, handled objects are removed from storedObjects /// </summary> /// <returns> /// The local events. /// </returns> /// <param name='storedObjects'> /// Stored objects. /// </param> /// <param name='localTree'> /// Local tree. /// </param> /// <param name='eventMap'> /// Event map. /// </param> public List<AbstractFolderEvent> CreateEvents( List<IMappedObject> storedObjects, IObjectTree<IFileSystemInfo> localTree, Dictionary<string, Tuple<AbstractFolderEvent, AbstractFolderEvent>> eventMap, ISet<IMappedObject> handledStoredObjects) { List<AbstractFolderEvent> creationEvents = new List<AbstractFolderEvent>(); var parent = localTree.Item; IMappedObject storedParent = null; Guid? guid = parent.Uuid; if (guid != null) { storedParent = storedObjects.Find(o => o.Guid.Equals((Guid)guid)); } foreach (var child in localTree.Children) { IMappedObject storedMappedChild = this.FindStoredObjectByFileSystemInfo(storedObjects, child.Item); if (storedMappedChild != null) { var localPath = this.storage.GetLocalPath(storedMappedChild); if (localPath == null) { continue; } #if __COCOA__ if ((!localPath.Normalize(NormalizationForm.FormD).Equals(child.Item.FullName.Normalize(NormalizationForm.FormD))) && this.fsFactory.IsDirectory(localPath) != null) { #else if ((!localPath.Equals(child.Item.FullName)) && this.fsFactory.IsDirectory(localPath) != null) { #endif // Copied creationEvents.Add(this.GenerateCreatedEvent(child.Item)); } else { // Moved, Renamed, Updated or Equal AbstractFolderEvent correspondingRemoteEvent = GetCorrespondingRemoteEvent(eventMap, storedMappedChild); AbstractFolderEvent createdEvent = this.CreateLocalEventBasedOnStorage(child.Item, storedParent, storedMappedChild); eventMap[storedMappedChild.RemoteObjectId] = new Tuple<AbstractFolderEvent, AbstractFolderEvent>(createdEvent, correspondingRemoteEvent); handledStoredObjects.Add(storedMappedChild); } } else { // Added creationEvents.Add(this.GenerateCreatedEvent(child.Item)); } creationEvents.AddRange(this.CreateEvents(storedObjects, child, eventMap, handledStoredObjects)); } return creationEvents; }
/// <summary> /// Builds the trees asynchronously by crawling storage, FileSystem and Server. /// </summary> /// <returns> /// The trees as a struct. /// </returns> public DescendantsTreeCollection BuildTrees() { IObjectTree <IMappedObject> storedTree = null; IObjectTree <IFileSystemInfo> localTree = null; IObjectTree <IFileableCmisObject> remoteTree = null; // Request 3 trees in parallel Task[] tasks = new Task[3]; tasks[0] = Task.Factory.StartNew(() => storedTree = this.storage.GetObjectTree()); tasks[1] = Task.Factory.StartNew(() => localTree = GetLocalDirectoryTree(this.localFolder, this.filter)); tasks[2] = Task.Factory.StartNew(() => remoteTree = GetRemoteDirectoryTree(this.remoteFolder, this.remoteFolder.GetDescendants(-1), this.filter)); // Wait until all tasks are finished Task.WaitAll(tasks); return(new DescendantsTreeCollection(storedTree, localTree, remoteTree)); }
/// <summary> /// Initializes a new instance of the <see cref="CmisSync.Lib.Producer.Crawler.DescendantsTreeCollection"/> struct. /// </summary> /// <param name='storedTree'> /// Stored tree. /// </param> /// <param name='localTree'> /// Local tree. /// </param> /// <param name='remoteTree'> /// Remote tree. /// </param> /// <exception cref='ArgumentNullException'> /// <attribution license="cc4" from="Microsoft" modified="false" /><para>The exception that is thrown when a /// null reference (Nothing in Visual Basic) is passed to a method that does not accept it as a valid argument. </para> /// </exception> public DescendantsTreeCollection(IObjectTree<IMappedObject> storedTree, IObjectTree<IFileSystemInfo> localTree, IObjectTree<IFileableCmisObject> remoteTree) : this() { if (storedTree == null) { throw new ArgumentNullException("storedTree"); } if (localTree == null) { throw new ArgumentNullException("localTree"); } if (remoteTree == null) { throw new ArgumentNullException("remoteTree"); } this.StoredTree = storedTree; this.LocalTree = localTree; this.RemoteTree = remoteTree; }
//------------------------------- public void NavigateTo(string strModule, string strName) { //Cherche la définitino if (m_root == null) { return; } IObjectTree tree = m_root.Tree; if (tree == null) { return; } IDefinition definition = strModule == null?tree.Find(strName) : tree.Find(strModule, strName); NavigateTo(definition); }
//------------------------------------------------------- private void m_mnuVoirTable_Click(object sender, EventArgs e) { IDefinition definition = GetCurrent(); if (definition != null) { if (m_connexion == null) { if (!SetupConnexion()) { return; } } CResultAErreurType <DataTable> result = m_connexion.GetTable(definition.GetNumericalForm()); if (!result) { CFormAfficheErreur.Show(result.Erreur); } else { DataTable table = result.DataType; IObjectTree tree = definition.Tree; if (tree != null) { foreach (DataColumn col in table.Columns) { try { uint[] oid = ObjectIdentifier.Convert(col.ColumnName); IDefinition def = tree.Find(oid); if (def != null) { col.ColumnName = def.Name; } } catch { } } } CFormVisuTable.ShowTable("Table " + definition.Name, result.DataType); } } }
/// <summary> /// Initializes a new instance of the <see cref="CmisSync.Lib.Producer.Crawler.DescendantsTreeCollection"/> struct. /// </summary> /// <param name='storedTree'> /// Stored tree. /// </param> /// <param name='localTree'> /// Local tree. /// </param> /// <param name='remoteTree'> /// Remote tree. /// </param> /// <exception cref='ArgumentNullException'> /// <attribution license="cc4" from="Microsoft" modified="false" /><para>The exception that is thrown when a /// null reference (Nothing in Visual Basic) is passed to a method that does not accept it as a valid argument. </para> /// </exception> public DescendantsTreeCollection(IObjectTree <IMappedObject> storedTree, IObjectTree <IFileSystemInfo> localTree, IObjectTree <IFileableCmisObject> remoteTree) : this() { if (storedTree == null) { throw new ArgumentNullException("storedTree"); } if (localTree == null) { throw new ArgumentNullException("localTree"); } if (remoteTree == null) { throw new ArgumentNullException("remoteTree"); } this.StoredTree = storedTree; this.LocalTree = localTree; this.RemoteTree = remoteTree; }
//------------------------------------------------------------------------- private void UpdateVueMib() { CResultAErreurType <ObjectRegistryBase> result = SnmpMib.GetMibComplete(); try { if (result) { m_panelMibIncomplete.Visible = false; m_browser.Init(result.DataType.Tree.Root, CTimosApp.DefaultSnmpConnexion); } else { m_panelMibIncomplete.Visible = true; if (SnmpMib.DependancesManquantes.Length > 0) { m_lblMissingDependancies.Text = SnmpMib.DependancesManquantesString; } IModule module = SnmpMib.ModuleMib; if (module != null) { IObjectTree tree = module.GetNewPartialObjectTree(); if (tree != null) { m_browser.Init(tree.Root, CTimosApp.DefaultSnmpConnexion); } } } } catch (Exception e) { m_browser.Visible = false; m_panelMibIncomplete.Visible = true; m_lblMissingDependancies.Text = e.ToString(); } }
internal CMibModuleRootDefinition(IObjectTree arbre, IModule module) : base(arbre, new uint[] { 0 }, c_strName, "", module.Name, "") { m_module = module; CreateChildrens(); }
//--------------------------------------- public static CTrapHandler CreateFromMib( IObjectTree tree, IDefinition defNotification, CMemoryDb db) { NotificationType notification = defNotification.Entity as NotificationType; if (notification != null) { CTrapHandler handler = new CTrapHandler(db); handler.CreateNew(); handler.Libelle = defNotification.Name; handler.Description = defNotification.Description; foreach (string strObjet in notification.Objects) { CTrapField field = new CTrapField(); field.Name = strObjet; IDefinition def = tree.Find(strObjet); if (def != null) { field.OID = ObjectIdentifier.Convert(def.GetNumericalForm()); handler.AddFieldFromTrap(field); } } handler.GenericRequestedValue = GenericCode.EnterpriseSpecific; handler.EntrepriseRequestedValue = ObjectIdentifier.Convert(defNotification.GetNumericalForm()); if (handler.EntrepriseRequestedValue.EndsWith("." + notification.Value.ToString())) { handler.EntrepriseRequestedValue = handler.EntrepriseRequestedValue.Remove(handler.EntrepriseRequestedValue.Length - notification.Value.ToString().Length - 1); } handler.SpecificRequestedValue = notification.Value.ToString(); return(handler); } TrapType trap = defNotification.Entity as TrapType; if (trap != null) { CTrapHandler handler = new CTrapHandler(db); handler.CreateNew(); handler.Libelle = trap.Name; handler.Description = trap.Description; foreach (string strObjet in trap.Variables) { CTrapField field = new CTrapField(); field.Name = strObjet; IDefinition def = tree.Find(strObjet); if (def != null) { field.OID = ObjectIdentifier.Convert(def.GetNumericalForm()); handler.AddFieldFromTrap(field); } } handler.GenericRequestedValue = GenericCode.EnterpriseSpecific; handler.EntrepriseRequestedValue = ObjectIdentifier.Convert(defNotification.GetNumericalForm()); if (handler.EntrepriseRequestedValue.EndsWith("." + trap.Value.ToString())) { handler.EntrepriseRequestedValue = handler.EntrepriseRequestedValue.Remove(handler.EntrepriseRequestedValue.Length - trap.Value.ToString().Length - 1); } handler.SpecificRequestedValue = trap.Value.ToString(); return(handler); } return(null); }
internal RootDefinition(IObjectTree arbre) { m_arbre = arbre; }
public static void ToDotFile <T>(this IObjectTree <T> tree, string path) { tree.ToDotFile(new FileInfoWrapper(new FileInfo(path))); }
public static void ToDotFile <T>(this IObjectTree <T> tree, IFileInfo file) { using (var stream = file.Open(FileMode.CreateNew)) { tree.ToDotStream(stream); } }
private static void ToDotString <T>(this IObjectTree <T> tree, StreamWriter writer) { DotTreeWriterFactory.CreateWriter <T>().ToDotString(tree, writer); }