private void cmClone_Click(object sender, EventArgs e) { string newPath = ""; if (!tvClients.SelectedNode.FullPath.Contains('\\')) { //This is a client EasyETLClient client = configXmlDocument.GetClientConfiguration(tvClients.SelectedNode.Text); if (client != null) { newPath = "Copy Of " + client.ClientName; EasyETLClient newClient = new EasyETLClient(); XmlElement clientElement = configXmlDocument.CreateElement("client"); client.WriteSettings(clientElement); newClient.ReadSettings(clientElement); newClient.AttributesDictionary = new Dictionary <string, string>(client.AttributesDictionary); newClient.ClientID = newPath; newClient.ClientName = newPath; configXmlDocument.Clients.Add(newClient); } } else { if (tvClients.SelectedNode.FullPath.Split('\\').Length == 3) { //This is leaf node... string clientName = tvClients.SelectedNode.FullPath.Split('\\')[0]; string nodeCategory = tvClients.SelectedNode.FullPath.Split('\\')[1]; string nodeName = tvClients.SelectedNode.FullPath.Split('\\')[2]; string newNodeName = "Copy Of " + nodeName; newPath = clientName + '\\' + nodeCategory + '\\' + newNodeName; EasyETLClient selectedClientConfiguration = configXmlDocument.GetClientConfiguration(clientName); if (selectedClientConfiguration != null) { XmlElement element = null; switch (nodeCategory.ToLower()) { case "actions": EasyETLAction action = selectedClientConfiguration.Actions.Find(a => a.ActionName == nodeName); EasyETLAction newAction = new EasyETLAction(); element = configXmlDocument.CreateElement("action"); action.WriteSettings(element); newAction.ReadSettings(element); newAction.ActionName = newNodeName; newAction.ActionID = newNodeName; selectedClientConfiguration.Actions.Add(newAction); break; case "datasources": EasyETLDatasource datasource = selectedClientConfiguration.Datasources.Find(d => d.ActionName == nodeName); EasyETLDatasource newdatasource = new EasyETLDatasource(); element = configXmlDocument.CreateElement("datasource"); datasource.WriteSettings(element); newdatasource.ReadSettings(element); newdatasource.ActionName = newNodeName; newdatasource.ActionID = newNodeName; selectedClientConfiguration.Datasources.Add(newdatasource); break; case "exports": EasyETLWriter writer = selectedClientConfiguration.Writers.Find(w => w.ActionName == nodeName); EasyETLWriter newwriter = new EasyETLWriter(); element = configXmlDocument.CreateElement("export"); writer.WriteSettings(element); newwriter.ReadSettings(element); newwriter.ActionName = newNodeName; newwriter.ActionID = newNodeName; selectedClientConfiguration.Writers.Add(newwriter); break; case "endpoints": EasyETLEndpoint endpoint = selectedClientConfiguration.Endpoints.Find(ep => ep.ActionName == nodeName); EasyETLEndpoint newendpoint = new EasyETLEndpoint(); element = configXmlDocument.CreateElement("endpoint"); endpoint.WriteSettings(element); newendpoint.ReadSettings(element); newendpoint.ActionName = newNodeName; newendpoint.ActionID = newNodeName; selectedClientConfiguration.Endpoints.Add(newendpoint); break; case "parsers": EasyETLParser parser = selectedClientConfiguration.Parsers.Find(p => p.ActionName == nodeName); EasyETLParser newparser = new EasyETLParser(); element = configXmlDocument.CreateElement("parser"); parser.WriteSettings(element); newparser.ReadSettings(element); newparser.ActionName = newNodeName; newparser.ActionID = newNodeName; selectedClientConfiguration.Parsers.Add(newparser); break; case "transfers": EasyETLTransfer transfer = selectedClientConfiguration.Transfers.Find(t => t.TransferName == nodeName); EasyETLTransfer newtransfer = new EasyETLTransfer(); element = configXmlDocument.CreateElement("transfer"); transfer.WriteSettings(element); newtransfer.ReadSettings(element); newtransfer.TransferName = newNodeName; selectedClientConfiguration.Transfers.Add(newtransfer); break; case "etls": EasyETLJobConfiguration etl = selectedClientConfiguration.ETLs.Find(et => et.ETLName == nodeName); EasyETLJobConfiguration newetl = new EasyETLJobConfiguration(); element = configXmlDocument.CreateElement("etl"); etl.WriteSettings(element); newetl.ReadSettings(element); newetl.ETLID = newNodeName; newetl.ETLName = newNodeName; selectedClientConfiguration.ETLs.Add(newetl); break; } } } } configXmlDocument.Save(); LoadConfiguration(newPath); }