diff --git a/build.gradle.kts b/build.gradle.kts index 3d4d2b1..85b87c5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,4 +16,9 @@ dependencies { tasks.test { useJUnitPlatform() -} \ No newline at end of file +} + +tasks.register("run") { + mainClass.set("net.xgui4.Simulator") // Replace with your main class + classpath = sourceSets["main"].runtimeClasspath +} diff --git a/src/main/java/net/xgui4/Exception/EmptySocketException.java b/src/main/java/net/xgui4/Exception/EmptySocketException.java new file mode 100644 index 0000000..d17d199 --- /dev/null +++ b/src/main/java/net/xgui4/Exception/EmptySocketException.java @@ -0,0 +1,8 @@ +package net.xgui4.Exception; + +public class EmptySocketException extends IllegalStateException { + public EmptySocketException(String message) { + super(message); + } +} + diff --git a/src/main/java/net/xgui4/Exception/GPUAlreadyOccupiedException.java b/src/main/java/net/xgui4/Exception/GPUAlreadyOccupiedException.java new file mode 100644 index 0000000..e2e0a85 --- /dev/null +++ b/src/main/java/net/xgui4/Exception/GPUAlreadyOccupiedException.java @@ -0,0 +1,7 @@ +package net.xgui4.Exception; + +public class GPUAlreadyOccupiedException extends IllegalStateException { + public GPUAlreadyOccupiedException(String message) { + super(message); + } +} diff --git a/src/main/java/net/xgui4/Exception/MemoryAtMaxCapcityException.java b/src/main/java/net/xgui4/Exception/MemoryAtMaxCapcityException.java new file mode 100644 index 0000000..c365920 --- /dev/null +++ b/src/main/java/net/xgui4/Exception/MemoryAtMaxCapcityException.java @@ -0,0 +1,7 @@ +package net.xgui4.Exception; + +public class MemoryAtMaxCapcityException extends IllegalStateException { + public MemoryAtMaxCapcityException(String message) { + super(message); + } +} diff --git a/src/main/java/net/xgui4/Exception/NoBatteryInComputerException.java b/src/main/java/net/xgui4/Exception/NoBatteryInComputerException.java deleted file mode 100644 index de7ab0b..0000000 --- a/src/main/java/net/xgui4/Exception/NoBatteryInComputerException.java +++ /dev/null @@ -1,7 +0,0 @@ -package net.xgui4.Exception; - -public class NoBatteryInComputerException extends NoSuchFieldException { - public NoBatteryInComputerException(String message) { - super(message); - } -} diff --git a/src/main/java/net/xgui4/Exception/NoFreeStorageConnectorLeftException.java b/src/main/java/net/xgui4/Exception/NoFreeStorageConnectorLeftException.java new file mode 100644 index 0000000..06024bd --- /dev/null +++ b/src/main/java/net/xgui4/Exception/NoFreeStorageConnectorLeftException.java @@ -0,0 +1,7 @@ +package net.xgui4.Exception; + +public class NoFreeStorageConnectorLeftException extends IllegalStateException { + public NoFreeStorageConnectorLeftException(String message) { + super(message); + } +} diff --git a/src/main/java/net/xgui4/Exception/NoGPUFoundException.java b/src/main/java/net/xgui4/Exception/NoGPUFoundException.java new file mode 100644 index 0000000..8f86eb0 --- /dev/null +++ b/src/main/java/net/xgui4/Exception/NoGPUFoundException.java @@ -0,0 +1,7 @@ +package net.xgui4.Exception; + +public class NoGPUFoundException extends IllegalStateException { + public NoGPUFoundException(String message) { + super(message); + } +} diff --git a/src/main/java/net/xgui4/Exception/NoMemoryException.java b/src/main/java/net/xgui4/Exception/NoMemoryException.java new file mode 100644 index 0000000..646a292 --- /dev/null +++ b/src/main/java/net/xgui4/Exception/NoMemoryException.java @@ -0,0 +1,7 @@ +package net.xgui4.Exception; + +public class NoMemoryException extends IllegalStateException { + public NoMemoryException(String message) { + super(message); + } +} diff --git a/src/main/java/net/xgui4/Exception/NoPowerComponentException.java b/src/main/java/net/xgui4/Exception/NoPowerComponentException.java new file mode 100644 index 0000000..869658e --- /dev/null +++ b/src/main/java/net/xgui4/Exception/NoPowerComponentException.java @@ -0,0 +1,7 @@ +package net.xgui4.Exception; + +public class NoPowerComponentException extends NoSuchFieldException { + public NoPowerComponentException(String message) { + super(message); + } +} diff --git a/src/main/java/net/xgui4/Exception/NoStorageException.java b/src/main/java/net/xgui4/Exception/NoStorageException.java new file mode 100644 index 0000000..6734eaa --- /dev/null +++ b/src/main/java/net/xgui4/Exception/NoStorageException.java @@ -0,0 +1,7 @@ +package net.xgui4.Exception; + +public class NoStorageException extends IllegalStateException { + public NoStorageException(String message) { + super(message); + } +} diff --git a/src/main/java/net/xgui4/Exception/SocketAlreadyOccupiedException.java b/src/main/java/net/xgui4/Exception/SocketAlreadyOccupiedException.java new file mode 100644 index 0000000..482ebb1 --- /dev/null +++ b/src/main/java/net/xgui4/Exception/SocketAlreadyOccupiedException.java @@ -0,0 +1,7 @@ +package net.xgui4.Exception; + +public class SocketAlreadyOccupiedException extends IllegalStateException { + public SocketAlreadyOccupiedException(String message) { + super(message); + } +} diff --git a/src/main/java/net/xgui4/Exception/WrongComputerTypeException.java b/src/main/java/net/xgui4/Exception/WrongComputerTypeException.java new file mode 100644 index 0000000..aa5dc79 --- /dev/null +++ b/src/main/java/net/xgui4/Exception/WrongComputerTypeException.java @@ -0,0 +1,7 @@ +package net.xgui4.Exception; + +public class WrongComputerTypeException extends IllegalStateException { + public WrongComputerTypeException(String message) { + super(message); + } +} diff --git a/src/main/java/net/xgui4/Hardware/Component/Case.java b/src/main/java/net/xgui4/Hardware/Component/Case.java new file mode 100644 index 0000000..73856ab --- /dev/null +++ b/src/main/java/net/xgui4/Hardware/Component/Case.java @@ -0,0 +1,4 @@ +package net.xgui4.Hardware.Component; + +public class Case { +} diff --git a/src/main/java/net/xgui4/Hardware/Component/Memory/RAM.java b/src/main/java/net/xgui4/Hardware/Component/Memory/RAM.java new file mode 100644 index 0000000..2dbe490 --- /dev/null +++ b/src/main/java/net/xgui4/Hardware/Component/Memory/RAM.java @@ -0,0 +1,4 @@ +package net.xgui4.Hardware.Component.Memory; + +public class RAM { +} diff --git a/src/main/java/net/xgui4/Hardware/Component/Memory/StorageDevice.java b/src/main/java/net/xgui4/Hardware/Component/Memory/StorageDevice.java new file mode 100644 index 0000000..c95dc26 --- /dev/null +++ b/src/main/java/net/xgui4/Hardware/Component/Memory/StorageDevice.java @@ -0,0 +1,4 @@ +package net.xgui4.Hardware.Component.Memory; + +public abstract class StorageDevice { +} diff --git a/src/main/java/net/xgui4/Hardware/Component/Motherboard.java b/src/main/java/net/xgui4/Hardware/Component/Motherboard.java new file mode 100644 index 0000000..3425074 --- /dev/null +++ b/src/main/java/net/xgui4/Hardware/Component/Motherboard.java @@ -0,0 +1,171 @@ +package net.xgui4.Hardware.Component; + +import net.xgui4.Exception.*; +import net.xgui4.Hardware.Component.Memory.RAM; +import net.xgui4.Hardware.Component.Memory.StorageDevice; +import net.xgui4.Hardware.Component.Processors.CPU; +import net.xgui4.Hardware.Component.Processors.GPU; +import net.xgui4.Software.Firmware.Firmware; + +/** + * Cette classe représente une carte mère + */ +public class Motherboard { + private CPU processor; + private GPU graphicCard; + private RAM memory; + private StorageDevice storageDevice; + private final Firmware firmware; + + /** + * Contructeur d'une carte mère vide + * @param firmware : le micrologiciel de la carte mère + */ + public Motherboard(Firmware firmware) { + this.processor = null; + this.graphicCard = null; + this.memory = null; + this.storageDevice = null; + this.firmware = firmware; + } + + /** + * Le constructeur avec les composants en paramètre + * @param processor : le processeur central (CPU) + * @param graphicCard : la carte graphic dédié (GPU) + * @param memory : la mémoire vive (RAM) + * @param storageDevice : le péripérique de stockage + * @param firmware : le micrologiciel de la carte mère + */ + public Motherboard(CPU processor, GPU graphicCard, RAM memory, StorageDevice storageDevice, Firmware firmware) { + this.processor = processor; + this.graphicCard = graphicCard; + this.memory = memory; + this.storageDevice = storageDevice; + this.firmware = firmware; + } + + /** + * Met le processeur dans le socket de la carte mère + * @param processor : le processeur a placé dans la carte mère + * @throws SocketAlreadyOccupiedException si le socket a déjà un processeur + */ + public void putProcessor(CPU processor) { + if (this.processor == null) this.processor = processor; + else throw new SocketAlreadyOccupiedException("Cannot add CPU, socket already occupied"); + } + + /** + * Enlève le processeur de la carte mère + * @throws EmptySocketException si le socket est vide + */ + public void removeProcessor() { + if (this.processor != null) this.processor = null; + else throw new EmptySocketException("Cannot remove CPU if the CPU socket is empty"); + } + + /** + * Ajoute la carte graphique a la carte mère + * @param graphicCard : la carte graphique a ajouté + * @throws GPUAlreadyOccupiedException si la carte graphique est déja présente + */ + public void putGraphicCard(GPU graphicCard) { + if (this.graphicCard == null) this.graphicCard = graphicCard; + else throw new GPUAlreadyOccupiedException("Cannot add GPU, graphic card already occupied"); + } + + /** + * Enlève la carte graphique de la carte mère + * @throws NoGPUFoundException si la carte graphique n'est pas présente + */ + public void removeGraphicCard() { + if (this.graphicCard != null) this.graphicCard = null; + else throw new NoGPUFoundException("Cannot remove GPU : no gpu found"); + } + + /** + * Ajout un baton de RAM à la carte mère + * @param memory - le baton de RAM à ajouter + * @throws MemoryAtMaxCapcityException si la capicité de baton de ram est dépassé + */ + public void putRAMSick(RAM memory) { + if (this.memory == null) this.memory = memory; + else throw new MemoryAtMaxCapcityException("Cannot add ram : ram at full capacity"); + } + + /** + * Enlève le baton de RAM de la carte mère + * @throws NoMemoryException s'il n'y a pas de de baton de RAM + */ + public void removeRAMStick() { + if (this.graphicCard != null) this.graphicCard = null; + else throw new NoMemoryException("Cannot remove RAM: no ram stick found"); + } + + /** + * Ajout un périphériqye de stockage la carte mère + * @param storageDevice - le prériphérique de stockage à ajouter + * @throws NoFreeStorageConnectorLeftException s'il y a déjà un périphérique de stockage dans la carte mère + */ + public void putStorageDevice(StorageDevice storageDevice) { + if (this.storageDevice == null) this.storageDevice = storageDevice; + else throw new NoFreeStorageConnectorLeftException("Cannot add Storage Device : no free storage device connector found"); + } + + /** + * Enlève le périphérique de stockage de la carte mère + * @throws NoStorageException s'il n'y a pas de de périphérique de stockage de la carte mère + */ + public void removeStorageDevice() { + if (this.storageDevice != null) this.storageDevice = null; + else throw new NoStorageException("Cannot remove Storage Device : no Storage Device found"); + } + + /** + * le gettet du processeur + * @return processor - le processeur central (CPU) + * @throws EmptySocketException si le socket du CPU est vide + */ + public CPU getProcessor() { + if (processor == null) throw new EmptySocketException("Cannot get the CPU, the socket is empty"); + return processor; + } + + /** + * Le getter de la carte graphic + * @return graphicCard - lc carte graphique dédié (GPU) + * @throws NoGPUFoundException si aucune GPU trouvé + */ + public GPU getGraphicCard() { + if (graphicCard == null) throw new NoGPUFoundException("No GPU Found"); + return graphicCard; + } + + /** + * Le getter de la mémoire vive (RAM) + * @return memory - RAM + * @throws NoMemoryException si la mémoire est vide + */ + public RAM getMemory() { + if (memory == null) throw new NoMemoryException("No RAM sick connected to the motherboard found"); + return memory; + } + + /** + * Le getter de périphérique de stockage + * @return storageDevice - le préiphérique de stockage + * @throws NoStorageException - si aucun périphérique de stockage trouvé + */ + public StorageDevice getStorageDevice() { + if (storageDevice == null) throw new NoStorageException("No storage device detected"); + return storageDevice; + } + + /** + * Le getter du firmware + * @return fimware - le micrologiciel de la carte mère + */ + public Firmware getFirmware() { + return firmware; + } +} diff --git a/src/main/java/net/xgui4/Hardware/Component/Battery.java b/src/main/java/net/xgui4/Hardware/Component/Power/Battery.java similarity index 90% rename from src/main/java/net/xgui4/Hardware/Component/Battery.java rename to src/main/java/net/xgui4/Hardware/Component/Power/Battery.java index b2605a8..633d9b2 100644 --- a/src/main/java/net/xgui4/Hardware/Component/Battery.java +++ b/src/main/java/net/xgui4/Hardware/Component/Power/Battery.java @@ -1,9 +1,9 @@ -package net.xgui4.Hardware.Component; +package net.xgui4.Hardware.Component.Power; /** * Cette classe abstraite représente une batterie */ -public abstract class Battery { +public abstract class Battery implements PowerComponent { private final String manufacturer; private final String model; private final String name; @@ -29,6 +29,7 @@ public Battery(String manufacturer, String model, String name, int capacity) { * * @return la capacité */ + @Override public int getCapacity() { return capacity; } @@ -42,6 +43,7 @@ protected void setCapacity(int capacity) { * * @return la string du model */ + @Override public String getModel() { return model; } @@ -51,6 +53,7 @@ public String getModel() { * * @return le nom */ + @Override public String getName() { return name; } @@ -60,6 +63,7 @@ public String getName() { * * @return le manufacturier */ + @Override public String getManufacturer() { return manufacturer; } @@ -69,6 +73,7 @@ public String getManufacturer() { * * @return les détailles de la batterie */ + @Override public String getSummary() { return "Manufacturer : " + getManufacturer() + "\n" + "Model : " + getModel() + "\n" + @@ -79,5 +84,7 @@ public String getSummary() { /** * Réduit la santé de la batterie */ + + @Override public abstract void degradeHealth(); } diff --git a/src/main/java/net/xgui4/Hardware/Component/BatteryStatus.java b/src/main/java/net/xgui4/Hardware/Component/Power/BatteryStatus.java similarity index 74% rename from src/main/java/net/xgui4/Hardware/Component/BatteryStatus.java rename to src/main/java/net/xgui4/Hardware/Component/Power/BatteryStatus.java index 6f334c6..5271ff5 100644 --- a/src/main/java/net/xgui4/Hardware/Component/BatteryStatus.java +++ b/src/main/java/net/xgui4/Hardware/Component/Power/BatteryStatus.java @@ -1,4 +1,4 @@ -package net.xgui4.Hardware.Component; +package net.xgui4.Hardware.Component.Power; /** * Cette classe représente le status de batterie diff --git a/src/main/java/net/xgui4/Hardware/Component/LithiumBattery.java b/src/main/java/net/xgui4/Hardware/Component/Power/LithiumBattery.java similarity index 98% rename from src/main/java/net/xgui4/Hardware/Component/LithiumBattery.java rename to src/main/java/net/xgui4/Hardware/Component/Power/LithiumBattery.java index 3928ed5..b0cc13c 100644 --- a/src/main/java/net/xgui4/Hardware/Component/LithiumBattery.java +++ b/src/main/java/net/xgui4/Hardware/Component/Power/LithiumBattery.java @@ -1,4 +1,4 @@ -package net.xgui4.Hardware.Component; +package net.xgui4.Hardware.Component.Power; /** * Cette classe représente une batterie en lithium diff --git a/src/main/java/net/xgui4/Hardware/Component/LithiumBatteryStatus.java b/src/main/java/net/xgui4/Hardware/Component/Power/LithiumBatteryStatus.java similarity index 96% rename from src/main/java/net/xgui4/Hardware/Component/LithiumBatteryStatus.java rename to src/main/java/net/xgui4/Hardware/Component/Power/LithiumBatteryStatus.java index 132b06c..5c77f94 100644 --- a/src/main/java/net/xgui4/Hardware/Component/LithiumBatteryStatus.java +++ b/src/main/java/net/xgui4/Hardware/Component/Power/LithiumBatteryStatus.java @@ -1,4 +1,4 @@ -package net.xgui4.Hardware.Component; +package net.xgui4.Hardware.Component.Power; /** * Cette classe représente le status des batteries de lithium diff --git a/src/main/java/net/xgui4/Hardware/Component/Power/PSU.java b/src/main/java/net/xgui4/Hardware/Component/Power/PSU.java new file mode 100644 index 0000000..77df86a --- /dev/null +++ b/src/main/java/net/xgui4/Hardware/Component/Power/PSU.java @@ -0,0 +1,84 @@ +package net.xgui4.Hardware.Component.Power; + +public class PSU implements PowerComponent { + private final String manufacturer; + private final String model; + private final String name; + private int capacity; + private final int healthCap ; + public final static int NORMAL_USAGE_DAMAGE = 10; + private PowerSupplyHealthStatus powerSupplyHeathStatus; + + public PSU(String manufacturer, String model, String name, int healthCap) { + this.manufacturer = manufacturer; + this.model = model; + this.name = name; + this.healthCap = healthCap; + powerSupplyHeathStatus = PowerSupplyHealthStatus.NEW; + } + + /** + * le getter de la capacité + * + * @return la capacité + */ + @Override + public int getCapacity() { + return capacity; + } + + /** + * Le getter de l'attribut modèle + * + * @return la string du model + */ + @Override + public String getModel() { + return model; + } + + /** + * Le getter de l'attribut name + * + * @return le nom + */ + @Override + public String getName() { + return name; + } + + /** + * Le getter de l'attribut manufacturer + * + * @return le manufacturier + */ + @Override + public String getManufacturer() { + return manufacturer; + } + + /** + * Génère les détailles lisible de l'unité d'alimentation. + * + * @return les détailles de la batterie + */ + @Override + public String getSummary() { + return "Manufacturer : " + getManufacturer() + "\n" + + "Model : " + getModel() + "\n" + + "Name : " + getName() + "\n" + + "Capacity : " + getCapacity() + "\n"; + } + + /** + * Réduit la santé de l'unité d'alimentation. + */ + @Override + public void degradeHealth() { + this.capacity =- NORMAL_USAGE_DAMAGE; + powerSupplyHeathStatus = PowerSupplyHealthStatus.GOOD; + if (capacity == healthCap) { + powerSupplyHeathStatus = PowerSupplyHealthStatus.BAD; + } + } +} diff --git a/src/main/java/net/xgui4/Hardware/Component/Power/PowerComponent.java b/src/main/java/net/xgui4/Hardware/Component/Power/PowerComponent.java new file mode 100644 index 0000000..4bba394 --- /dev/null +++ b/src/main/java/net/xgui4/Hardware/Component/Power/PowerComponent.java @@ -0,0 +1,44 @@ +package net.xgui4.Hardware.Component.Power; + +public interface PowerComponent { + + /** + * le getter de la capacité + * + * @return la capacité + */ + int getCapacity(); + + /** + * Le getter de l'attribut modèle + * + * @return la string du model + */ + String getModel(); + + /** + * Le getter de l'attribut name + * + * @return le nom + */ + String getName(); + + /** + * Le getter de l'attribut manufacturer + * + * @return le manufacturier + */ + String getManufacturer(); + + /** + * Génère les détailles lisible de l'unité d'alimentation. + * + * @return les détailles de la batterie + */ + String getSummary(); + + /** + * Réduit la santé de l'unité d'alimentation. + */ + void degradeHealth(); +} diff --git a/src/main/java/net/xgui4/Hardware/Component/Power/PowerSupplyHealthStatus.java b/src/main/java/net/xgui4/Hardware/Component/Power/PowerSupplyHealthStatus.java new file mode 100644 index 0000000..a68c4fe --- /dev/null +++ b/src/main/java/net/xgui4/Hardware/Component/Power/PowerSupplyHealthStatus.java @@ -0,0 +1,8 @@ +package net.xgui4.Hardware.Component.Power; + +public enum PowerSupplyHealthStatus { + NEW, + GOOD, + BAD, + FAULTY +} diff --git a/src/main/java/net/xgui4/Hardware/Component/Processors/CPU.java b/src/main/java/net/xgui4/Hardware/Component/Processors/CPU.java new file mode 100644 index 0000000..9f17169 --- /dev/null +++ b/src/main/java/net/xgui4/Hardware/Component/Processors/CPU.java @@ -0,0 +1,4 @@ +package net.xgui4.Hardware.Component.Processors; + +public class CPU { +} diff --git a/src/main/java/net/xgui4/Hardware/Component/Processors/GPU.java b/src/main/java/net/xgui4/Hardware/Component/Processors/GPU.java new file mode 100644 index 0000000..e3439ba --- /dev/null +++ b/src/main/java/net/xgui4/Hardware/Component/Processors/GPU.java @@ -0,0 +1,4 @@ +package net.xgui4.Hardware.Component.Processors; + +public class GPU { +} diff --git a/src/main/java/net/xgui4/Hardware/ComputerType/Computer.java b/src/main/java/net/xgui4/Hardware/ComputerType/Computer.java index b715892..5ee3019 100644 --- a/src/main/java/net/xgui4/Hardware/ComputerType/Computer.java +++ b/src/main/java/net/xgui4/Hardware/ComputerType/Computer.java @@ -1,19 +1,49 @@ package net.xgui4.Hardware.ComputerType; -import net.xgui4.Exception.NoBatteryInComputerException; -import net.xgui4.Hardware.Component.Battery; +import net.xgui4.Hardware.Component.Motherboard; +import net.xgui4.Hardware.Component.Power.Battery; +import net.xgui4.Hardware.Component.Power.PowerComponent; import net.xgui4.Hardware.PowerState; +import net.xgui4.Software.OperatingSystem.OperatingSystem; /** * Cette classe abstraite représente un ordinateur */ public abstract class Computer { + /** + * le nom de l'ordinateur + */ + private String name; + /** + * la carte mère et ces composants + */ + private Motherboard motherboard; + /** + * L'état d'alimentation de l'ordinateur (ON ou OFF) + */ private PowerState powerState; + /** + * L'unité d'alimentation de l'ordinateur + */ + private PowerComponent powerComponent; + + /** + * Le système d'exploitation de l'ordinateur + */ + private OperatingSystem system; + /** * Le constructeur d'un ordinateur + * @param name le nom de l'ordinateur + * @param system - le système d'exploitation de l'ordinateur + * @param motherboard la carte mère et ces composants */ - public Computer() { + public Computer(String name, OperatingSystem system, Motherboard motherboard, PowerComponent powerComponent) { + this.name = name; + this.system = system; + this.motherboard = motherboard; + this.powerComponent = powerComponent; powerState = PowerState.OFF; } @@ -31,10 +61,17 @@ public void setPowerOff() { powerState = PowerState.OFF; } + /** + * Démarrer l'ordinateur + */ public void boot() { powerOn(); } + /** + * Recevoir l'info sur la battery (si disponible) + * @param battery - une battery + */ public abstract void getInfo(Battery battery); /** @@ -61,9 +98,15 @@ public PowerState getState() { } /** - * Le getter de la battery + * Le getter de l'unité d'alimentation * @return la battery si l'ordinateur possède une batterie (interface Battery) - * @exception NoBatteryInComputerException lance une excpetion si la classe d'implémentation ne possède pas de batteriy */ - public abstract Battery getBattery(); + public PowerComponent getPowerComponent() { + return powerComponent; + } + + + protected OperatingSystem getOS() { + return system; + } } diff --git a/src/main/java/net/xgui4/Hardware/ComputerType/ComputerFactory.java b/src/main/java/net/xgui4/Hardware/ComputerType/ComputerFactory.java new file mode 100644 index 0000000..36615ad --- /dev/null +++ b/src/main/java/net/xgui4/Hardware/ComputerType/ComputerFactory.java @@ -0,0 +1,16 @@ +package net.xgui4.Hardware.ComputerType; + +import net.xgui4.Hardware.Component.Motherboard; +import net.xgui4.Hardware.Component.Power.Battery; +import net.xgui4.Hardware.Component.Power.PowerComponent; +import net.xgui4.Software.OperatingSystem.OperatingSystem; + +public class ComputerFactory { + public Computer createComputer(ComputerType type, PowerComponent powerComponent, String name, Motherboard motherboard, OperatingSystem system) { + return switch (type) { + case LAPTOP -> new Laptop(name, system, motherboard, powerComponent); + + case DESKTOP -> new Desktop(name, system, motherboard, powerComponent); + }; + } +} \ No newline at end of file diff --git a/src/main/java/net/xgui4/Hardware/ComputerType/ComputerType.java b/src/main/java/net/xgui4/Hardware/ComputerType/ComputerType.java new file mode 100644 index 0000000..8ab65d9 --- /dev/null +++ b/src/main/java/net/xgui4/Hardware/ComputerType/ComputerType.java @@ -0,0 +1,7 @@ +package net.xgui4.Hardware.ComputerType; + +public enum ComputerType { + LAPTOP, + DESKTOP +} + diff --git a/src/main/java/net/xgui4/Hardware/ComputerType/Desktop.java b/src/main/java/net/xgui4/Hardware/ComputerType/Desktop.java new file mode 100644 index 0000000..88622a6 --- /dev/null +++ b/src/main/java/net/xgui4/Hardware/ComputerType/Desktop.java @@ -0,0 +1,51 @@ +package net.xgui4.Hardware.ComputerType; + +import net.xgui4.Hardware.Component.Motherboard; +import net.xgui4.Hardware.Component.Power.Battery; +import net.xgui4.Hardware.Component.Power.PowerComponent; +import net.xgui4.Software.OperatingSystem.OperatingSystem; + +public class Desktop extends Computer{ + /** + * Le constructeur d'un ordinateur + * + * @param name le nom de l'ordinateur + * @param system - le système d'exploitation de l'ordinateur + * @param motherboard la carte mère et ces composants + */ + public Desktop(String name, OperatingSystem system, Motherboard motherboard, PowerComponent powerComponent) { + super(name, system, motherboard, powerComponent); + } + + /** + * @param battery + */ + @Override + public void getInfo(Battery battery) { + + } + + /** + * Cette méthode abstraite permet de démarrer l'ordinateur + */ + @Override + public void powerOn() { + super.setPowerOn(); + } + + /** + * Cette méthode abstraite permet d'éteindre l'ordinateur + */ + @Override + public void powerOff() { + super.setPowerOff(); + } + + /** + * Cette méthode abstraite permet de fermer le système d'exploitation et l'ordinateur correctement + */ + @Override + public void shutdown() { + setPowerOff(); + } +} diff --git a/src/main/java/net/xgui4/Hardware/ComputerType/Laptop.java b/src/main/java/net/xgui4/Hardware/ComputerType/Laptop.java index 5bda447..490ba1e 100644 --- a/src/main/java/net/xgui4/Hardware/ComputerType/Laptop.java +++ b/src/main/java/net/xgui4/Hardware/ComputerType/Laptop.java @@ -1,39 +1,22 @@ package net.xgui4.Hardware.ComputerType; -import net.xgui4.Hardware.Component.Battery; -import net.xgui4.Software.Firmware.Firmware; +import net.xgui4.Hardware.Component.Motherboard; +import net.xgui4.Hardware.Component.Power.Battery; +import net.xgui4.Hardware.Component.Power.PowerComponent; import net.xgui4.Software.OperatingSystem.OperatingSystem; /** * Cette classe abstraite représente un ordinateur portable (laptop) */ public class Laptop extends Computer { - Battery battery; - Firmware firmware; - OperatingSystem os; /** * Le contructeur d'un ordinateur portable * - * @param battery : une batterie (l'interface Battery) - * @param firmware : le micrologiciel de la carte mère (interface Firmware) - * @param os : le système d'exploitation (La classe OperatingSystem) - */ - public Laptop(Battery battery, Firmware firmware, OperatingSystem os) { - super(); - this.battery = battery; - this.firmware = firmware; - this.os = os; - } - - /** - * Le getter de la battery - * - * @return une batterie (interface Battery) - */ - @Override - public Battery getBattery() { - return battery; + * @param powerComponent : une batterie (l'interface powerComponent) + * */ + public Laptop(String name, OperatingSystem system, Motherboard motherboard, PowerComponent powerComponent) { + super(name, system, motherboard, powerComponent); } /** @@ -42,7 +25,7 @@ public Battery getBattery() { @Override public void powerOn() { setPowerOn(); - os.boot(); + super.getOS().boot(); } /** @@ -59,7 +42,7 @@ public void powerOff() { @Override public void shutdown() { powerOff(); - os.shutdown(); + super.getOS().shutdown(); } @Override diff --git a/src/main/java/net/xgui4/Player.java b/src/main/java/net/xgui4/Player.java index 658fbb7..525f616 100644 --- a/src/main/java/net/xgui4/Player.java +++ b/src/main/java/net/xgui4/Player.java @@ -1,10 +1,10 @@ package net.xgui4; -import net.xgui4.Hardware.Component.Battery; +import net.xgui4.Hardware.Component.Power.Battery; import net.xgui4.Hardware.ComputerType.Computer; public class Player { - private String username; + private final String username; private Computer computer; public Player(String username) { @@ -22,7 +22,7 @@ public void play() { public void analyse() { System.out.println("Information : "); - computer.getInfo(computer.getBattery()); + computer.getInfo((Battery)computer.getPowerComponent()); } public void quit() { diff --git a/src/main/java/net/xgui4/Simulator.java b/src/main/java/net/xgui4/Simulator.java index 6b703f6..6fa9d2d 100644 --- a/src/main/java/net/xgui4/Simulator.java +++ b/src/main/java/net/xgui4/Simulator.java @@ -1,46 +1,36 @@ package net.xgui4; -import net.xgui4.Hardware.Component.LithiumBattery; -import net.xgui4.Hardware.ComputerType.Laptop; -import net.xgui4.Software.Firmware.Firmware; -import net.xgui4.Software.Firmware.UEFI; -import net.xgui4.Software.OperatingSystem.OperatingSystem; -import net.xgui4.Software.OperatingSystem.Windows; +import net.xgui4.View.PlayButtonActionView; -import java.util.Scanner; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionListener; /** * Ceci est l'ébauche de l'applis/jeux */ public class Simulator { - public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); - - System.out.print("Enter your username: "); - String username = scanner.nextLine(); - - System.out.print("Enter your computer type 1 (Laptop), 2 (Desktop : coming soon): "); - int computerType = scanner.nextInt(); - - if (computerType != 1) { - System.out.println("Invalid computer type"); - } - - scanner.close(); - - Player player = new Player(username); - - OperatingSystem microsoftWindows11 = new Windows("Microsoft Windows 11"); - Firmware microsoftUEFI = new UEFI("Microsoft Surface UEFI", "Microsoft"); - Laptop microsoftSurface = new Laptop(new LithiumBattery("Microsoft", "Generic Battery", "Generic Battery", 1000, 100), microsoftUEFI, microsoftWindows11); - - player.chooseComputer(microsoftSurface); - - player.play(); - - player.analyse(); - - player.quit(); + public final static String TITLE = "Computer Builder GUI"; + public final static int WINDOWS_WIDTH = 500; + public final static int WINDOWS_HEIGHT = 500; + private final static String PLAY_TITLE = "Play"; + public static void main(String[] args) { + JFrame frame = new JFrame(TITLE); + frame.setSize(WINDOWS_WIDTH, WINDOWS_HEIGHT); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + frame.setLayout(new BorderLayout()); + + JLabel title = new JLabel(TITLE, SwingConstants.CENTER); + JButton playButton = new JButton(PLAY_TITLE); + ActionListener playButtonAction = new PlayButtonActionView(); + playButton.addActionListener(playButtonAction); + playButton.setPreferredSize(new Dimension(50, 50)); + + // Add components to frame + frame.add(title, BorderLayout.NORTH); + frame.add(playButton, BorderLayout.CENTER); + frame.setVisible(true); } } \ No newline at end of file diff --git a/src/main/java/net/xgui4/View/PlayButtonActionView.java b/src/main/java/net/xgui4/View/PlayButtonActionView.java new file mode 100644 index 0000000..36c06e2 --- /dev/null +++ b/src/main/java/net/xgui4/View/PlayButtonActionView.java @@ -0,0 +1,82 @@ +package net.xgui4.View; + +import net.xgui4.Exception.WrongComputerTypeException; +import net.xgui4.Hardware.Component.Motherboard; +import net.xgui4.Hardware.Component.Power.LithiumBattery; +import net.xgui4.Hardware.Component.Power.PSU; +import net.xgui4.Hardware.Component.Power.PowerComponent; +import net.xgui4.Hardware.ComputerType.*; +import net.xgui4.Player; +import net.xgui4.Software.Firmware.UEFI; +import net.xgui4.Software.OperatingSystem.OperatingSystem; +import net.xgui4.Software.OperatingSystem.Windows; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Scanner; + +public class PlayButtonActionView implements ActionListener { + /** + * Invoked when an action occurs. + * + * @param e the event to be processed + */ + @Override + public void actionPerformed(ActionEvent e) { + ComputerFactory computerFactory = new ComputerFactory(); + + String username = chooseUsername(); + + ComputerType computerType = chooseComputer(); + + Player player = new Player(username); + + Computer computer = buildComputer(computerType, computerFactory, player); + + player.chooseComputer(computer); + + player.play(); + + player.analyse(); + + player.quit(); + } + + private static String chooseUsername() { + return JOptionPane.showInputDialog("Choose a Username"); + } + + private static ComputerType chooseComputer() { + String input = JOptionPane.showInputDialog("Choose a Computer Type : Laptop or Desktop"); + + if (input.equals("Laptop")) { + return ComputerType.LAPTOP; + } + if (input.equals("Desktop")){ + return ComputerType.DESKTOP; + } + else { + JDialog dialog = new JDialog(); + dialog.add(new TextField("Invalid computer type, pls try again.")); + return chooseComputer(); + } + } + + private static Computer buildComputer(ComputerType computerType, ComputerFactory computerFactory, Player player) { + if (computerType == ComputerType.LAPTOP) { + Motherboard laptopMotherboard = new Motherboard(new UEFI("Default Laptop UEFI", "OEM")); + PowerComponent lithiumIonBattery = new LithiumBattery("OEM", "Basic Laptop Battery", "Basic Laptop Battery", 100, 10); + OperatingSystem defaultSystem = new Windows("Windows OEM Edition"); + return computerFactory.createComputer(computerType, lithiumIonBattery, "Default Laptop", laptopMotherboard, defaultSystem); + } + else if (computerType == ComputerType.DESKTOP) { + Motherboard basicMotherboard = new Motherboard(new UEFI("Default Desktop UEFI", player.getUsername())); + PowerComponent basicPSU = new PSU("Default PSU" , "Default PSU", "Default", 10); + OperatingSystem defaultSystem = new Windows("Windows Home Edition"); + return computerFactory.createComputer(computerType, basicPSU, "Default Laptop", basicMotherboard, defaultSystem); + } + throw new WrongComputerTypeException("Cannot build computer. Computer type " + computerType + " is invalid."); + } +} diff --git a/src/test/java/net/xgui4/Hardware/Component/LithiumBatteryTest.java b/src/test/java/net/xgui4/Hardware/Component/LithiumBatteryTest.java index 487f8dd..2a03703 100644 --- a/src/test/java/net/xgui4/Hardware/Component/LithiumBatteryTest.java +++ b/src/test/java/net/xgui4/Hardware/Component/LithiumBatteryTest.java @@ -1,6 +1,7 @@ package net.xgui4.Hardware.Component; -import org.junit.jupiter.api.AfterEach; +import net.xgui4.Hardware.Component.Power.Battery; +import net.xgui4.Hardware.Component.Power.LithiumBattery; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/src/test/java/net/xgui4/Hardware/ComputerType/LaptopTest.java b/src/test/java/net/xgui4/Hardware/ComputerType/LaptopTest.java index a288798..73dd743 100644 --- a/src/test/java/net/xgui4/Hardware/ComputerType/LaptopTest.java +++ b/src/test/java/net/xgui4/Hardware/ComputerType/LaptopTest.java @@ -1,13 +1,12 @@ package net.xgui4.Hardware.ComputerType; -import net.xgui4.Hardware.Component.Battery; -import net.xgui4.Hardware.Component.LithiumBattery; +import net.xgui4.Hardware.Component.Power.Battery; +import net.xgui4.Hardware.Component.Power.LithiumBattery; import net.xgui4.Hardware.PowerState; import net.xgui4.Software.Firmware.Firmware; import net.xgui4.Software.Firmware.UEFI; import net.xgui4.Software.OperatingSystem.OperatingSystem; import net.xgui4.Software.OperatingSystem.Windows; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test;