// --- Ubacivanje podataka o Projektu u bazi --- private void BtnSubmitDataPoject_Click(object sender, EventArgs e) { string imeProjekta = this.TbImeProjekta.Text; string rokZavrsetka = ""; rokZavrsetka += this.DatePicker.Value.Date.Day.ToString() + '.' + this.DatePicker.Value.Date.Month.ToString() + '.' + this.DatePicker.Value.Date.Year.ToString(); // --- Izvlacimo podatke iz listView-a ---- string lista = ""; foreach (ListViewItem lvi in LvPJezikZnanje.Items) { lista += lvi.Text + " " + lvi.SubItems[1].Text + ","; } lista.TrimEnd(','); string listaRazvojaRadnika = ""; foreach (ListViewItem lvi in LvRazvojBrojRadnika.Items) { listaRazvojaRadnika += lvi.Text + " " + lvi.SubItems[1].Text + ","; } listaRazvojaRadnika = listaRazvojaRadnika.TrimEnd(','); // --- Provera ispravnosti --- if (String.IsNullOrWhiteSpace(imeProjekta)) { MessageBox.Show("Napisite ime projekta!"); return; } else if (String.IsNullOrWhiteSpace(rokZavrsetka)) { MessageBox.Show("Datum kraja roka nije korektan!"); return; } else if (String.IsNullOrWhiteSpace(lista)) { MessageBox.Show("Lista potrebnih ljudi sa iskustvom je prazna!"); return; } else if (String.IsNullOrWhiteSpace(listaRazvojaRadnika)) { MessageBox.Show("Lista potrebnih ljudi iz razvoja je prazna!"); //return; } // --- Preciscavanje teksta --- imeProjekta = checkString(imeProjekta); Projekat noviProjekat = new Projekat(); noviProjekat.Ime = imeProjekta; noviProjekat.Rok_zavrsetka = rokZavrsetka; noviProjekat.Potrebno_iskustvo = lista; noviProjekat.Potrebni_ljudi_iz_razvoja = listaRazvojaRadnika; //noviProjekat.Radnici_angazovani_na_projektu = "IDRadnika Ime Prezime, IDRadnika Ime Prezime,...." try { // --- Ubacivanje Projekta u bazi (pravi duplikate za isti projekat) --- /*client.Cypher .Create("(projekat:Projekat {noviProjekat})") .WithParam("noviProjekat", noviProjekat) .ExecuteWithoutResults();*/ // --- Ubacivanje Razvoja u bazi, ukoliko isti ne postoji --- // NEMA FEEDBACK UKOLIKO ISTI RAZVOJ POSTOJI client.Cypher .Merge("(projekat:Projekat { Ime: {Ime} })") .OnCreate() .Set("projekat = {noviProjekat}") .WithParams(new { Ime = noviProjekat.Ime, noviProjekat }) .ExecuteWithoutResults(); this.TbImeProjekta.Text = ""; MessageBox.Show("Uspesno kreiran novi Projekat!"); // ************ ALGORITAM ************** // /* IList<string> testLista = new List<string>(); testLista = client.Cypher .Match("(radnik:Radnik)") .Where((Radnik radnik) => radnik.id == "") .Return(radnik => radnik.Labels()) .Results;*/ } catch (Exception ec) { MessageBox.Show(ec.ToString()); } MessageBox.Show("Uspesno kreiran projekat!"); }
private void button2_Click_1(object sender, EventArgs e) { try { //Radnik vraceniRadnik = new Radnik(); // --- Vraca jedan element --- /*vraceniRadnik = client.Cypher .Match("(radnik:Radnik)") .Where((Radnik radnik) => radnik.id == "5") .Return(radnik => radnik.As<Radnik>()) .Results.First();*/ // --- //CypherQuery query = new CypherQuery("MATCH (a:Radnik ) where not (a)-[:RADI_NA]->() RETURN a", new Dictionary<string, object>(), CypherResultMode.Set); //var radnici = ((IRawGraphClient)client).ExecuteGetCypherResults<Radnik>(query).ToList(); // --- Kreiranje veze STATUS za Projekat-Aktivan --- /*client.Cypher.Match("(projekat:Projekat)", "(aktivan:Aktivan)") .Where((Projekat projekat) => projekat.Ime == "Projekat 1") .CreateUnique("projekat-[:STATUS]->aktivan") .ExecuteWithoutResults();*/ // --- Kreiranje veze ANGAZOVAN_NA Projekat-Radnik (Sve radnike vezuje za projekat) --- /*client.Cypher.Match("(projekat:Projekat)", "(radnik:Radnik)") .Where((Projekat projekat) => projekat.Ime == "Projekat 1") .CreateUnique("projekat-[:ANGAZOVAN_NA]->radnik") .ExecuteWithoutResults();*/ // --- Brisanje svih veza od projekta ka bilo cemu --- /*client.Cypher.Match("(projekat:Projekat)-[r]->() ") .Delete("r") .ExecuteWithoutResults();*/ Projekat test = new Projekat("Test", "1/1/2056", "PHP 5,C 4", "Web 2,Embedded 2", ""); List<Radnik> izabranTim = new List<Radnik>(); izabranTim = CSP.tryTest(test, client); foreach(Radnik t in izabranTim) { MessageBox.Show(t.Ime); } } catch (Exception ec) { MessageBox.Show(ec.ToString()); } }
public static List<Radnik> tryTest(Projekat novi,GraphClient client) { string[] razvojIbrojLjudi = novi.Potrebni_ljudi_iz_razvoja.Split(','); int ukupanBroj = 0; for(int i = 0 ; i < razvojIbrojLjudi.Length ; i++) { string[] split = razvojIbrojLjudi[i].Split(' '); int parsovanBroj = 0; bool done = Int32.TryParse(split[1], out parsovanBroj); if(done) { ukupanBroj += parsovanBroj; } } if(ukupanBroj == 0) { return null; } string[] jezikIznanje = novi.Potrebno_iskustvo.Split(','); // ide r.Iskustvo =~ "splited[0] [splited[1]...10]" + or string query = "match (r:Radnik) where "; foreach (string jezik in jezikIznanje) { //nulta lokacija jezik a na prvoj ocena 1-10 int outInt=0; string[] splited = jezik.Split(' '); bool done = Int32.TryParse(splited[1] , out outInt); if(!done) { return null; } string result = ""; if(outInt == 10) { result = "10"; } else { var range = Enumerable.Range(outInt, 10 - outInt).ToArray(); result = string.Join(" ", range); } //.*[PHP C] [1 2 3 4 5 6].* query += "r.Iskustvo =~ \".*" + splited[0]+"."+"["+ result +"].*\"" + " or "; } query = query.TrimEnd("or ".ToCharArray()); query += " return r"; CypherQuery query1 = new CypherQuery(query, new Dictionary<string, object>(), CypherResultMode.Set); CypherQuery query2 = new CypherQuery(query+".id", new Dictionary<string, object>(), CypherResultMode.Set); List<Radnik> listaRadnika = ((IRawGraphClient)client).ExecuteGetCypherResults<Radnik>(query1).ToList(); int ukupnoRadnika = listaRadnika.Count; int trecina = ukupnoRadnika / 3; var IDs = ((IRawGraphClient)client).ExecuteGetCypherResults<string>(query2).ToList(); string idPattern = "[" + string.Join(" ", IDs) + "]"; List<Radnik> izabrani = new List<Radnik>(); //napokon imamo listu radnika sa znanjima for (int i = listaRadnika.Count-1; i >= 0; i--) { string id = listaRadnika[i].id; query = "match (n:Radnik)-[r:NE_SLAZE_SE]->(m:Radnik) where n.id=~\"" + idPattern + "\"" + "and m.id=\"" + id + "\" return count(n)"; CypherQuery query3 = new CypherQuery(query, new Dictionary<string, object>(), CypherResultMode.Set); int broj = ((IRawGraphClient)client).ExecuteGetCypherResults<int>(query3).Single(); if (broj > trecina) { listaRadnika.RemoveAt(i); } if(broj == 0) { query = "match (n:Radnik)-[r:SLAZE_SE]->(m:Radnik) where n.id=~\"" + id + "\" return m"; CypherQuery query4 = new CypherQuery(query, new Dictionary<string, object>(), CypherResultMode.Set); List<Radnik> friends = ((IRawGraphClient)client).ExecuteGetCypherResults<Radnik>(query4).ToList(); if (izabrani.Count + friends.Count < ukupanBroj) { izabrani.Add(listaRadnika[i]); izabrani = izabrani.Concat<Radnik>(friends).ToList(); } else { int koliko = ukupanBroj - izabrani.Count; for(int j = 0 ; j < koliko-1; j ++) { izabrani.Add(friends[j]); } } } //client.Cypher.Match("(projekat:Projekat)", "(radnik:Radnik)") // .Where((Projekat projekat) => projekat.Ime == novi.Ime) // .AndWhere((Radnik radnik) => radnik.id == ) // .CreateUnique("projekat<-[:ANGAZOVAN_NA]-radnik") // .ExecuteWithoutResults(); } // //query = "match (n:Radnik)-[r:SLAZE_SE]->(m:Radnik) where n.id=~\"" + id + "\" return m"; //CypherQuery query5 = new CypherQuery(query, new Dictionary<string, object>(), CypherResultMode.Set); return izabrani; }