// --- 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());
            }
        }
Beispiel #3
0
        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;
        }