public string RimuoviVincoli(Componente componente)
        {
            string esito = "";

            Type myType = this.GetType();
            MethodInfo metodo = myType.GetMethod("RimuoviVincoli" + componente.GetType().Name, BindingFlags.NonPublic | BindingFlags.Instance);

            esito = (string)metodo.Invoke(this, new object[] { componente });

            return esito;
        }
        public string ControllaCompatibilitaEAggiunta(Componente componente)
        {
            /* Usato dai dall'assemblato quando deve aggiungere un componente
             * controlla che esso sia conforme ai vincoli
             * e che la sua aggiunta si compatibile con gli altri componenti inseriti
             * in ogni caso aggiorna i vincoli
             */


            string esito = "";

            Type myType = this.GetType();
            MethodInfo metodo = myType.GetMethod("Check" + componente.GetType().Name, BindingFlags.NonPublic | BindingFlags.Instance);

            esito = (string)metodo.Invoke(this, new object[] { componente });

            return esito;
        }
예제 #3
0
        public static XmlElement ComponenteXml(XmlDocument document, Componente componente)
        {
            XmlElement elementoComponente = document.CreateElement(componente.GetType().ToString());
            PropertyInfo[] properties = componente.GetType().GetProperties();

            foreach (PropertyInfo property in properties)
            {
                ISalva salva = SalvaFactory.GetSalvataggio(property.Name);

                if (salva != null)
                {
                    elementoComponente.AppendChild(salva.Salva(document, property.GetValue(componente)));
                }
                else
                {
                    elementoComponente.AppendChild(ScriviProprieta(document, property, componente));
                }
            }
            return elementoComponente;
        }
예제 #4
0
        private void AggiornaAttributi(Componente componente, bool aggiunta)
        {
            PropertyInfo[] properties = componente.GetType().GetProperties();

            int segno = (aggiunta) ? 1 : -1;

            foreach (PropertyInfo prop in properties)
            {
                if (prop.Name == "Potenza")
                    _potenzaTotale += segno * (int)prop.GetValue(componente, null);

                if (prop.Name == "Prezzo")
                    _costoTotale += segno * (double)prop.GetValue(componente, null);

                if (prop.Name == "Peso")
                    _pesoTotale += segno * (float)prop.GetValue(componente, null);                
            }


            if (componente.GetType().Name == "Case")
            {
                if (aggiunta)
                    _dissipazione.MappaPosizioneVentole = (Dictionary<PosizioneVentola, Ventola>)((Case)(componente)).MappaVentole;
                else
                    _dissipazione.MappaPosizioneVentole = null;
            }


        }
예제 #5
0
            protected override bool CheckComponente(Componente componente, Dictionary<string, object> campiRicerca)
            {
                if (componente.GetType().Name != "MemoriaRAM")
                    return false;

                MemoriaRAM ram = (MemoriaRAM)componente;

                if (campiRicerca.ContainsKey("Tecnologia"))
                    if (!ram.TecnologiaRAM.Equals(campiRicerca["Tecnologia"]))
                        return false;

                if (campiRicerca.ContainsKey("Classe Latenza"))
                    if (!ram.ClasseLatenza.Equals(campiRicerca["Classe Latenza"]))
                        return false;

                if (campiRicerca.ContainsKey("Capacità"))
                    if (ram.Capacita < (double)(campiRicerca["Capacità"]))
                        return false;

                if (campiRicerca.ContainsKey("Velocità"))
                    if (ram.Velocita < (double)(campiRicerca["Velocità"]))
                        return false;


                
                return true;
            }
예제 #6
0
 protected abstract bool CheckComponente(Componente componente, Dictionary<string, object> campiRicerca);
        private void RimuoviVincoliCase(Componente componente)
        {
            FormatoAlimentatore fa = (FormatoAlimentatore)_vincoli["FormatoAlimentatore"];

            RimozioneConIntrospezione(componente);

            if (_vincoli.ContainsKey("Alimentatore"))
                _vincoli.Add("FormatoAlimentatore", fa);

            Case c = (Case)componente;
            Dictionary<PosizioneVentola, Ventola> ventole = c.MappaVentole;

            // aggiunge tutte le Posizione_Diametro
            // indicando se sono occupateo no
            foreach (KeyValuePair<PosizioneVentola, Ventola> v in ventole)
                _vincoli.Remove(v.Key.Posizione.ToString());

            RimuoviConnettori(componente);

            _vincoli.Remove("Case");
        }
        private void RimuoviVincoliMemoriaSecondaria(Componente componente)
        {
            MemoriaSecondaria sata = (MemoriaSecondaria)componente;

            int slotSATA = ((int)_vincoli["NumeroPorteSATAOccupate"]);
            int slotCase = ((int)_vincoli["NumeroSlot" + sata.FormatoPeriferica.ToString() + "Occupati"]);
            int potenza = ((int)_vincoli["Potenza"]);

            _vincoli["NumeroPorteSATAOccupate"] = slotSATA - 1;
            if (slotSATA - 1 == 0)
                _vincoli.Remove("NumeroPorteSATAOccupate");

            _vincoli["NumeroSlot" + sata.FormatoPeriferica.ToString() + "Occupati"] = slotCase - 1;
            if (slotCase - 1 == 0)
                _vincoli.Remove("NumeroSlot" + sata.FormatoPeriferica.ToString() + "Occupati");

            _vincoli["Potenza"] = potenza - sata.Potenza;
            if(potenza - sata.Potenza == 0)
                _vincoli.Remove("Potenza");

            RimuoviConnettori(componente);

            if ((slotSATA - 1) == 0)
                _vincoli.Remove("PerifericaSATA");
        }
예제 #9
0
            protected override bool CheckComponente(Componente componente, Dictionary<string, object> campiRicerca)
            {
                if (componente.GetType().Name != "Ventola")
                    return false;

                Ventola v = (Ventola)componente;

                if (campiRicerca.ContainsKey("Diametro"))
                    if (v.Diametro.CompareTo(campiRicerca["Diametro"])<0)
                        return false;

                if (campiRicerca.ContainsKey("PWM"))
                    if (v.PWM != ((bool)campiRicerca["PWM"]))
                        return false;

                if (campiRicerca.ContainsKey("Velocità"))
                    if (v.Velocita < ((double)campiRicerca["Velocità"]))
                        return false;

                if (campiRicerca.ContainsKey("Potenza"))
                    if (v.Potenza < ((double)campiRicerca["Potenza"]))
                        return false;

                if (campiRicerca.ContainsKey("Rumore"))
                    if (v.RumoredB != ((double)campiRicerca["Rumore"]))
                        return false;

                return true;
            }
        //sfrutta introspezione peraggiungere i vincoli che non ha bisogno di controllare
        private void AggiuntaConIntrospezione(Componente componente)
        {
            PropertyInfo[] properties = componente.GetType().GetProperties();

            foreach (PropertyInfo prop in properties)
            {
                object[] attributes = prop.GetCustomAttributes(typeof(AttributoVincolo), true);

                if (attributes.Length > 0)
                {
                    AttributoVincolo attribute = (AttributoVincolo)attributes[0];

                    if (!_vincoli.ContainsKey(attribute.Name))
                        _vincoli.Add(attribute.Name, prop.GetValue(componente, null));
                }
            }
        }
예제 #11
0
            protected override bool CheckComponente(Componente componente, Dictionary<string, object> campiRicerca)
            {
                if (componente.GetType().Name != "LettoreSupportoOttico")
                    return false;

                LettoreSupportoOttico sata = (LettoreSupportoOttico) componente;

                if (campiRicerca.ContainsKey("Formato"))
                    if (!sata.FormatoPeriferica.Equals(campiRicerca["Formato"]))
                        return false;

                if (campiRicerca.ContainsKey("Potenza"))
                    if (sata.Potenza < (double)(campiRicerca["Potenza"]))
                        return false;

                if (campiRicerca.ContainsKey("Velocità"))
                    if (!sata.Velocita.Equals((campiRicerca["Velocità"])))
                        return false;

                if (campiRicerca.ContainsKey("Tipo"))
                    if (!sata.TipoLettoreSupportoOttico.Equals(campiRicerca["Tipo"]))
                        return false;

                return true;
            }
        private void RimuoviVincoliSistemaOperativo(Componente componente)
        {

        }
        private void RimuoviVincoliExtra(Componente componente)
        {

        }
        private void RimuoviVincoliSchedaVideo(Componente componente)
        {
            SchedaVideo sv = (SchedaVideo)componente;

            int slotPCI = ((int)_vincoli["NumeroSlotPCIEOccupati"]);
            int slotCase = ((int)_vincoli["NumeroSlotCasePCIEOccupati"]);
            int potenza = ((int)_vincoli["Potenza"]);
            int numeroSV = (int)_vincoli["SchedaVideo"];

            _vincoli["NumeroSlotPCIEOccupati"] = slotPCI - sv.SlotSchedaMadreOccupati;
            if (slotPCI - sv.SlotSchedaMadreOccupati == 0)
                _vincoli.Remove("NumeroSlotPCIEOccupati");

            _vincoli["NumeroSlotCasePCIEOccupati"] = slotCase - sv.SlotCaseOccupati;
            if (slotCase - sv.SlotCaseOccupati == 0)
                _vincoli.Remove("NumeroSlotCasePCIEOccupati");

            _vincoli["Potenza"] = potenza - sv.Potenza;
            if(potenza - sv.Potenza == 0)
                _vincoli.Remove("Potenza");

            _vincoli["SchedaVideo"] = numeroSV - 1;
            if (numeroSV - 1 == 0)
                _vincoli.Remove("SchedaVideo");

            RimuoviConnettori(componente);

            if ((numeroSV - 1) == 0)
                _vincoli.Remove("SchedaVideo");
        }
        private void RimuoviVincoliSchedaPCI(Componente componente)
        {
            SchedaPCI pci = (SchedaPCI)componente;

            int slotPCI = ((int)_vincoli["NumeroSlotPCIOccupati"]);
            int slotCase = ((int)_vincoli["NumeroSlotCasePCIEOccupati"]);
            int potenza = ((int)_vincoli["Potenza"]);

            _vincoli["NumeroSlotPCIOccupati"] = slotPCI - 1;
            if (slotPCI - 1 == 0)
                _vincoli.Remove("NumeroSlotPCIOccupati");

            _vincoli["NumeroSlotCasePCIEOccupati"] = slotCase - 1;
            if (slotCase - 1 == 0)
                _vincoli.Remove("NumeroSlotCasePCIOccupati");

            _vincoli["Potenza"] = potenza - pci.Potenza;
            if(potenza - pci.Potenza == 0)
                _vincoli.Remove("Potenza");

            RimuoviConnettori(componente);

            if ((slotPCI - 1) == 0)
                _vincoli.Remove("SchedaPCI");
        }
        private void RimuoviVincoliSchedaMadre(Componente componente)
        {
            FormatoSocketCPU socket = (FormatoSocketCPU)_vincoli["FormatoSocketCPU"];
            TecnologiaRAM tecnoRAM = (TecnologiaRAM)_vincoli["TecnologiaRAM"];

            RimozioneConIntrospezione(componente);

            if (_vincoli.ContainsKey("Processore"))
                _vincoli.Add("FormatoSocketCPU", socket);

            if (_vincoli.ContainsKey("MemoriaRAM"))
                _vincoli.Add("TecnologiaRAM", tecnoRAM);

            RimuoviConnettori(componente);

            _vincoli.Remove("SchedaMadre");
        }
예제 #17
0
            protected override bool CheckComponente(Componente componente, Dictionary<string, object> campiRicerca)
            {
                if (componente.GetType().Name != "Case")
                    return false;

                Case c = (Case)componente;

                if (campiRicerca.ContainsKey("Formato"))
                    if ((c.FormatoCase.CompareTo(campiRicerca["Formato"])) < 0)
                        return false;

                if (campiRicerca.ContainsKey("Altezza"))
                    if (c.Altezza < ((double)campiRicerca["Altezza"]))
                        return false;

                if (campiRicerca.ContainsKey("Larghezza"))
                    if (c.Lunghezza < ((double)campiRicerca["Larghezza"]))
                        return false;

                if (campiRicerca.ContainsKey("Spessore"))
                    if (c.Spessore < ((double)campiRicerca["Spessore"]))
                        return false;               

                if (campiRicerca.ContainsKey("Lunghezza Massima Scheda Video"))
                    if (c.LarghezzaMassimaSchedaVideo < ((double)campiRicerca["Lunghezza Massima Scheda Video"]))
                        return false;

                if (campiRicerca.ContainsKey("Larghezza Massima Scheda Video"))
                    if (c.LarghezzaMassimaSchedaVideo < ((double)campiRicerca["Larghezza Massima Scheda Video"]))
                        return false;
                
                if (campiRicerca.ContainsKey("Numero Porte USB"))
                    if (c.NumeroPorteUSB < ((double)campiRicerca["Numero Porte USB"]))
                        return false;

                return true;
            }
예제 #18
0
            protected override bool CheckComponente(Componente componente, Dictionary<string, object> campiRicerca)
            {
                if (componente.GetType().Name != "SchedaMadre")
                    return false;

                SchedaMadre sm = (SchedaMadre)componente;

                if (campiRicerca.ContainsKey("Formato"))
                    if (sm.FormatoSchedaMadre.CompareTo(campiRicerca["Formato"]) > 0)
                        return false;

                if (campiRicerca.ContainsKey("Socket"))
                    if (!sm.FormatoSocketCPU.Equals(campiRicerca["Socket"]))
                        return false;

                if (campiRicerca.ContainsKey("Chipset"))
                    if (!sm.Chipset.Equals(campiRicerca["Chipset"]))
                        return false;
                
                if (campiRicerca.ContainsKey("Numero Slot PCI"))
                    if (sm.NumeroSlotPCI < ((double)campiRicerca["Numero Slot PCI"]))
                        return false;

                if (campiRicerca.ContainsKey("Numero Slot PCIE"))
                    if (sm.NumeroSlotPCIE < ((double)campiRicerca["Numero Slot PCIE"]))
                        return false;

                if (campiRicerca.ContainsKey("Numero Porte SATA"))
                    if (sm.NumeroPorteSata < ((double)campiRicerca["Numero Porte SATA"]))
                        return false;

                if (campiRicerca.ContainsKey("Tecnologia RAM"))
                    if (!sm.TecnologiaRAM.Equals(campiRicerca["Tecnologia RAM"]))
                        return false;

                if (campiRicerca.ContainsKey("Numero Slot RAM"))
                    if (sm.NumeroSlotRAM < ((double)campiRicerca["Numero Slot RAM"]))
                        return false;

                return true;

            }
예제 #19
0
            protected override bool CheckComponente(Componente componente, Dictionary<string, object> campiRicerca)
            {
                if (componente.GetType().Name != "MemoriaSecondaria")
                    return false;

                MemoriaSecondaria sata = (MemoriaSecondaria)componente;

                if (campiRicerca.ContainsKey("Formato"))
                    if (!sata.FormatoPeriferica.Equals(campiRicerca["Formato"]))
                        return false;

                if (campiRicerca.ContainsKey("Potenza"))
                    if (sata.Potenza < (double)(campiRicerca["Potenza"]))
                        return false;

                if (campiRicerca.ContainsKey("Velocità"))
                    if (sata.Velocita < (double)(campiRicerca["Velocità"]))
                        return false;

                if (campiRicerca.ContainsKey("Tipo"))
                    if (!sata.TipoMemoriaSecondaria.Equals(campiRicerca["Tipo"]))
                        return false;

                if (campiRicerca.ContainsKey("Capacità"))
                    if (sata.Capacita < (double)(campiRicerca["Capacità"]))
                        return false; 

                return true;
            }
예제 #20
0
            protected override bool CheckComponente(Componente componente, Dictionary<string, object> campiRicerca)
            {
                if (componente.GetType().Name != "SchedaVideo")
                    return false;

                SchedaVideo sv = (SchedaVideo)componente;

                if (campiRicerca.ContainsKey("Lunghezza"))
                    if (sv.Lunghezza < ((double)campiRicerca["Lunghezza"]))
                        return false;

                if (campiRicerca.ContainsKey("Larghezza"))
                    if (sv.Larghezza < ((double)campiRicerca["Larghezza"]))
                        return false;

                if (campiRicerca.ContainsKey("Spessore"))
                    if (sv.Spessore < ((double)campiRicerca["Spessore"]))
                        return false;

                if (campiRicerca.ContainsKey("Slot PCIE"))
                    if (sv.SlotSchedaMadreOccupati < ((double)campiRicerca["Slot PCIE"]))
                        return false;

                if (campiRicerca.ContainsKey("Slot Case"))
                    if (sv.SlotCaseOccupati < ((double)campiRicerca["Slot Case"]))
                        return false;

                if (campiRicerca.ContainsKey("Potenza"))
                    if (sv.Potenza < ((double)campiRicerca["Potenza"]))
                        return false;

                if (campiRicerca.ContainsKey("Capacità"))
                    if (sv.Capacita < ((double)campiRicerca["Capacità"]))
                        return false;

                if (campiRicerca.ContainsKey("Parallelismo"))
                    if (sv.Parallelismo != ((bool)campiRicerca["Parallelismo"]))
                        return false;

                if (campiRicerca.ContainsKey("Modder"))
                    if (sv.Modder != ((string)campiRicerca["Modder"]))
                        return false;

                return true;
            }
예제 #21
0
            protected override bool CheckComponente(Componente componente, Dictionary<string, object> campiRicerca)
            {
                if (componente.GetType().Name != "Processore")
                    return false;

                Processore cpu = (Processore)componente;

                if (campiRicerca.ContainsKey("Socket"))
                    if (!cpu.FormatoSocketCPU.Equals(campiRicerca["Socket"]))
                        return false;

                if (campiRicerca.ContainsKey("Tecnologia"))
                    if (!cpu.TecnologiaCPU.Equals(campiRicerca["Tecnologia"]))
                        return false;

                if (campiRicerca.ContainsKey("Velocità"))
                    if (cpu.Velocita < ((double)campiRicerca["Velocità"]))
                        return false;

                if (campiRicerca.ContainsKey("Numero Core"))
                    if (cpu.NumeroCore < ((double)campiRicerca["Numero Core"]))
                        return false;

                if (campiRicerca.ContainsKey("Potenza"))
                    if (cpu.Potenza < ((double)campiRicerca["Potenza"]))
                        return false;

                if (campiRicerca.ContainsKey("Cache"))
                    if (cpu.DimensioneCache < ((double)campiRicerca["Cache"]))
                        return false;                

                return true;
            }
        private void RimuoviVincoliProcessore(Componente componente)
        {
            FormatoSocketCPU socket = (FormatoSocketCPU)_vincoli["FormatoSocketCPU"];

            RimozioneConIntrospezione(componente);

            if (_vincoli.ContainsKey("SchedaMadre"))
                _vincoli.Add("FormatoSocketCPU", socket);

            Processore cpu = (Processore)componente;
            int potenza = ((int)_vincoli["Potenza"]);

            _vincoli["Potenza"] = potenza - cpu.Potenza;
            if (potenza - cpu.Potenza == 0)
                _vincoli.Remove("Potenza");

            RimuoviConnettori(componente);

            _vincoli.Remove("Processore");
        }
예제 #23
0
            protected override bool CheckComponente(Componente componente, Dictionary<string, object> campiRicerca)
            {
                if (componente.GetType().Name != "SchedaPCI")
                    return false;

                SchedaPCI pci = (SchedaPCI)componente;
                
                if (campiRicerca.ContainsKey("Tipo"))
                    if (!pci.TipoSchedePCI.Equals(campiRicerca["Tipo"]))
                        return false;

                if (campiRicerca.ContainsKey("Potenza"))
                    if (pci.Potenza < (double)(campiRicerca["Potenza"]))
                        return false;

                return true;
            }
예제 #24
0
        public string AggiungiVentola(PosizioneVentola posizione, Componente componente)
        {
            if (componente.GetType().Name != "Ventola")
                return "Tipo errato";

            return _dissipazione.AggiungiVentola(posizione,(Ventola) componente);            
        }
예제 #25
0
            protected override bool CheckComponente(Componente componente, Dictionary<string, object> campiRicerca)
            {
                if (componente.GetType().Name != "SistemaOperativo")
                    return false;

                SistemaOperativo os = (SistemaOperativo)componente;

                if (campiRicerca.ContainsKey("Versione"))
                    if (os.Versione != ((string)campiRicerca["Versione"]))
                        return false;

                if (campiRicerca.ContainsKey("Numero Bit"))
                    if (os.NumeroBit != ((int)campiRicerca["Numero Bit"]))
                        return false;

                return true;
            }
예제 #26
0
        public string AggiungiComponente(Componente componente)
        {
            string esito = "";
            esito = _controlloreVincoli.ControllaCompatibilitaEAggiunta(componente);

            if (esito == "")
            {
                _mappaComponenti[componente.GetType().Name].Add(componente);
                AggiornaAttributi(componente, true);
            }

            return esito;
        } 
예제 #27
0
            protected override bool CheckComponente(Componente componente, Dictionary<string, object> campiRicerca)
            {
                if (componente.GetType().Name != "Extra")
                    return false;

                Extra e = (Extra)componente;

                if (campiRicerca.ContainsKey("Tipo"))
                    if (!e.TipoExtra.Equals(campiRicerca["Tipo"]))
                        return false;

                if (campiRicerca.ContainsKey("Potenza"))
                    if (e.Potenza < (double)(campiRicerca["Potenza"]))
                        return false;

                return true;
            }
예제 #28
0
        public string SostituisciComponente(Componente componenteDaTogliere, Componente componenteDaMettere)
        {
            string esito = RimuoviComponente(componenteDaTogliere.GetType().Name);
            if (esito == "")
                esito = AggiungiComponente(componenteDaMettere);

            return esito;
        }
예제 #29
0
            protected override bool CheckComponente(Componente componente, Dictionary<string, object> campiRicerca)
            {
                if (componente.GetType().Name != "Alimentatore")
                    return false;

                Alimentatore alimentatore = (Alimentatore)componente;

                if (campiRicerca.ContainsKey("Formato"))
                    if (alimentatore.FormatoAlimentatore != (FormatoAlimentatore)campiRicerca["Formato"])
                        return false;

                if (campiRicerca.ContainsKey("Potenza Erogata"))
                    if (alimentatore.PotenzaErogata < (double) campiRicerca["Potenza Erogata"])
                        return false;
                   

                if (campiRicerca.ContainsKey("Rank"))
                    if (alimentatore.Rank.CompareTo(campiRicerca["Rank"]) < 0)
                        return false;
                    

                if (campiRicerca.ContainsKey("Modularità"))
                    if (!alimentatore.Modularita.Equals(campiRicerca["Modularità"]))
                        return false; 
                
                return true;
            }
예제 #30
0
        public string RimuoviComponente(string tipo, Componente componente)
        {
            // Da usare per i componenti che ammettono più di un elemento
            // (SchedaVideo, HardDisk, ecc)

            if (!_mappaComponenti.ContainsKey(tipo))
                throw new Exception("public void RimuoviComponente(string tipo, Componente componente) => Componente non ancora configurato, tipo errato");

            _mappaComponenti[tipo].Remove(componente);
            AggiornaAttributi(componente, false);
            _controlloreVincoli.RimuoviVincoli(componente);

            return "";
        }