diff --git a/ParkIT/src/controller/App.java b/ParkIT/src/controller/App.java index 882f854..cd93cd9 100644 --- a/ParkIT/src/controller/App.java +++ b/ParkIT/src/controller/App.java @@ -9,42 +9,41 @@ public class App { public static void main(String[] args) { - + final int PLAZAS = 107; final int PLAZAS_MR = 2; - + SwingUtilities.invokeLater(new Runnable() { public void run() { try { Frame frame = new Frame(); frame.setVisible(true); frame.setLocationRelativeTo(null); - + Semaphore semaforo = new Semaphore(PLAZAS, true); Semaphore semaforoMovilidadReducida = new Semaphore(PLAZAS_MR, true); - + GeneradorTiempo generadorTiempo = new GeneradorTiempo(); new Thread(generadorTiempo).start(); - + Parking parking = new Parking( generadorTiempo, - frame, + frame, semaforo, semaforoMovilidadReducida, - "Parking DAM-30", + "Parking DAM-30", PLAZAS, - PLAZAS_MR - ); - + PLAZAS_MR); + new Thread(new GeneradorCoches(parking)).start(); - + new ControladorPrincipal(frame, parking); } catch (Exception e) { e.printStackTrace(); } } }); - + } } diff --git a/ParkIT/src/controller/CicloCoche.java b/ParkIT/src/controller/CicloCoche.java index c22ecba..e97346b 100644 --- a/ParkIT/src/controller/CicloCoche.java +++ b/ParkIT/src/controller/CicloCoche.java @@ -1,9 +1,9 @@ package controller; /** - * Contiene la lógica inherente al método run() de un Coche-thread - * con las llamadas a los métodos correspondientes del ControladorParking - * separando este comportamiento de la mera definición del Modelo Coche. + * Contiene la l�gica inherente al m�todo run() de un Coche-thread + * con las llamadas a los m�todos correspondientes del ControladorParking + * separando este comportamiento de la mera definici�n del Modelo Coche. * */ public class CicloCoche { diff --git a/ParkIT/src/controller/ControladorAfluencia.java b/ParkIT/src/controller/ControladorAfluencia.java index cdf46f1..6210f20 100644 --- a/ParkIT/src/controller/ControladorAfluencia.java +++ b/ParkIT/src/controller/ControladorAfluencia.java @@ -6,9 +6,9 @@ import view.Frame; public class ControladorAfluencia implements ActionListener { - + private Frame frame; - + public ControladorAfluencia(Frame frame) { this.frame = frame; } @@ -16,12 +16,11 @@ public ControladorAfluencia(Frame frame) { @Override public void actionPerformed(ActionEvent e) { if (e.getSource().equals(frame.getPanelTop().getBtnAfluenciaBaja())) { - // Lógica de AFLUENCIA BAJA + // L�gica de AFLUENCIA BAJA } else if (e.getSource().equals(frame.getPanelTop().getBtnAfluenciaMedia())) { - // Lógica de AFLUENCIA MEDIA + // L�gica de AFLUENCIA MEDIA } else if (e.getSource().equals(frame.getPanelTop().getBtnAfluenciaAlta())) { - // Lógica de AFLUENCIA ALTA + // L�gica de AFLUENCIA ALTA } } } - diff --git a/ParkIT/src/controller/ControladorInforme.java b/ParkIT/src/controller/ControladorInforme.java index 3387b36..6face30 100644 --- a/ParkIT/src/controller/ControladorInforme.java +++ b/ParkIT/src/controller/ControladorInforme.java @@ -15,14 +15,14 @@ import view.Frame; /** - * Muestra la información del vehículo alojado en una plaza + * Muestra la informaci�n del veh�culo alojado en una plaza * */ public class ControladorInforme implements ActionListener { - + private Frame frame; private Parking parking; - + public ControladorInforme(Frame frame, Parking parking) { this.frame = frame; this.parking = parking; @@ -30,30 +30,27 @@ public ControladorInforme(Frame frame, Parking parking) { @Override public void actionPerformed(ActionEvent e) { - + JButton botonPlaza = (JButton) e.getSource(); String plaza = botonPlaza.getName(); Coche coche = parking.getMapaPlazasCoches().get(plaza); UIManager.put("OptionPane.messageFont", new FontUIResource( - new Font("Arial", Font.BOLD, 22)) - ); - + new Font("Arial", Font.BOLD, 22))); + if (coche != null) { JOptionPane.showMessageDialog( - frame, - coche.toString(), - "Información sobre el vehículo en la plaza " - + coche.getPlaza(), - JOptionPane.INFORMATION_MESSAGE - ); + frame, + coche.toString(), + "Informaci�n sobre el veh�culo en la plaza " + + coche.getPlaza(), + JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog( - frame, - "La plaza " + plaza + " está vacía", - "Información sobre la plaza", - JOptionPane.ERROR_MESSAGE - ); + frame, + "La plaza " + plaza + " est� vac�a", + "Informaci�n sobre la plaza", + JOptionPane.ERROR_MESSAGE); } } } diff --git a/ParkIT/src/controller/ControladorParking.java b/ParkIT/src/controller/ControladorParking.java index 82b2f0c..ea6b1f3 100644 --- a/ParkIT/src/controller/ControladorParking.java +++ b/ParkIT/src/controller/ControladorParking.java @@ -1,9 +1,9 @@ package controller; /** - * Contiene la lógica de semáforos y gobierno del tráfico de coches - * en el Parking, separando la lógica de estos métodos de operación - * de la mera definición del mapa o "blueprint" del Modelo Parking + * Contiene la l�gica de sem�foros y gobierno del tr�fico de coches + * en el Parking, separando la l�gica de estos m�todos de operaci�n + * de la mera definici�n del mapa o "blueprint" del Modelo Parking * */ public class ControladorParking { diff --git a/ParkIT/src/controller/ControladorPrincipal.java b/ParkIT/src/controller/ControladorPrincipal.java index 0ec7a96..353f503 100644 --- a/ParkIT/src/controller/ControladorPrincipal.java +++ b/ParkIT/src/controller/ControladorPrincipal.java @@ -6,32 +6,32 @@ import view.Frame; public class ControladorPrincipal { - + private Frame frame; private Parking parking; private ControladorParking controladorParking; private ControladorAfluencia controladorAfluencia; private ControladorInforme controladorInforme; - + public ControladorPrincipal(Frame frame, Parking parking) { this.frame = frame; this.parking = parking; this.controladorAfluencia = new ControladorAfluencia(frame); this.controladorInforme = new ControladorInforme(frame, parking); - + iniciarVista(); iniciarControladores(); } - + public void iniciarVista() { - //TODO: Lógica inicializadora de la Vista + // TODO: L�gica inicializadora de la Vista } - + public void iniciarControladores() { this.frame.getPanelTop().getBtnAfluenciaBaja().addActionListener(controladorAfluencia); this.frame.getPanelTop().getBtnAfluenciaMedia().addActionListener(controladorAfluencia); this.frame.getPanelTop().getBtnAfluenciaAlta().addActionListener(controladorAfluencia); - + for (JButton boton : this.frame.getPanelParking().getPanelPAreaA().getParkingAButtons()) { boton.addActionListener(controladorInforme); } @@ -41,7 +41,7 @@ public void iniciarControladores() { for (JButton boton : this.frame.getPanelParking().getPanelPAreaC().getParkingCButtons()) { boton.addActionListener(controladorInforme); } - + } } diff --git a/ParkIT/src/controller/GeneradorCoches.java b/ParkIT/src/controller/GeneradorCoches.java index 5ec51a8..0a1b21a 100644 --- a/ParkIT/src/controller/GeneradorCoches.java +++ b/ParkIT/src/controller/GeneradorCoches.java @@ -10,75 +10,73 @@ import model.Parking; public class GeneradorCoches implements Runnable { - -// public static int contadorCoches = 0; -// private static Object obj = new Object(); + + // public static int contadorCoches = 0; + // private static Object obj = new Object(); private Parking parking; private ArrayList modelosCoche; private static final String filePath = "/files/coches.txt"; -// private boolean apagado = false; - + // private boolean apagado = false; + public GeneradorCoches(Parking parking) { - System.out.println("Generador de coches comienza su operación"); + System.out.println("Generador de coches comienza su operaci�n"); this.parking = parking; this.modelosCoche = new ArrayList(); - + leerModelosCoche(); } @Override public void run() { - - while(true) { + + while (true) { try { - Thread.sleep(parking.getGeneradorTiempo().getTiempoGeneracionCoches() * 220); + Thread.sleep(parking.getGeneradorTiempo().getGeneracionCochesNuevo() * 220); } catch (InterruptedException e) { e.printStackTrace(); } - + + parking.getGeneradorTiempo().setGeneracionCochesUsado(parking.getGeneradorTiempo().getGeneracionCochesNuevo()); + Coche coche = new Coche( - generarMatricula(), + generarMatricula(), generarModeloCoche(), parking, definirMovilidadReducida() - + ); Thread thread = new Thread(coche); thread.setName("thread-" + coche.getMatricula()); thread.start(); - -// synchronized (obj) { -// contadorCoches++; -// if (contadorCoches>=100) { -// apagado = true; -// } -// } + + // synchronized (obj) { + // contadorCoches++; + // if (contadorCoches>=100) { + // apagado = true; + // } + // } } - + } - + public String generarMatricula() { String letrasPermitidas = "BCDFGHJKLMNPRSTVWXYZ"; String parteAlfabetica = ""; String parteNumerica = String.format( - "%04d", - ThreadLocalRandom.current().nextInt(0, 10_000) - ); - + "%04d", + ThreadLocalRandom.current().nextInt(0, 10_000)); + for (int i = 0; i < 3; i++) { parteAlfabetica += letrasPermitidas.charAt( - ThreadLocalRandom.current().nextInt(letrasPermitidas.length()) - ); + ThreadLocalRandom.current().nextInt(letrasPermitidas.length())); } return parteNumerica + parteAlfabetica; } - + public void leerModelosCoche() { try ( InputStream is = getClass().getResourceAsStream(filePath); - BufferedReader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8)); - ) - { + BufferedReader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));) { String modeloCoche; while ((modeloCoche = reader.readLine()) != null) { this.modelosCoche.add(modeloCoche); @@ -87,21 +85,20 @@ public void leerModelosCoche() { e.printStackTrace(); } } - + public String generarModeloCoche() { String modeloAleatorio = modelosCoche.get( - ThreadLocalRandom.current().nextInt(modelosCoche.size()) - ); + ThreadLocalRandom.current().nextInt(modelosCoche.size())); return modeloAleatorio; } - + public boolean definirMovilidadReducida() { int porcentajeMovilidadReducida = ThreadLocalRandom.current().nextInt(100); if (porcentajeMovilidadReducida < 5) { return true; } else { - return false; + return false; } } - + } diff --git a/ParkIT/src/controller/GeneradorTiempo.java b/ParkIT/src/controller/GeneradorTiempo.java index 4ce14b2..d5a2c52 100644 --- a/ParkIT/src/controller/GeneradorTiempo.java +++ b/ParkIT/src/controller/GeneradorTiempo.java @@ -1,137 +1,158 @@ package controller; -import java.util.HashSet; -import java.util.Objects; import java.util.concurrent.ThreadLocalRandom; public class GeneradorTiempo implements Runnable { - - private Double probabilidadesMinusvalia; - - private Integer tiempoGeneracionCoches; - - private Integer tiempoDuracionEstanciaCoches; - - private Integer PacienciaCochesNormales; - - private Integer PacienciaCochesMR; - - private HashSet ColeccionTiempoGeneracionCoches = new HashSet<>(); - - private HashSet ColecciontiempoDuracionEstanciaCoches = new HashSet<>(); - - private HashSet ColeccionPacienciaCochesNormales = new HashSet<>(); - - private HashSet ColeccionPacienciaCochesMR = new HashSet<>(); - - private HashSet ColeccionTiempoMinusvaliaCoches = new HashSet<>(); - + + private int GeneracionCochesNuevo; + + private int GeneracionCochesUsado; + + private int DuracionEstanciaCochesNuevo; + + private int DuracionEstanciaCochesUsado; + + private int PacienciaCochesNormalesNuevo; + + private int PacienciaCochesNormalesUsado; + + private int PacienciaCochesMRNuevo; + + private int PacienciaCochesMRUsado; + public GeneradorTiempo() { - setProbabilidadesMinusvalia(ThreadLocalRandom.current().nextDouble()); - setTiempoGeneracionCoches(ThreadLocalRandom.current().nextInt(2, 8)); - setTiempoDuracionEstanciaCoches(ThreadLocalRandom.current().nextInt(40, 60)); - setPacienciaCochesMR(ThreadLocalRandom.current().nextInt(5)); - setPacienciaCochesNormales(ThreadLocalRandom.current().nextInt(2)); - } - - private void ComprobarGeneracionCoches() { - if (!ColeccionTiempoGeneracionCoches.add(getTiempoGeneracionCoches())) { - ColeccionTiempoGeneracionCoches.remove(getTiempoGeneracionCoches()); - } + setGeneracionCochesNuevo(ThreadLocalRandom.current().nextInt(2, 8)); + setDuracionEstanciaCochesNuevo(ThreadLocalRandom.current().nextInt(40, 60)); + setPacienciaCochesNormalesNuevo(ThreadLocalRandom.current().nextInt(5)); + setPacienciaCochesMRNuevo(ThreadLocalRandom.current().nextInt(2)); } - private void ComprobarEstanciaCoches() { - if (!ColecciontiempoDuracionEstanciaCoches.add(getTiempoDuracionEstanciaCoches())) { - ColecciontiempoDuracionEstanciaCoches.remove(getTiempoDuracionEstanciaCoches()); + + private void tiemposDesiguales() { + System.out.println(GeneracionCochesNuevo); + comprobarGeneracionCochesTiempo(); + System.out.println(DuracionEstanciaCochesNuevo); + comprobarDuracionEstanciaPlaza(); + System.out.println(PacienciaCochesMRNuevo); + comprobarPacienciaMR(); + System.out.println(PacienciaCochesNormalesNuevo); + comprobarPacienciaNormal(); + } + + private void comprobarGeneracionCochesTiempo() { + int valorGeneradoGeneracionCoches = ThreadLocalRandom.current().nextInt(2, 8); + while (valorGeneradoGeneracionCoches == GeneracionCochesUsado) { + valorGeneradoGeneracionCoches = ThreadLocalRandom.current().nextInt(2, 8); + } + if (valorGeneradoGeneracionCoches != GeneracionCochesUsado) { + GeneracionCochesNuevo = valorGeneradoGeneracionCoches; } + System.out.println(GeneracionCochesNuevo); } - - private void ComprobarPacienciaCochesNormales() { - if (!ColeccionPacienciaCochesNormales.add(getPacienciaCochesNormales())) { - ColeccionPacienciaCochesNormales.remove(getPacienciaCochesNormales()); + + private void comprobarDuracionEstanciaPlaza() { + int valorGeneradoEstanciaPlaza = ThreadLocalRandom.current().nextInt(40, 60); + while (valorGeneradoEstanciaPlaza == DuracionEstanciaCochesUsado) { + valorGeneradoEstanciaPlaza = ThreadLocalRandom.current().nextInt(40, 60); + } + if (valorGeneradoEstanciaPlaza != DuracionEstanciaCochesUsado) { + DuracionEstanciaCochesNuevo = valorGeneradoEstanciaPlaza; } + System.out.println(DuracionEstanciaCochesNuevo); } - - private void ComprobarPacienciaCochesNormalesMR() { - if (!ColeccionPacienciaCochesMR.add(getPacienciaCochesMR())) { - ColeccionPacienciaCochesMR.remove(getPacienciaCochesMR()); + + private void comprobarPacienciaNormal() { + int valorGeneradoPacienciaNormal = ThreadLocalRandom.current().nextInt(5); + while (valorGeneradoPacienciaNormal == PacienciaCochesNormalesUsado) { + valorGeneradoPacienciaNormal = ThreadLocalRandom.current().nextInt(5); + } + if (valorGeneradoPacienciaNormal != PacienciaCochesNormalesUsado) { + PacienciaCochesNormalesNuevo = valorGeneradoPacienciaNormal; } + System.out.println(PacienciaCochesNormalesNuevo); } - - private void ComprobarMinusvaliaCoches() { - if (!ColeccionTiempoMinusvaliaCoches.add(getProbabilidadesMinusvalia())) { - ColeccionTiempoMinusvaliaCoches.remove(getProbabilidadesMinusvalia()); + + private void comprobarPacienciaMR() { + int valorGeneradoPacienciaMR = ThreadLocalRandom.current().nextInt(2); + while (valorGeneradoPacienciaMR == PacienciaCochesMRUsado) { + valorGeneradoPacienciaMR = ThreadLocalRandom.current().nextInt(2); } + if (valorGeneradoPacienciaMR != PacienciaCochesMRUsado) { + PacienciaCochesMRNuevo = valorGeneradoPacienciaMR; + } + System.out.println(PacienciaCochesMRNuevo); + } + + public int getGeneracionCochesNuevo() { + return GeneracionCochesNuevo; } - public Double getProbabilidadesMinusvalia() { - return probabilidadesMinusvalia; + public void setGeneracionCochesNuevo(int GeneracionCochesNuevo) { + this.GeneracionCochesNuevo = GeneracionCochesNuevo; } - public void setProbabilidadesMinusvalia(Double probabilidadesMinusvalia) { - this.probabilidadesMinusvalia = probabilidadesMinusvalia; + + public int getGeneracionCochesUsado() { + return GeneracionCochesUsado; } - public Integer getTiempoGeneracionCoches() { - return tiempoGeneracionCoches; + + public void setGeneracionCochesUsado(int GeneracionCochesUsado) { + this.GeneracionCochesUsado = GeneracionCochesUsado; } - public void setTiempoGeneracionCoches(Integer tiempoGeneracionCoches) { - this.tiempoGeneracionCoches = tiempoGeneracionCoches; + + public int getDuracionEstanciaCochesNuevo() { + return DuracionEstanciaCochesNuevo; } - public Integer getTiempoDuracionEstanciaCoches() { - return tiempoDuracionEstanciaCoches; + + public void setDuracionEstanciaCochesNuevo(int DuracionEstanciaCochesNuevo) { + this.DuracionEstanciaCochesNuevo = DuracionEstanciaCochesNuevo; } - public void setTiempoDuracionEstanciaCoches(Integer tiempoDuracionEstanciaCoches) { - this.tiempoDuracionEstanciaCoches = tiempoDuracionEstanciaCoches; + + public int getDuracionEstanciaCochesUsado() { + return DuracionEstanciaCochesUsado; } - public Integer getPacienciaCochesNormales() { - return PacienciaCochesNormales; + + public void setDuracionEstanciaCochesUsado(int DuracionEstanciaCochesUsado) { + this.DuracionEstanciaCochesUsado = DuracionEstanciaCochesUsado; } - public void setPacienciaCochesNormales(Integer pacienciaCochesNormales) { - PacienciaCochesNormales = pacienciaCochesNormales; + + public int getPacienciaCochesNormalesNuevo() { + return PacienciaCochesNormalesNuevo; } - public Integer getPacienciaCochesMR() { - return PacienciaCochesMR; + + public void setPacienciaCochesNormalesNuevo(int PacienciaCochesNormalesNuevo) { + this.PacienciaCochesNormalesNuevo = PacienciaCochesNormalesNuevo; } - public void setPacienciaCochesMR(Integer pacienciaCochesMR) { - PacienciaCochesMR = pacienciaCochesMR; + + public int getPacienciaCochesNormalesUsado() { + return PacienciaCochesNormalesUsado; } - - @Override - public int hashCode() { - return Objects.hash(PacienciaCochesMR, PacienciaCochesNormales, probabilidadesMinusvalia, - tiempoDuracionEstanciaCoches, tiempoGeneracionCoches); + + public void setPacienciaCochesNormalesUsado(int PacienciaCochesNormalesUsado) { + this.PacienciaCochesNormalesUsado = PacienciaCochesNormalesUsado; } - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - GeneradorTiempo other = (GeneradorTiempo) obj; - return Objects.equals(PacienciaCochesMR, other.PacienciaCochesMR) - && Objects.equals(PacienciaCochesNormales, other.PacienciaCochesNormales) - && Objects.equals(probabilidadesMinusvalia, other.probabilidadesMinusvalia) - && Objects.equals(tiempoDuracionEstanciaCoches, other.tiempoDuracionEstanciaCoches) - && Objects.equals(tiempoGeneracionCoches, other.tiempoGeneracionCoches); + + public int getPacienciaCochesMRNuevo() { + return PacienciaCochesMRNuevo; + } + + public void setPacienciaCochesMRNuevo(int PacienciaCochesMRNuevo) { + this.PacienciaCochesMRNuevo = PacienciaCochesMRNuevo; } + + public int getPacienciaCochesMRUsado() { + return PacienciaCochesMRUsado; + } + + public void setPacienciaCochesMRUsado(int PacienciaCochesMRUsado) { + this.PacienciaCochesMRUsado = PacienciaCochesMRUsado; + } + @Override public void run() { - // TODO Auto-generated method stub while (true) { - setProbabilidadesMinusvalia(ThreadLocalRandom.current().nextDouble()); - ComprobarMinusvaliaCoches(); - setTiempoGeneracionCoches(ThreadLocalRandom.current().nextInt(2, 5)); - ComprobarGeneracionCoches(); - setTiempoDuracionEstanciaCoches(ThreadLocalRandom.current().nextInt(40, 60)); - ComprobarEstanciaCoches(); - setPacienciaCochesMR(ThreadLocalRandom.current().nextInt(5)); - ComprobarPacienciaCochesNormalesMR(); - setPacienciaCochesNormales(ThreadLocalRandom.current().nextInt(2)); - ComprobarPacienciaCochesNormales(); + tiemposDesiguales(); try { Thread.sleep(100); } catch (InterruptedException e) { - // TODO Auto-generated catch block e.printStackTrace(); } } diff --git a/ParkIT/src/model/Coche.java b/ParkIT/src/model/Coche.java index 29aac3d..f537213 100644 --- a/ParkIT/src/model/Coche.java +++ b/ParkIT/src/model/Coche.java @@ -5,7 +5,7 @@ import view.AnsiColor; public class Coche implements Runnable { - + private String matricula; private String modelo; private boolean movilidadReducida; @@ -13,17 +13,17 @@ public class Coche implements Runnable { private int duracionEstancia; private String permisoAparcamiento; private String plaza; - + public Coche(String matricula, String modelo, Parking parking, boolean movilidadReducida) { this.matricula = matricula; - this.modelo = modelo; + this.modelo = modelo; this.movilidadReducida = movilidadReducida; this.parking = parking; this.duracionEstancia = ThreadLocalRandom.current().nextInt(40, 60); this.permisoAparcamiento = "pendiente"; this.plaza = ""; } - + @Override public String toString() { return "Coche\n [matricula=" + matricula + ",\n modelo=" + modelo + ",\n movilidadReducida=" @@ -33,48 +33,48 @@ public String toString() { @Override public void run() { System.out.println( - AnsiColor.WHITE - + this.matricula - + " " + this.modelo - + (this.isMovilidadReducida() ? " (((movilidad reducida)))," : "") - + " solicita aparcar" - + AnsiColor.RESET - ); + AnsiColor.WHITE + + this.matricula + + " " + this.modelo + + (this.isMovilidadReducida() ? " (((movilidad reducida)))," : "") + + " solicita aparcar" + + AnsiColor.RESET); try { Thread.sleep(2_000); } catch (InterruptedException e1) { e1.printStackTrace(); } - + permisoAparcamiento = parking.solicitarPlaza(this); - + if (!permisoAparcamiento.equals("expirado")) { if (permisoAparcamiento.equals("permitido")) { this.plaza = parking.aparcarCoche(this); - + try { - Thread.sleep(parking.getGeneradorTiempo().getTiempoDuracionEstanciaCoches() * 1_000); - } catch (InterruptedException e) { } - + Thread.sleep(parking.getGeneradorTiempo().getDuracionEstanciaCochesNuevo() * 1_000); + } catch (InterruptedException e) { + } + parking.getGeneradorTiempo() + .setDuracionEstanciaCochesUsado(parking.getGeneradorTiempo().getDuracionEstanciaCochesNuevo()); parking.marcharCoche(this, this.plaza); } } else { System.out.println( - AnsiColor.RED - + this.matricula - + " " + this.modelo - + (this.isMovilidadReducida() ? " (((movilidad reducida)))," : "") - + " ha agotado su paciencia y se marcha" - + AnsiColor.RESET - ); + AnsiColor.RED + + this.matricula + + " " + this.modelo + + (this.isMovilidadReducida() ? " (((movilidad reducida)))," : "") + + " ha agotado su paciencia y se marcha" + + AnsiColor.RESET); } - + } public String getMatricula() { return matricula; } - + public String getModelo() { return modelo; } @@ -98,9 +98,5 @@ public String getPermisoAparcamiento() { public String getPlaza() { return plaza; } - -} - - - +} diff --git a/ParkIT/src/model/Parking.java b/ParkIT/src/model/Parking.java index 5ced500..dc12a38 100644 --- a/ParkIT/src/model/Parking.java +++ b/ParkIT/src/model/Parking.java @@ -12,10 +12,10 @@ import view.Frame; public class Parking { - + private Frame frame; - private Semaphore semaforo; - private Semaphore semaforoMovilidadReducida; + private Semaphore semaforo; + private Semaphore semaforoMovilidadReducida; private String nombre; private GeneradorTiempo generadorTiempo; private int totalPlazas, plazasLibres, plazasOcupadas; @@ -24,8 +24,8 @@ public class Parking { private ArrayList parkingMRSpots, spotsMRLibres, spotsMROcupados; private HashMap mapaPlazasCoches = new HashMap(); private Color verdeLibre, rojoOcupado; - - public Parking(GeneradorTiempo generadorTiempo, Frame frame, Semaphore semaforo, Semaphore semaforoMR, + + public Parking(GeneradorTiempo generadorTiempo, Frame frame, Semaphore semaforo, Semaphore semaforoMR, String nombre, int totalPlazas, int totalMRPlazas) { this.generadorTiempo = generadorTiempo; this.frame = frame; @@ -38,22 +38,22 @@ public Parking(GeneradorTiempo generadorTiempo, Frame frame, Semaphore semaforo, this.plazasMRLibres = totalMRPlazas; this.plazasOcupadas = 0; this.plazasMROcupadas = 0; - + this.parkingPlazas = new ArrayList(); this.spotsOcupados = new ArrayList(); this.parkingMRSpots = new ArrayList(); this.spotsMROcupados = new ArrayList(); - + this.verdeLibre = new Color(50, 205, 50); this.rojoOcupado = new Color(255, 99, 71); - + crearPlazasParking(); crearPlazasMR(); this.spotsLibres = parkingPlazas; this.spotsMRLibres = parkingMRSpots; - + } - + @Override public String toString() { return "Parking [nombre=" + nombre + ", totalPlazas=" + totalPlazas + ", plazasLibres=" @@ -64,56 +64,59 @@ public String toString() { public String solicitarPlaza(Coche coche) { String respuesta = "pendiente"; - + try { - + if (coche.isMovilidadReducida()) { if (semaforoMovilidadReducida.tryAcquire( - generadorTiempo.getPacienciaCochesMR(), TimeUnit.SECONDS) == true - ) { + generadorTiempo.getPacienciaCochesMRNuevo(), TimeUnit.SECONDS) == true) { + generadorTiempo.setPacienciaCochesMRUsado(generadorTiempo.getPacienciaCochesMRNuevo()); respuesta = "permitido"; } else { + generadorTiempo.setPacienciaCochesMRUsado(generadorTiempo.getPacienciaCochesMRNuevo()); respuesta = "expirado"; } } else { if (semaforo.tryAcquire( - generadorTiempo.getPacienciaCochesNormales(), TimeUnit.SECONDS) == true - ) { + generadorTiempo.getPacienciaCochesNormalesNuevo(), TimeUnit.SECONDS) == true) { + generadorTiempo.setPacienciaCochesNormalesUsado(generadorTiempo.getPacienciaCochesNormalesNuevo()); respuesta = "permitido"; } else { + generadorTiempo.setPacienciaCochesNormalesUsado(generadorTiempo.getPacienciaCochesNormalesNuevo()); respuesta = "expirado"; - }; + } + ; } - + } catch (InterruptedException e) { e.printStackTrace(); } return respuesta; } - + public synchronized String aparcarCoche(Coche coche) { - + String plaza; - + if (coche.isMovilidadReducida()) { plazasMROcupadas++; plazasMRLibres--; - + int indiceAleatorio = ThreadLocalRandom.current().nextInt(0, spotsMRLibres.size()); plaza = spotsMRLibres.get(indiceAleatorio); spotsMRLibres.remove(indiceAleatorio); spotsMROcupados.add(plaza); - + this.frame.getPanelParking().getPanelPAreaC().getBtnByName(plaza).setBackground(rojoOcupado); } else { plazasOcupadas++; - plazasLibres--; - + plazasLibres--; + int indiceAleatorio = ThreadLocalRandom.current().nextInt(0, spotsLibres.size()); plaza = spotsLibres.get(indiceAleatorio); spotsLibres.remove(indiceAleatorio); spotsOcupados.add(plaza); - + if (plaza.startsWith("A")) { this.frame.getPanelParking().getPanelPAreaA().getBtnByName(plaza).setBackground(rojoOcupado); } else if (plaza.startsWith("B")) { @@ -122,51 +125,49 @@ public synchronized String aparcarCoche(Coche coche) { this.frame.getPanelParking().getPanelPAreaC().getBtnByName(plaza).setBackground(rojoOcupado); } } - + mapaPlazasCoches.put(plaza, coche); - + System.out.println( AnsiColor.GREEN - + coche.getMatricula() - + " " + coche.getModelo() - + (coche.isMovilidadReducida() ? " (((movilidad reducida)))," : "") - + " ha recibido un PERMIT y ha APARCADO en la plaza " + plaza - + AnsiColor.RESET - ); - + + coche.getMatricula() + + " " + coche.getModelo() + + (coche.isMovilidadReducida() ? " (((movilidad reducida)))," : "") + + " ha recibido un PERMIT y ha APARCADO en la plaza " + plaza + + AnsiColor.RESET); + System.out.println( - AnsiColor.PURPLE - + "plazasLibres: " - + this.plazasLibres - + " plazasOcupadas: " - + this.plazasOcupadas - + AnsiColor.RESET - ); - + AnsiColor.PURPLE + + "plazasLibres: " + + this.plazasLibres + + " plazasOcupadas: " + + this.plazasOcupadas + + AnsiColor.RESET); + return plaza; } - + public synchronized void marcharCoche(Coche coche, String plaza) { if (coche.isMovilidadReducida()) { semaforoMovilidadReducida.release(); - + plazasMRLibres++; plazasMROcupadas--; - + spotsMROcupados.remove(plaza); spotsMRLibres.add(plaza); - + this.frame.getPanelParking().getPanelPAreaC().getBtnByName(plaza).setBackground(verdeLibre); } else { semaforo.release(); - + plazasLibres++; plazasOcupadas--; - + spotsOcupados.remove(plaza); - spotsLibres.add(plaza); - + spotsLibres.add(plaza); + if (plaza.startsWith("A")) { this.frame.getPanelParking().getPanelPAreaA().getBtnByName(plaza).setBackground(verdeLibre); } else if (plaza.startsWith("B")) { @@ -175,27 +176,24 @@ public synchronized void marcharCoche(Coche coche, String plaza) { this.frame.getPanelParking().getPanelPAreaC().getBtnByName(plaza).setBackground(verdeLibre); } } - + System.err.println( - AnsiColor.YELLOW - + coche.getMatricula() - + " " + coche.getModelo() - + (coche.isMovilidadReducida() ? " (((movilidad reducida)))," : "") - + " abandona la plaza " + plaza + " de aparcamiento" - + AnsiColor.RESET - ); - - + AnsiColor.YELLOW + + coche.getMatricula() + + " " + coche.getModelo() + + (coche.isMovilidadReducida() ? " (((movilidad reducida)))," : "") + + " abandona la plaza " + plaza + " de aparcamiento" + + AnsiColor.RESET); + System.out.println( - AnsiColor.PURPLE - + "plazasLibres: " - + this.plazasLibres - + " plazasOcupadas: " - + this.plazasOcupadas - + AnsiColor.RESET - ); + AnsiColor.PURPLE + + "plazasLibres: " + + this.plazasLibres + + " plazasOcupadas: " + + this.plazasOcupadas + + AnsiColor.RESET); } - + public void crearPlazasParking() { String plaza; for (int i = 1; i <= 22; i++) { @@ -214,7 +212,7 @@ public void crearPlazasParking() { mapaPlazasCoches.put(plaza, null); } } - + public void crearPlazasMR() { parkingMRSpots.add("MR01"); parkingMRSpots.add("MR02"); @@ -229,7 +227,7 @@ public synchronized int getPlazasLibres() { public synchronized int getPlazasOcupadas() { return plazasOcupadas; } - + public GeneradorTiempo getGeneradorTiempo() { return generadorTiempo; } @@ -241,12 +239,5 @@ public void setGeneradorTiempo(GeneradorTiempo generadorTiempo) { public HashMap getMapaPlazasCoches() { return mapaPlazasCoches; } - -} - - - - - - +} diff --git a/ParkIT/src/view/AnsiColor.java b/ParkIT/src/view/AnsiColor.java index 4149d51..319c20a 100644 --- a/ParkIT/src/view/AnsiColor.java +++ b/ParkIT/src/view/AnsiColor.java @@ -1,9 +1,9 @@ package view; public class AnsiColor { - + public static final String RESET = "\u001B[0m"; - + public static final String BLACK = "\u001B[30m"; public static final String RED = "\u001B[31m"; public static final String GREEN = "\u001B[32m"; @@ -12,7 +12,7 @@ public class AnsiColor { public static final String PURPLE = "\u001B[35m"; public static final String CYAN = "\u001B[36m"; public static final String WHITE = "\u001B[37m"; - + public static final String BLACK_BG = "\u001B[40m"; public static final String RED_BG = "\u001B[41m"; public static final String GREEN_BG = "\u001B[42m"; @@ -21,5 +21,5 @@ public class AnsiColor { public static final String PURPLE_BG = "\u001B[45m"; public static final String CYAN_BG = "\u001B[46m"; public static final String WHITE_BG = "\u001B[47m"; - + } diff --git a/ParkIT/src/view/Frame.java b/ParkIT/src/view/Frame.java index 5d1c682..3817269 100644 --- a/ParkIT/src/view/Frame.java +++ b/ParkIT/src/view/Frame.java @@ -9,9 +9,9 @@ import javax.swing.JLabel; public class Frame extends JFrame { - + /** - * + * */ private static final long serialVersionUID = 1L; private PanelParking panelParking; @@ -20,22 +20,26 @@ public class Frame extends JFrame { public Frame() { this.panelParking = new PanelParking(); this.panelTop = new PanelTop(); - + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(200, 100, 1000, 800); setResizable(false); setTitle("parkIT"); - + getContentPane().setLayout(new BorderLayout()); - + getContentPane().add(panelTop, BorderLayout.NORTH); getContentPane().add(panelParking, BorderLayout.CENTER); panelTop.setLayout(null); - + this.pack(); } - public PanelParking getPanelParking() { return panelParking; } + public PanelParking getPanelParking() { + return panelParking; + } - public PanelTop getPanelTop() { return panelTop; } + public PanelTop getPanelTop() { + return panelTop; + } } diff --git a/ParkIT/src/view/PanelBottom.java b/ParkIT/src/view/PanelBottom.java index 3e546b2..26f167f 100644 --- a/ParkIT/src/view/PanelBottom.java +++ b/ParkIT/src/view/PanelBottom.java @@ -6,9 +6,9 @@ import javax.swing.JPanel; public class PanelBottom extends JPanel { - + /** - * + * */ private static final long serialVersionUID = 1L; diff --git a/ParkIT/src/view/PanelPAreaA.java b/ParkIT/src/view/PanelPAreaA.java index cd15252..a52a596 100644 --- a/ParkIT/src/view/PanelPAreaA.java +++ b/ParkIT/src/view/PanelPAreaA.java @@ -9,17 +9,18 @@ import controller.ControladorInforme; public class PanelPAreaA extends JPanel { - + /** - * + * */ private static final long serialVersionUID = 1L; private ArrayList parkingAButtons; private int[] xCoordinates; - private Color verdeLibre, rojoOcupado; + private Color verdeLibre, rojoOcupado; public PanelPAreaA() { - // Valores necesarios para ajustar botones a las ligeras desproporciones de la fotografía de fondo + // Valores necesarios para ajustar botones a las ligeras desproporciones de la + // fotografía de fondo this.xCoordinates = new int[] { 2, 42, 81, 121, 161, 201, 240, 280, 320, 360, 399, 439, 479, 520, 560, 600, 640, 680, 720, 760, 801, 841 @@ -27,11 +28,11 @@ public PanelPAreaA() { this.parkingAButtons = new ArrayList(); this.verdeLibre = new Color(50, 205, 50); this.rojoOcupado = new Color(255, 99, 71); - + setOpaque(false); setBounds(10, 5, 873, 75); setLayout(null); - + for (int i = 0; i < 22; i++) { JButton button = new JButton(); button.setBounds(xCoordinates[i], 3, 30, 65); @@ -40,9 +41,9 @@ public PanelPAreaA() { parkingAButtons.add(button); add(button); } - + } - + public JButton getBtnByName(String name) { JButton matchedButton = null; for (JButton btn : parkingAButtons) { diff --git a/ParkIT/src/view/PanelPAreaB.java b/ParkIT/src/view/PanelPAreaB.java index 566d5d5..60e19c2 100644 --- a/ParkIT/src/view/PanelPAreaB.java +++ b/ParkIT/src/view/PanelPAreaB.java @@ -9,15 +9,16 @@ public class PanelPAreaB extends JPanel { /** - * + * */ private static final long serialVersionUID = 1L; private ArrayList parkingBButtons; private int[] xCoordinates; - private Color verdeLibre, rojoOcupado; - + private Color verdeLibre, rojoOcupado; + public PanelPAreaB() { - // Valores necesarios para ajustar botones a las ligeras desproporciones de la fotografía de fondo + // Valores necesarios para ajustar botones a las ligeras desproporciones de la + // fotografía de fondo this.xCoordinates = new int[] { 2, 42, 82, 121, 162, 201, 241, 280, 320, 360, 400, 440, 480, 520, 560, 600, 639, 679, 720, 760, 800, 840 @@ -25,11 +26,11 @@ public PanelPAreaB() { this.parkingBButtons = new ArrayList(); this.verdeLibre = new Color(50, 205, 50); this.rojoOcupado = new Color(255, 99, 71); - + setOpaque(false); setBounds(10, 186, 873, 151); setLayout(null); - + for (int i = 0; i < 22; i++) { JButton button = new JButton(); button.setBounds(xCoordinates[i], 3, 30, 65); @@ -39,7 +40,7 @@ public PanelPAreaB() { parkingBButtons.add(button); add(button); } - + for (int i = 22; i < 44; i++) { JButton button = new JButton(); button.setBounds(xCoordinates[i - 22], 81, 30, 65); @@ -49,9 +50,9 @@ public PanelPAreaB() { parkingBButtons.add(button); add(button); } - + } - + public JButton getBtnByName(String name) { JButton matchedButton = null; for (JButton btn : parkingBButtons) { @@ -65,5 +66,5 @@ public JButton getBtnByName(String name) { public ArrayList getParkingBButtons() { return parkingBButtons; } - + } diff --git a/ParkIT/src/view/PanelPAreaC.java b/ParkIT/src/view/PanelPAreaC.java index 4481e62..5737ac7 100644 --- a/ParkIT/src/view/PanelPAreaC.java +++ b/ParkIT/src/view/PanelPAreaC.java @@ -11,7 +11,7 @@ public class PanelPAreaC extends JPanel { /** - * + * */ private static final long serialVersionUID = 1L; private ArrayList parkingCButtons; @@ -19,7 +19,7 @@ public class PanelPAreaC extends JPanel { private int[] xCoordinates; private int[] xMRCoordinates; private Color verdeLibre, rojoOcupado; - + public PanelPAreaC() { // Valores necesarios para ajustar botones a las ligeras desproporciones de la fotografía de fondo this.xCoordinates = new int[] { @@ -31,11 +31,11 @@ public PanelPAreaC() { this.parkingCButtons = new ArrayList(); this.verdeLibre = new Color(50, 205, 50); this.rojoOcupado = new Color(255, 99, 71); - + setOpaque(false); setBounds(10, 441, 873, 151); setLayout(null); - + for (int i = 0; i < 22; i++) { JButton button = new JButton(); button.setBounds(xCoordinates[i], 3, 30, 65); @@ -45,7 +45,7 @@ public PanelPAreaC() { parkingCButtons.add(button); add(button); } - + for (int i = 22; i < 41; i++) { JButton button = new JButton(); button.setBounds(xCoordinates[i - 22], 82, 30, 65); @@ -55,7 +55,7 @@ public PanelPAreaC() { parkingCButtons.add(button); add(button); } - + for (int i = 0; i < 2; i++) { JButton button = new JButton(); button.setBounds(xMRCoordinates[i], 82, 50, 65); @@ -65,9 +65,9 @@ public PanelPAreaC() { // TODO: button.addActionListener(controlador); parkingCButtons.add(button); add(button); - } + } } - + public JButton getBtnByName(String name) { JButton matchedButton = null; for (JButton btn : parkingCButtons) { diff --git a/ParkIT/src/view/PanelParking.java b/ParkIT/src/view/PanelParking.java index df6ab57..5273d6d 100644 --- a/ParkIT/src/view/PanelParking.java +++ b/ParkIT/src/view/PanelParking.java @@ -8,9 +8,9 @@ import javax.swing.JPanel; public class PanelParking extends JPanel { - + /** - * + * */ private static final long serialVersionUID = 1L; private Image backgroundImage; @@ -20,19 +20,18 @@ public class PanelParking extends JPanel { public PanelParking() { this.backgroundImage = new ImageIcon( - getClass().getClassLoader().getResource("images/parking.jpg") - ).getImage(); - + getClass().getClassLoader().getResource("images/parking.jpg")).getImage(); + setPreferredSize(new Dimension(940, 700)); setLayout(null); - + panelPAreaA = new PanelPAreaA(); panelPAreaB = new PanelPAreaB(); panelPAreaC = new PanelPAreaC(); add(panelPAreaA); add(panelPAreaB); add(panelPAreaC); - + } public void paintComponent(Graphics g) { @@ -40,10 +39,16 @@ public void paintComponent(Graphics g) { g.drawImage(backgroundImage, 0, 0, this); } - public PanelPAreaA getPanelPAreaA() { return panelPAreaA; } + public PanelPAreaA getPanelPAreaA() { + return panelPAreaA; + } + + public PanelPAreaB getPanelPAreaB() { + return panelPAreaB; + } - public PanelPAreaB getPanelPAreaB() { return panelPAreaB; } + public PanelPAreaC getPanelPAreaC() { + return panelPAreaC; + } - public PanelPAreaC getPanelPAreaC() { return panelPAreaC; } - } diff --git a/ParkIT/src/view/PanelTop.java b/ParkIT/src/view/PanelTop.java index fce3b13..7826db8 100644 --- a/ParkIT/src/view/PanelTop.java +++ b/ParkIT/src/view/PanelTop.java @@ -4,9 +4,9 @@ import javax.swing.*; public class PanelTop extends JPanel { - + /** - * + * */ private static final long serialVersionUID = 1L; private ImageIcon logo; @@ -14,30 +14,29 @@ public class PanelTop extends JPanel { private JButton btnAfluenciaBaja, btnAfluenciaMedia, btnAfluenciaAlta; public PanelTop() { - + this.logo = new ImageIcon( - getClass().getClassLoader().getResource("images/parkit_logo.png") - ); - + getClass().getClassLoader().getResource("images/parkit_logo.png")); + setPreferredSize(new Dimension(940, 74)); setBackground(new Color(3, 34, 62)); - + lblLogo = new JLabel(logo); lblLogo.setBounds(20, 11, 154, 52); add(lblLogo); - + btnAfluenciaBaja = new JButton("Afluencia baja"); btnAfluenciaBaja.setBounds(480, 26, 125, 23); add(btnAfluenciaBaja); - + btnAfluenciaMedia = new JButton("Afluencia media"); btnAfluenciaMedia.setBounds(635, 25, 125, 23); add(btnAfluenciaMedia); - + btnAfluenciaAlta = new JButton("Afluencia alta"); btnAfluenciaAlta.setBounds(790, 25, 125, 23); add(btnAfluenciaAlta); - + } public JButton getBtnAfluenciaBaja() { @@ -51,5 +50,5 @@ public JButton getBtnAfluenciaMedia() { public JButton getBtnAfluenciaAlta() { return btnAfluenciaAlta; } - + }