Example #1
0
 export( String              treeName,
         DatabaseInterface   dbConnection) {
     ///////////////////////////////////////
     MemoryStream XmlCompressedStream = new MemoryStream();
     try {
         Albero treeToExport = dbConnection.getAlbero(treeName);
         XmlCompressedStream = FileEngine.assembleXML(treeToExport);
     } catch (Exception dbError) {
         Console.WriteLine(dbError.Message);
         return null;
     }
     
     return XmlCompressedStream;
 } // End of method export()
Example #2
0
        create
            (String treeName,
            String treeType,
            String[]                                                buildingParameters,
            Dictionary <String, String[]> nodeAttrList,
            Dictionary <String, String[]> edgeAttrList)
        {
            ///////////////////////////////////////////////////////////////////////

            /*
             * Il parametro buildingParameters e' un array di stringhe ciascuna
             * contenente un'informazione utile alla costruzione del generico
             * grafo, in questo caso "splitSize" e "depth" per determinare la
             * struttura dell'albero. I dizionari devono essere cosi impiegati:
             * Dictionary<String -> NomeAttributo, String[] -> ParametriAddizionali
             * Nello specifico:
             *      <String[0] -> Tipo, String[1] -> RegolaGenerazione
             *      Tipo := "string", "numeric"
             *      RegolaGenerazione := "string", "random"
             * Nota: la regola di generazione random e' acquisita inserendo un dash
             * per indicare l'intervallo K-N (e.g. "17-244" ).
             */
            int    splitSize = int.Parse(buildingParameters[0]);
            int    depth     = int.Parse(buildingParameters[1]);
            Albero tree      = new Albero(treeName, treeType, splitSize, depth, nodeAttrList, edgeAttrList);
            /*** buildingParameters[0] = splitSize; buildingParameters[1] = depth; ***/

            MemoryStream XmlCompressedStream = new MemoryStream();

            XmlCompressedStream = FileEngine.assembleXML(tree);

            /* * * * * * * * * * * * * * * * * * * * * * * * * * *
            * ATTENZIONE: Chiusura del writer, cleanup finale
            * da effettuare nel Main(), dopo l'invio dello stream
            * al client!
            *
            * XmlStream.Close();
            * XmlStream.Dispose();
            * * * * * * * * * * * * * * * * * * * * * * * * * * */

            return(XmlCompressedStream);
        } // End of method create()
Example #3
0
        import(    MemoryStream        XmlCompressedStream, 
                   DatabaseInterface   dbConnection     ) {
            ///////////////////////////////////////////////

            int success = 0;
            int failure = 1;
            Albero treeToImport = FileEngine.parseXML(XmlCompressedStream);
           // Console.WriteLine(treeToImport.nome);

            if (!Convert.ToBoolean(dbConnection.storeAlbero(treeToImport))) {
                return success;
            } else {
                return failure;
            }
            /*DatabaseInterface db = new DatabaseInterface("local", null,null);
			Dictionary<String, String[]> vertexAttrib = new Dictionary<string, string[]>();
			vertexAttrib.Add("Altezza", new String[]{"string", "primoValore"});
			vertexAttrib.Add ("Peso", new String[]{"numeric", "1"});
			Albero a = new Albero("enzo4", "Triste", 3, 2, vertexAttrib, vertexAttrib);
            db.storeAlbero(a);*/
        } // End of method import()
Example #4
0
/*___________________________________________________________________________________________________*/

        public void HandleClient(object obj)
        {
            TcpClient client = (TcpClient)obj;

            StreamWriter sWriter = new StreamWriter(client.GetStream(), Encoding.UTF8);
            StreamReader sReader = new StreamReader(client.GetStream(), Encoding.UTF8);

            Boolean bClientConnected = true;

            String[]          dbCred     = sReader.ReadLine().Split('$');
            DatabaseInterface dbInter    = new DatabaseInterface(dbCred[0], dbCred[1], dbCred[2]);
            String            check_auth = dbInter.check().ToString();

            sWriter.WriteLine(check_auth);
            sWriter.Flush();
            /*Connessione al database fallita*/
            if (check_auth.Equals("1"))
            {
                client.Close();
                return;
            }
            /*Connessione al database andata a buon fine*/
            /*Prendiamo i dati dal database*/

            /*Dobbiamo separare i dati contenuti in infoAlbero[] in lista alberi con relativi attributi (Divisi tra
             * vertex ed edge)*/
            /*NomeAlbero#attr1Vertex?tipo:attr2Vertex?tipo#attrEdge?tipo:attrEdge2?tipo$NomeAlbero2#etc*/
            InfoAlbero[] infoAlbero = dbInter.getListaAlberi();
            if (infoAlbero.Length == 0)
            {
                sWriter.WriteLine("Vuoto");
                sWriter.Flush();
            }
            else
            {
                //Console.WriteLine(parametersParser(dbInter.getListaAlberi()));
                sWriter.WriteLine(parametersParser(infoAlbero));
                sWriter.Flush();
            }
            /*Dobbiamo spedire la attribute definitions*/
            Dictionary <String, String> attributeDefinition = dbInter.getAttributeDefinition();

            /*foreach (KeyValuePair<String, String> val in attributeDefinition)
             * {
             *  Console.WriteLine(val);
             * }*/
            //Console.WriteLine(parametersParser(attributeDefinition));
            sWriter.WriteLine(parametersParser(attributeDefinition));
            sWriter.Flush();
            String response = "";
            /*_____Inizio scelta funzioni in base all'operazione scelta__________________________________________________*/
            NetworkStream   netStr = client.GetStream();
            TreeLogicEngine engine = new TreeLogicEngine();

            while (bClientConnected)
            {
                response = sReader.ReadLine();
                if (response.Equals("Return"))
                {
                    continue;
                }

                switch (response)
                {
                /******************IMPORTA FILE*****************************/
                case "Importa":
                    sWriter.WriteLine("Importa");
                    sWriter.Flush();
                    /*Leggiamo la dimensione del file da leggere*/
                    response = sReader.ReadLine();
                    if (response.Equals("Return"))
                    {
                        break;
                    }
                    int length = int.Parse(response);
                    //Console.WriteLine(length);
                    byte[] file = new byte[length];
                    netStr.Read(file, 0, length);
                    //Console.WriteLine(file.Length);
                    MemoryStream stream = new MemoryStream(file);


                    /*  public static int import(MemoryStream XmlStream, DatabaseInterface   DbConnection);*/

                    sWriter.WriteLine(FileEngine.import(stream, dbInter).ToString());
                    sWriter.Flush();

                    break;

                /******************ESPORTA FILE*****************************/
                case "Esporta":
                    sWriter.WriteLine("Esporta");
                    sWriter.Flush();
                    response = sReader.ReadLine();
                    if (response.Equals("Return"))
                    {
                        break;
                    }
                    /*public static MemoryStream export(String treeName,  DatabaseInterface DbConnection);*/
                    //byte[] fileXml = File.ReadAllBytes("Tree.xml");
                    byte[] fileXml = FileEngine.export(response, dbInter).ToArray();
                    sWriter.WriteLine(fileXml.Length.ToString());
                    sWriter.Flush();
                    netStr.Write(fileXml, 0, fileXml.Length);
                    break;

                /******************CREA ALBERO*****************************/
                case "Crea":
                    sWriter.WriteLine("Crea");
                    sWriter.Flush();
                    String[] NomTipSplitDepth = new String[4];
                    String[] SplitDept        = new String[2];

                    //Nome$Tipo$Splitsize$Depth
                    response = sReader.ReadLine();
                    if (response.Equals("Return"))
                    {
                        break;
                    }
                    NomTipSplitDepth = response.Split('$');
                    SplitDept[0]     = NomTipSplitDepth[2];
                    SplitDept[1]     = NomTipSplitDepth[3];

                    //NomeAttrVertex1#tipoAttr:valore$NomeAttrVertex2#tipoAttr2:valore2$etc
                    response = sReader.ReadLine();
                    if (response.Equals("Return"))
                    {
                        break;
                    }

                    Dictionary <String, String[]> vertexAttrList = parametersParser(response);
                    //NomeAttrEdge1#tipoAttr:valore$NomeAttrEdge2#tipoAttr2:valore2$etc
                    response = sReader.ReadLine();
                    if (response.Equals("Return"))
                    {
                        break;
                    }

                    Dictionary <String, String[]> edgeAttrList = parametersParser(response);


                    //byte[] fileX = File.ReadAllBytes("Tree.xml");

                    byte[] fileX = engine.create(NomTipSplitDepth[0], NomTipSplitDepth[1], SplitDept, vertexAttrList, edgeAttrList).ToArray();
                    sWriter.WriteLine(fileX.Length.ToString());
                    sWriter.Flush();
                    netStr.Write(fileX, 0, fileX.Length);
                    break;

                /******************MODIFICA ALBERO*****************************/
                case "Modifica":
                    /* int edit(String graphName,int startNode,int endNode, Dictionary<String, String> newNodeAttrList, Dictionary<String, String> newEdgeAttrList, DatabaseInterface dbConnection);*/
                    sWriter.WriteLine("Modifica");
                    sWriter.Flush();
                    infoAlbero = dbInter.getListaAlberi();
                    if (infoAlbero.Length == 0)
                    {
                        sWriter.WriteLine("Vuoto");
                        sWriter.Flush();
                    }
                    else
                    {
                        //Console.WriteLine(parametersParser(dbInter.getListaAlberi()));
                        /*NomeAlbero#attr1Vertex?tipo:attr2Vertex?tipo#attrEdge?tipo:attrEdge2?tipo$NomeAlbero2#etc*/
                        sWriter.WriteLine(parametersParser(infoAlbero));
                        sWriter.Flush();
                    }

                    response = sReader.ReadLine();
                    if (response.Equals("Return"))
                    {
                        break;
                    }

                    String[] nomeInizFin = response.Split('$');
                    response = sReader.ReadLine();
                    String newAttrVertex = response;

                    if (response.Equals("Return"))
                    {
                        break;
                    }

                    Dictionary <String, String> newNodeAttrList = paramParser(response);

                    response = sReader.ReadLine();
                    String newAttrEdge = response;

                    if (response.Equals("Return"))
                    {
                        break;
                    }

                    Dictionary <String, String> newEdgeAttrList = paramParser(response);

                    sWriter.WriteLine(engine.edit(nomeInizFin[0], int.Parse(nomeInizFin[1]), int.Parse(nomeInizFin[2]), newNodeAttrList, newEdgeAttrList, dbInter).ToString());
                    sWriter.Flush();
                    break;

                /******************CALCOLA ALBERO*****************************/
                case "Calcola":
                    sWriter.WriteLine("Calcola");
                    sWriter.Flush();
                    attributeDefinition = dbInter.getAttributeDefinition();
                    infoAlbero          = dbInter.getListaAlberi();
                    if (infoAlbero.Length == 0)
                    {
                        sWriter.WriteLine("Vuoto");
                        sWriter.Flush();
                    }
                    else
                    {
                        //Console.WriteLine(parametersParser(dbInter.getListaAlberi()));
                        /*NomeAlbero#attr1Vertex?tipo:attr2Vertex?tipo#attrEdge?tipo:attrEdge2?tipo$NomeAlbero2#etc*/
                        sWriter.WriteLine(parametersParser(infoAlbero));
                        sWriter.Flush();
                    }

                    response = sReader.ReadLine();
                    if (response.Equals("Return"))
                    {
                        break;
                    }

                    String[] nif = response.Split('$');

                    response = sReader.ReadLine();
                    if (response.Equals("Return"))
                    {
                        break;
                    }

                    String[] vertAttr = response.Split('$');
                    response = sReader.ReadLine();
                    if (response.Equals("Return"))
                    {
                        break;
                    }

                    String[] edgAttr = response.Split('$');

                    /*long calculate(int startNode, int endNode, String treeName, Dictionayr<String, String> edgeAttrList, Dictionary<String, String> vertexAttrList, DatabaseInterface dbInterface)*/
                    Dictionary <String, String> edgeAttr   = getAttrType(edgAttr, attributeDefinition);
                    Dictionary <String, String> vertexAttr = getAttrType(vertAttr, attributeDefinition);

                    sWriter.WriteLine(engine.calculate(int.Parse(nif[1]), int.Parse(nif[2]), nif[0], edgeAttr, vertexAttr, dbInter).ToString());
                    sWriter.Flush();
                    break;

                case "Disconnect":
                    bClientConnected = false;
                    break;


                default:
                    Console.WriteLine("Errore...");
                    bClientConnected = false;
                    break;
                } //Fine switch
            }     //Fine while
            client.Close();
        }//Fine HandleClient
Example #5
0
        parseXML(     MemoryStream    XmlCompressedStream    ) {
            ////////////////////////////////////////////////////
            MemoryStream XmlDecompressedStream = new MemoryStream();
            XmlDecompressedStream = Exflator.decompress(XmlCompressedStream);

            /*** Rimozione dall'heap degli oggetti oramai non più utili ***/
            XmlCompressedStream.Close();
            XmlCompressedStream.Dispose();

            XmlDecompressedStream.Position = 0;
            XmlReader reader = XmlReader.Create(XmlDecompressedStream);
            /*
            /*** Controllo se il file XML contiene un albero ***
            while (reader.Read()) {
                if (reader.NodeType == XmlNodeType.Element) {
                    switch(reader.Name) {

                        case "tree":
                            break;

                        case "header":
                            return null;
                    }
                }
            }
            */
                                      /*** Analisi del custom XML header ***/
            /*** Strutture ed oggetti che verranno riempiti per costruire l'albero ***/
            String treeName = "";
            String treeType = "";
            int treeSplit = 0;
            int treeDepth = 0;
            Dictionary<String, String[]> nodeAttributeList = new Dictionary<String, String[]>();
            Dictionary<String, String[]> edgeAttributeList = new Dictionary<String, String[]>();

            /*** Finchè non si raggiunge la treeDepth non si e' conclusa l'analisi dell'header ***/
            bool EndOfTreeInfo = false;

            while (reader.Read() && !EndOfTreeInfo) {
                if (reader.NodeType == XmlNodeType.Element) {
                    switch(reader.Name) {

                        case "treeName":
                            while (reader.Read()) {
                                if (reader.NodeType == XmlNodeType.Text) {
                                    treeName = reader.Value;
                                    break;
                                }
                            }
                            break;

                        case "treeType":
                            while (reader.Read()) {
                                if (reader.NodeType == XmlNodeType.Text) {
                                    treeType = reader.Value;
                                    break;
                                }
                            }
                            break;

                        case "treeSplit":
                            while (reader.Read()) {
                                if (reader.NodeType == XmlNodeType.Text) {
                                    treeSplit = Int32.Parse(reader.Value);
                                    break;
                                }
                            }
                            break;

                        case "treeDepth":
                            while (reader.Read()) {
                                if (reader.NodeType == XmlNodeType.Text) {
                                    treeDepth = Int32.Parse(reader.Value);
                                    EndOfTreeInfo = true;
                                    break;
                                }
                            }
                            break; 
                    }    
                } 
            }
            nodeAttributeList = FileEngine.nodeAttrParser(XmlDecompressedStream);
            edgeAttributeList = FileEngine.edgeAttrParser(XmlDecompressedStream);
            Albero Tree = new Albero(treeName, treeType, treeSplit, treeDepth, nodeAttributeList, edgeAttributeList);

                                        /*** Analisi dell'XML elementTable ***/
            restoreValues(Tree, XmlDecompressedStream);
            
            return Tree;
        } // End of method parseXML()
Example #6
0
        assembleXML(    Albero      Tree    ) {
            ///////////////////////////////////

            /*** Settaggio impostazioni XmlWriter ***/
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            settings.IndentChars = ("\t");
            settings.Encoding = System.Text.Encoding.UTF8;
            settings.NewLineChars = Environment.NewLine;
            settings.NewLineHandling = NewLineHandling.Replace;
            settings.OmitXmlDeclaration = false;

            MemoryStream XmlStream = new MemoryStream();
            XmlWriter writer = XmlWriter.Create(XmlStream, settings);

            /*** Inizio scrittura del codice XML ***/
            String depth = Convert.ToString(Tree.depth);
            String splitSize = Convert.ToString(Tree.splitSize);

            writer.WriteStartDocument();
            writer.WriteStartElement("tree");
                writer.WriteStartElement("header");
                    writer.WriteElementString("treeName", Tree.nome);
                    writer.WriteElementString("treeType", Tree.tipo);
                    writer.WriteElementString("treeSplit", splitSize);
                    writer.WriteElementString("treeDepth", depth);

                    writer.WriteStartElement("treeNodeAttributeList");
                        foreach (KeyValuePair<String, String[]> pair in Tree.VertexAttributeList) {
                            writer.WriteStartElement("treeNodeAttribute");
                                writer.WriteElementString("treeNodeAttrName", pair.Key.ToString());
                                writer.WriteElementString("treeNodeAttrType", pair.Value[0].ToString());
                                writer.WriteElementString("treeNodeAttrGenRule", pair.Value[1].ToString());
                            writer.WriteEndElement();
                        }
                    writer.WriteEndElement();

                    writer.WriteStartElement("treeEdgeAttributeList");
                        foreach (KeyValuePair<String, String[]> pair in Tree.EdgeAttributeList) {
                            writer.WriteStartElement("treeEdgeAttribute");
                                writer.WriteElementString("treeEdgeAttrName", pair.Key.ToString());
                                writer.WriteElementString("treeEdgeAttrType", pair.Value[0].ToString());
                                writer.WriteElementString("treeEdgeAttrGenRule", pair.Value[1].ToString());
                            writer.WriteEndElement();
                        }
                    writer.WriteEndElement();

                /*** Chiusura di header ***/
                writer.WriteEndElement();
            writer.WriteStartElement("elementTable");
            
            FileEngine.XmlTraversal(writer, Tree);

            /*** Chiusura di elementTable ***/
            writer.WriteEndElement();

            /*** Chiusura di tree ***/
            writer.WriteEndElement();
            writer.WriteEndDocument();

            writer.Flush();

            MemoryStream XmlCompressedStream = new MemoryStream();
            XmlCompressedStream = Exflator.compress(XmlStream);

            XmlStream.Close();
            XmlStream.Dispose();

            return XmlCompressedStream;
        } // End of method assembleXML()