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; }
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; }
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; } }
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; }
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"); }
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)); } } }
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"); }
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; }
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; }
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; }
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; }
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"); }
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; }
public string AggiungiVentola(PosizioneVentola posizione, Componente componente) { if (componente.GetType().Name != "Ventola") return "Tipo errato"; return _dissipazione.AggiungiVentola(posizione,(Ventola) componente); }
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; }
public string AggiungiComponente(Componente componente) { string esito = ""; esito = _controlloreVincoli.ControllaCompatibilitaEAggiunta(componente); if (esito == "") { _mappaComponenti[componente.GetType().Name].Add(componente); AggiornaAttributi(componente, true); } return esito; }
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; }
public string SostituisciComponente(Componente componenteDaTogliere, Componente componenteDaMettere) { string esito = RimuoviComponente(componenteDaTogliere.GetType().Name); if (esito == "") esito = AggiungiComponente(componenteDaMettere); return esito; }
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; }
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 ""; }