Beispiel #1
0
        public override void Salva(object o, PersistEvent param)
        {
            //TODO bel controllo sul tipo con reflection
            string badUser = (string)param.ToPersist;
            //Questo metodo riceverà un set di stringhe quindi effettuo il cast
            //prima il documento andrà letto
            XmlDocument xdocument = new XmlDocument();

            try
            {
                //Carico il documento xml
                xdocument.Load(Filename);
                //Flusso normale il file esiste
                //Prendo tutti i nodi blacklist
                XmlNodeList blacklists = xdocument.SelectNodes("/blacklists/blacklist");
                /*DA LEGGERE PER CAPIRE IL FLUSSO*/

                //Da inserire cosa fare dipendentemente dall'azione
                //se l'aggiunta va a buon fine aggiungo senza controllare
                //Dato che il set mi ha dato true nel controller
                //Questa voce è univoca

                //Idem per la delete, se lo tolgo e l'operazione ha dato true
                //Cerco la entry e la tolgo a colpo sicuro
                //Per prima cosa trovo la mia blacklist
                foreach (XmlNode blacklist in blacklists)
                {
                    if (blacklist.Attributes.GetNamedItem("proprietario").Value.Equals(Utente.GetNomeUtente()))
                    {
                        //Se l'operazione era di aggiunta appendo l'elemento
                        if (param.Action.Equals("aggiungi"))
                        {
                            var xutente = xdocument.CreateElement("utente");
                            xutente.InnerText = badUser;
                            blacklist.AppendChild(xutente);
                            //Se era rimuovi -> rimuovo like pino la lavatrice
                        }
                        else if (param.Action.Equals("rimuovi"))
                        {
                            foreach (XmlNode user in blacklist.ChildNodes)
                            {
                                if (user.InnerText.Equals(badUser))
                                {
                                    blacklist.RemoveChild(user);
                                }
                            }
                        }
                    }
                }
                XmlWriterSettings settings = new XmlWriterSettings
                {
                    Indent = true
                };
                //Scrivo il file
                XmlWriter writer = XmlWriter.Create(Filename, settings);
                xdocument.Save(writer);
                //Ricordarsi la close sennò si hanno vari problemi
                writer.Close();
            }
            catch (Exception e)
            {
                //Tutto da fare solamente in caso di add,
                //Dato che il file è vuoto, non esistono regole
                //La remove non avrebbe senso
                xdocument = new XmlDocument();
                //flusso anormale il file non esiste
                //creo il tag blacklists
                XmlElement blacklists = xdocument.CreateElement("blacklists");
                //creo il tag blacklist
                XmlElement blacklist = xdocument.CreateElement("blacklist");
                //metto l'attributo per il proprietario
                blacklist.SetAttribute("proprietario", Utente.GetNomeUtente());
                //Aggiungo l'utente al dom

                var utentexml = xdocument.CreateElement("utente");
                utentexml.InnerText = badUser;
                blacklist.AppendChild(utentexml);

                //Aggangio la blacklist al nostro contenitore blacklists
                blacklists.AppendChild(blacklist);
                //Solfa per creare il documento xml
                XmlDeclaration xmlDeclaration = xdocument.CreateXmlDeclaration("1.0", "UTF-8", null);
                XmlElement     root           = xdocument.DocumentElement;
                xdocument.InsertBefore(xmlDeclaration, root);
                //Aggiungo blacklists al dom
                xdocument.AppendChild(blacklists);
                XmlWriterSettings settings = new XmlWriterSettings
                {
                    Indent = true
                };
                //Aggiungo il writer
                XmlWriter writer = XmlWriter.Create(Filename, settings);
                //XmlSchemaSet schemas = new XmlSchemaSet();
                //Bisogna trovare una LLLLLLOCATION per tutte queste impostazioni
                //chemas.Add("", @"C:\Users\massi\Desktop\blacklist.xsd");
                //xdocument.Schemas = schemas;
                try
                {
                    //Scrivo il file
                    //  xdocument.Validate((oggetto, handler) => { });
                    xdocument.Save(writer);
                    writer.Close();
                }catch (Exception ex)
                {
                    throw new PersistenceException("Non è stato possibile scrivere il file .xml");
                }
            }
        }
        //Si suppone che object o sia una impostazione trasferimento

        public override void Salva(object o, PersistEvent param)
        {
            ImpostazioneTrasferimento.ImpostazioneTrasferimento toPut = (ImpostazioneTrasferimento.ImpostazioneTrasferimento)param.ToPersist;
            XmlDocument xdocument = new XmlDocument();

            try
            {
                xdocument.Load(Filename);
                //Dato che sono stato chiamato e il file esiste, si suppone che ci sia da fare un inserimento consono
                //Mi ri-permetto di andare liscio (a spade)
                XmlNode impostazioniMainNode = xdocument.DocumentElement;
                if (param.Action.Equals("aggiungi"))
                {
                    //Caso di aggiunta si veda sotto nel catch per commenti dettagliati
                    XmlElement xImpostazione = xdocument.CreateElement("impostazione");
                    xImpostazione.SetAttribute("utente", Utente.GetNomeUtente());
                    XmlElement cartellaSorgente = xdocument.CreateElement("cartella-sorgente");
                    cartellaSorgente.InnerText = toPut.CartellaSorgente.Path;
                    XmlElement cartellaDestinazione = xdocument.CreateElement("cartella-destinazione");
                    cartellaDestinazione.InnerText = toPut.CartellaDestinazione;
                    XmlElement verso = xdocument.CreateElement("verso");
                    verso.InnerText = toPut.Verso;
                    xImpostazione.AppendChild(cartellaSorgente);
                    xImpostazione.AppendChild(cartellaDestinazione);
                    xImpostazione.AppendChild(verso);
                    impostazioniMainNode.AppendChild(xImpostazione);
                }
                else if (param.Action.Equals("rimuovi"))
                {
                    //Caso di rimozione
                    //Itero, trovo l'impostazione che fa al caso mio e la rimuovo da impostazioni main node
                    //E tutti amici come prima
                    foreach (XmlNode impostazioneNode in impostazioniMainNode.ChildNodes)
                    {
                        if (impostazioneNode.Attributes.GetNamedItem("utente").Value.Equals(Utente.GetNomeUtente()))
                        {
                            //Controllo il contenuto
                            bool found = true;
                            foreach (XmlNode valueImpostazione in impostazioneNode.ChildNodes)
                            {
                                if (!valueImpostazione.Name.Equals("verso"))
                                {
                                    found = found && (
                                        ((valueImpostazione.Name.Equals("cartella-sorgente") &&
                                          valueImpostazione.InnerText.Equals(toPut.CartellaSorgente.Path))) ||
                                        (valueImpostazione.Name.Equals("cartella-destinazione") &&
                                         valueImpostazione.InnerText.Equals(toPut.CartellaDestinazione)));
                                }
                            }
                            if (found)
                            {
                                impostazioniMainNode.RemoveChild(impostazioneNode);
                            }
                        }
                    }
                }
                XmlWriterSettings settings = new XmlWriterSettings
                {
                    Indent = true
                };
                //Scrivo il file
                XmlWriter writer = XmlWriter.Create(Filename, settings);
                xdocument.Save(writer);
                //Ricordarsi la close sennò si hanno vari problemi
                writer.Close();
            }
            catch
            {
                //Il documento esiste, aggiungo andando liscio(a spade)
                xdocument = new XmlDocument();
                //Creo il tag contenitore
                XmlElement impostazioni = xdocument.CreateElement("impostazioni");
                //Creo il tag per la mia impostazione
                XmlElement impostazione = xdocument.CreateElement("impostazione");
                //Imposto l'attributo utente in modo consono
                impostazione.SetAttribute("utente", Utente.GetNomeUtente());

                //Creo gli i figli che compongono il tag impostazione e gli do il valore che devo inserire
                XmlElement cartellaSorgente = xdocument.CreateElement("cartella-sorgente");
                cartellaSorgente.InnerText = toPut.CartellaSorgente.Path;
                XmlElement cartellaDestinazione = xdocument.CreateElement("cartella-destinazione");
                cartellaDestinazione.InnerText = toPut.CartellaDestinazione;
                XmlElement verso = xdocument.CreateElement("verso");
                verso.InnerText = toPut.Verso;

                //Creo l'albero XML da aggiungere al DOM appena verra creato
                impostazione.AppendChild(cartellaSorgente);
                impostazione.AppendChild(cartellaDestinazione);
                impostazione.AppendChild(verso);
                impostazioni.AppendChild(impostazione);
                XmlDeclaration xmlDeclaration = xdocument.CreateXmlDeclaration("1.0", "UTF-8", null);
                //Creo la document root
                XmlElement root = xdocument.DocumentElement;
                xdocument.InsertBefore(xmlDeclaration, root);
                //Aggiungo impostazioni al dom
                xdocument.AppendChild(impostazioni);

                //Scrivo il file
                XmlWriterSettings settings = new XmlWriterSettings
                {
                    Indent = true
                };
                //Aggiungo il writer
                XmlWriter writer = XmlWriter.Create(Filename, settings);
                //TODO Aggiungere lo schema
                xdocument.Save(writer);
                writer.Close();
            }
        }
Beispiel #3
0
 public abstract void Salva(object o, PersistEvent e);