public Action<Message> insert(DBEngine<string, DBElement<string, List<string>>> db) { Action<Message> Insert =(msg)=> { XDocument xml = XDocument.Parse(msg.content); XElement element = xml.Descendants("Msg").ElementAt(0).Descendants("Data").ElementAt(0); string key = element.Descendants("key").ElementAt(0).Value; DBElement<string, List<string>> elem = new DBElement<string, List<string>>(); elem.name = element.Descendants("value").Descendants("name").ElementAt(0).Value; elem.descr= element.Descendants("value").Descendants("descr").ElementAt(0).Value; elem.timeStamp = (DateTime)element.Descendants("value").Descendants("timestamp").ElementAt(0); IEnumerable<XElement> children = element.Descendants("value").Descendants("children").Descendants("key"); foreach(var child in children) elem.children.Add(child.Value); IEnumerable<XElement> items = element.Descendants("value").Descendants("payload").Descendants("item"); elem.payload = new List<string>(); foreach (var item in items) elem.payload.Add(item.Value); if (!db.insert(key, elem)) msg.content = "Insert fail"; else { msg.content = "Insert success"; Console.Write("\n\n --- insert a DBElement<string,List<string>>---"); elem.showEnumerableElement(); } Utilities.swapUrls(ref msg); }; return Insert; }
public void performOperations(DBEngine <string, DBElement <string, List <string> > > testDict, DBElement <string, List <string> > value) { /*----------Perform operations as per the input given in the XML document--------------*/ if (value.operation == "addition") { testDict.insert(value.key, value); //insert the key/value pairs to the main database string s = "Database after inserting key " + value.key + " is"; printDatabase(testDict, s); } if (value.operation == "edit") { testDict.saveValue(value.key, value); //edit the value for the given key string s = "Database after editing key " + value.key + " is"; printDatabase(testDict, s); } if (value.operation == "delete") { testDict.delete(value.key); //delete the key/value pair string s = "Database after deleting key " + value.key + " is"; printDatabase(testDict, s); } if (value.operation == "persist database") { PersistEngine <string, DBElement <string, List <string> > > persist = new PersistEngine <string, DBElement <string, List <string> > >(testDict); var keys = testDict.Keys(); persist.persistToXMLListPayload(keys); printDatabase(testDict, "Persisted database is:"); } if (value.operation == "Query value") { DBElement <string, List <string> > valueOfKey = testDict.getValueOfKey(value.key); printQuery("Querying the database for value of key " + value.key + " is"); Console.WriteLine("\n\nThe value of the Key {0} is:\n", value.key); valueOfKey.showEnumerableElement(); } if (value.operation == "Query children") { QueryEngine <string, DBElement <string, List <string> > > qEngine = new QueryEngine <string, DBElement <string, List <string> > >(testDict); printQuery("Querying the database for value of key " + value.key + " is"); List <string> children = qEngine.getChildrenOfKey(value.key); Console.WriteLine("\nThe children of the Key {0} are:\n", value.key); displayChildren(children); } if (value.operation == "Augment database") { PersistEngine <string, DBElement <string, List <string> > > persist = new PersistEngine <string, DBElement <string, List <string> > >(testDict); string fileName = "C:\\Users\\rakeshh91\\Documents\\Rakesh Documents\\Class Materials\\SMA\\Assignments\\Assignment 4 - Implementation\\CommPrototype\\augmentDatabase.xml"; persist.augmentDatabaseFromXMLStringList(testDict, fileName); printDatabase(testDict, "Database after augmenting is:"); } }
static void Main(string[] args) { DBEngine <string, DBElement <string, List <string> > > db = new DBEngine <string, DBElement <string, List <string> > >(); ItemFactory <int, string> itemFactory = new ItemFactory <int, string>(); "Demonstrating Requirement #2".title(); DBElement <string, List <string> > elem = new DBElement <string, List <string> >(); elem.name = "element"; elem.descr = "test element"; elem.timeStamp = DateTime.Now.AddDays(-4); elem.children.AddRange(new List <string> { "1", "2", "3 " }); elem.payload = new List <string> { "elem's payload" }; WriteLine("\n Item to be inserted.. \n"); elem.showEnumerableElement(); db.insert("1", elem); db.showEnumerableDB(); WriteLine(); WriteLine("\n Inserting second element into DB :"); DBElement <string, List <string> > elem2 = new DBElement <string, List <string> >(); elem2.name = "element2"; elem2.descr = "test element2"; elem2.timeStamp = DateTime.Now; elem2.children.AddRange(new List <string> { "1", "2", "3", "4" }); elem2.payload = new List <string> { "elem's payload" }; WriteLine("\nItem to be inserted.. \n"); elem2.showElement(); db.insert("2", elem2); WriteLine("\n\n DB after insertion:"); db.showEnumerableDB(); "Persisting the database to XML:".title('_'); db.toXml(); "Augumenting database from XML".title('_'); db.restoreDatabase(); db.showEnumerableDB(); }
static void Main(string[] args) { "Testing DBExtensions Package".title('='); WriteLine(); DBElement <int, string> elem1 = new DBElement <int, string>("Element-7", "Description of Element-7"); elem1.payload = "Payload of element-7."; elem1.children.AddRange(new List <int> { 8, 9 }); DBElement <int, string> elem2 = new DBElement <int, string>("Element-8", "Description of Element-8"); //elem2.payload = "Payload of element-8."; DBElement <int, string> elem3 = new DBElement <int, string>("Element-9", "Description of Element-9"); elem3.payload = "Payload of element-3."; DBEngine <int, DBElement <int, string> > db = new DBEngine <int, DBElement <int, string> >(); db.insert(7, elem1); db.insert(8, elem2); db.insert(9, elem3); Write(" Created a new dataBase with following contents:"); db.showDB(); WriteLine("\n\n Now going to persist the database contents to an XML file."); PersistEngine pe = new PersistEngine(); string file_name = pe.persistDB <int, DBElement <int, string>, string>(db); WriteLine(" Database contents are saved as - {0}", file_name); WriteLine("\n Going to remove all DB elements and load the xml file saved above."); db.remove(7); db.remove(8); db.remove(9); WriteLine(" DB contents before calling load-DB"); db.showDB(); WriteLine(" Now send command to load database from the XML file."); pe.loadDB <int, DBElement <int, string>, string>(db, file_name); Write(" DB contents after calling load-DB "); db.showDB(); DBEngine <string, DBElement <string, List <string> > > db2 = new DBEngine <string, DBElement <string, List <string> > >(); Write("\n\n --- DBElement<string,List<string>> ---"); DBElement <string, List <string> > elem_str = new DBElement <string, List <string> >(); elem_str.name = "Element-One"; elem_str.descr = "DB Element whose key type is string and payload type is List of strings."; elem_str.timeStamp = DateTime.Now; elem_str.children = new List <string> { "Two", "Three", "Four" }; elem_str.payload = new List <string> { "Element payload is of type List of strings.", "This is string two.", "And third" }; elem_str.showEnumerableElement(); db2.insert("One", elem_str); Write("\n\n --- DBEngine<string,List<string>> ---"); db2.showEnumerableDB(); XElement noSqlDb = new XElement("NoSqlDb"); XElement keyType = new XElement("KeyType", typeof(int)); XElement payloadType = new XElement("PayloadType", typeof(string)); XElement request_msg = new XElement("Request_Message"); XElement req_type = new XElement("Request_Type", "Insert"); XElement key = new XElement("Key", 45); XElement name = new XElement("Name", "element_one"); XElement descr = new XElement("Description", "Descr of element_one"); XElement payload = new XElement("Payload", "This the payload of element one."); request_msg.Add(req_type); request_msg.Add(key); request_msg.Add(name); request_msg.Add(descr); request_msg.Add(payload); Console.WriteLine("Message = \n{0}", request_msg.ToString()); XElement Rmsg = XElement.Parse(request_msg.ToString()); string Rtype = Rmsg.Element("Request_Type").Value; Console.WriteLine("Request type = {0}", Rtype); XElement abc = new XElement("dummy"); XElement result = new XElement("Result", "Success"); //Console.WriteLine("abc= {0}\nresult = {1}\n", abc.ToString(), result.ToString()); //abc = result; Console.WriteLine("abc= {0}\nresult = {1}", abc.ToString(), result.ToString()); int k = 5; string ts = "Could not find element with key " + k.ToString() + " in database"; //XElement tst = new XElement("Result", "Could not find element with key {0} in database", k); XElement tst = new XElement("Result", ts); Console.WriteLine("tst = {0}", tst.ToString()); XElement qry = new XElement("Query_Response"); XElement par = new XElement("Partial", "This is \njust payload"); qry.Add(tst); qry.Add(par); Console.WriteLine("qry = \n{0}", qry.ToString()); Console.WriteLine("value of qry response =\n{0}", qry.Value.ToString()); //noSqlDb.Add(keyType); //noSqlDb.Add(payloadType); //Console.WriteLine("\nString mesage = \n{0}", noSqlDb.ToString()); //string xml_string = noSqlDb.ToString(); //XElement abc = XElement.Parse(xml_string); //XElement root = abc.Element("KeyType"); //Console.WriteLine("abc= {0}", abc.ToString()); //Console.WriteLine("root= {0}", root.ToString()); //elem.name = xml_dbElement.Element("Name").Value; //string par = root.Value; //Console.WriteLine("par = {0}", par); }
static void Main(string[] args) { "Testing DBEngine Package".title('=');; WriteLine(); "Test db of scalar elements".title(); WriteLine(); DBElement <int, string> elem1 = new DBElement <int, string>(); elem1.payload = "a payload"; DBElement <int, string> elem2 = new DBElement <int, string>("Darth Vader", "Evil Overlord"); elem2.payload = "The Empire strikes back!"; var elem3 = new DBElement <int, string>("Luke Skywalker", "Young HotShot"); elem3.payload = "X-Wing fighter in swamp - Oh oh!"; if (verbose) { Write("\n --- Test DBElement<int,string> ---"); WriteLine(); elem1.showElement(); WriteLine(); elem2.showElement(); WriteLine(); elem3.showElement(); WriteLine(); /* ElementFormatter is not ready for prime time yet */ //Write(ElementFormatter.formatElement(elem1.showElement<int, string>(), false)); } Write("\n --- Test DBEngine<int,DBElement<int,string>> ---"); WriteLine(); int key = 0; Func <int> keyGen = () => { ++key; return(key); }; DBEngine <int, DBElement <int, string> > db = new DBEngine <int, DBElement <int, string> >(); bool p1 = db.insert(keyGen(), elem1); bool p2 = db.insert(keyGen(), elem2); bool p3 = db.insert(keyGen(), elem3); if (p1 && p2 && p3) { Write("\n all inserts succeeded"); } else { Write("\n at least one insert failed"); } db.showDB(); WriteLine(); "Test db of enumerable elements".title(); WriteLine(); DBElement <string, List <string> > newelem1 = new DBElement <string, List <string> >(); newelem1.name = "newelem1"; newelem1.descr = "test new type"; newelem1.payload = new List <string> { "one", "two", "three" }; DBElement <string, List <string> > newerelem1 = new DBElement <string, List <string> >(); newerelem1.name = "newerelem1"; newerelem1.descr = "better formatting"; newerelem1.payload = new List <string> { "alpha", "beta", "gamma" }; newerelem1.payload.Add("delta"); newerelem1.payload.Add("epsilon"); DBElement <string, List <string> > newerelem2 = new DBElement <string, List <string> >(); newerelem2.name = "newerelem2"; newerelem2.descr = "better formatting"; newerelem2.children.AddRange(new List <string> { "first", "second" }); newerelem2.payload = new List <string> { "a", "b", "c" }; newerelem2.payload.Add("d"); newerelem2.payload.Add("e"); if (verbose) { Write("\n --- Test DBElement<string,List<string>> ---"); WriteLine(); newelem1.showEnumerableElement(); WriteLine(); newerelem1.showEnumerableElement(); WriteLine(); newerelem2.showEnumerableElement(); WriteLine(); } Write("\n --- Test DBEngine<string,DBElement<string,List<string>>> ---"); int seed = 0; string skey = seed.ToString(); Func <string> skeyGen = () => { ++seed; skey = "string" + seed.ToString(); skey = skey.GetHashCode().ToString(); return(skey); }; DBEngine <string, DBElement <string, List <string> > > newdb = new DBEngine <string, DBElement <string, List <string> > >(); newdb.insert(skeyGen(), newelem1); newdb.insert(skeyGen(), newerelem1); newdb.insert(skeyGen(), newerelem2); newdb.showEnumerableDB(); Write("\n\n"); }