diff --git a/src/es/markse/Contenedor.java b/src/es/markse/Contenedor.java index eb362d16586a22ee246f15ff45e67443a882ad6d..2ec7eb81fb8ca1991dc4e64f35fdafe846cb16a2 100644 --- a/src/es/markse/Contenedor.java +++ b/src/es/markse/Contenedor.java @@ -33,52 +33,69 @@ public class Contenedor { * @param transito Indica si esta en transito (true) o en recogida (false) * @param techo indica si tiene techo (true) o no (false) */ - public Contenedor(String codigoDueno, char equipamiento, String numeroSerie, float pesoContenedor, float maximaCargaUtil, float volumen, boolean transito, boolean techo) { - validarCodigoDueno(codigoDueno.toUpperCase()); + public Contenedor(String codigoDueno, char equipamiento, String numeroSerie, float pesoTara, float maximaCargaUtil, float volumen, boolean transito, boolean techo) { + validarCodigoDueno(codigoDueno); validarEquipamiento(equipamiento); + comprobarPesos(pesoTara, maximaCargaUtil, volumen); validarNumeroSerie(numeroSerie); - this.pesoTara = pesoContenedor; + this.pesoTara = pesoTara; this.maximaCargaUtil = maximaCargaUtil; this.volumen = volumen; this.transito = transito; this.recogida = !transito; this.techo = techo; String digitoControl = String.valueOf(calcularDigitoControl(codigoDueno, equipamiento, numeroSerie)); - this.codigo = codigoDueno + equipamiento + numeroSerie + digitoControl; + this.codigo = codigoDueno.toUpperCase() + equipamiento + numeroSerie + digitoControl; } /** * Metodo que compara e codigo del dueño para ver si es correcto * @param codigoDueno Cadena de 3 letras mayusculas - * @throws Devuelve una excepcion si no coincide con el patron + * @throws IllegalArgumentException Si el codigoDueno no coincide con el patron correcto */ private void validarCodigoDueno(String codigoDueno) { - if (codigoDueno.length() != 3 || !codigoDueno.matches("[A-Za-z]{3}")) { - throw new IllegalArgumentException("El código del dueño debe tener 3 letras mayúsculas."); - } - } + if (codigoDueno == null) throw new IllegalArgumentException("El código del dueño debe tener 3 letras mayúsculas."); + if (codigoDueno.length() != 3 || !codigoDueno.matches("[A-Za-z]{3}")) + throw new IllegalArgumentException("El código del dueño debe tener 3 letras mayúsculas."); + } /** * Metodo que sirve para comparar si el equipamiento es uno de los correctos * @param equipamiento Es un caracter que indica el equipamiento - * @throws devuelve una excepcion si no es una de esas letras + * @throws IllegalArgumentException si el equipamiento no es correcto (no es ni U ni J ni Z) */ private void validarEquipamiento(char equipamiento) { - if (equipamiento != 'U' && equipamiento != 'J' && equipamiento != 'Z') { - throw new IllegalArgumentException("Equipamiento debe ser 'U', 'J' o 'Z'."); - } - } + if (equipamiento != 'U' && equipamiento != 'J' && equipamiento != 'Z') { + throw new IllegalArgumentException("Equipamiento debe ser 'U', 'J' o 'Z'."); + } + } + /** * metodo para comparar si el numero de serie es correcto * @param numeroSerie el numero de serie del contenedor - * @throws devuelve un error si el patron no coincide (6 numeros) + * @throws Si el numeroSerie no es correcto (no son 6 numeros) o si es nulo + * */ private void validarNumeroSerie(String numeroSerie) { - if (numeroSerie.length() != 6 || !numeroSerie.matches("\\d{6}")) { - throw new IllegalArgumentException("El número de serie debe tener 6 dÃgitos."); - } - } + if (numeroSerie == null) throw new IllegalArgumentException("El numero de serie no puede ser nulo"); + if (numeroSerie.length() != 6 || !numeroSerie.matches("\\d{6}")) { + throw new IllegalArgumentException("El número de serie debe tener 6 dÃgitos."); + } + } + + /** + * Metodo qe comprueba los pesos de los contenedores + * @param pesoTara Peso del contenedor + * @param maximaCargaUtil Maxima carga util del contenedor + * @param volumen Volumen del contenedor + * @throws IllegalArgumentException si alguno de los pesos es menor que 1 + */ + private void comprobarPesos(float pesoTara, float maximaCargaUtil, float volumen) { + if (pesoTara < 1 || maximaCargaUtil <1 || volumen < 1) { + throw new IllegalArgumentException("Los pesos deben ser igual o mayores a 1"); + } + } /** * Metodo que sirve para calcular el diito de control mediante el codigo del dueño, el equipamiento y el @@ -119,24 +136,23 @@ public class Contenedor { /** * 1.1.13 Metodo que sirve para cambiar el estado a recogida de un contenedor * Si esta apilado no puede estar en recogida + * @throws IllegalArgumentException si el contenedor esta apilado */ public void cambiarEstadoARecogida() { - if(!this.estadoApilado()) { - this.recogida = true; - this.transito = false; - } - + if(this.estadoApilado()) throw new IllegalArgumentException("No puedes cambiar el estado a un contenedor apilado"); + this.recogida = true; + this.transito = false; } /** * 1.1.14 metodo que sirve para cambiar un contenedor a estado de transito * Si esta apilado no puede estar en transito + * @throws IllegalArgumentException si el contenedor esta apilado */ public void cambiarEstadoATransito() { - if (!this.estadoApilado()) { - this.transito = true; - this.recogida = false; - } + if(this.estadoApilado()) throw new IllegalArgumentException("No puedes cambiar el estado a un contenedor apilado"); + this.recogida = false; + this.transito = true; } /** @@ -196,14 +212,6 @@ public class Contenedor { return this.pesoTara*2.20462f; } - /** - * Metodo para añadir un trayecto al contenedor - * @param t Trayecto que añadimos al contenedor - */ - public void anyadirTrayecto(Trayecto t) { - this.trayectos.add(t); - } - /** * Metodo que devuelve la maxima carga util de un contenedor * @return La maxima carga util de un contenedor @@ -235,6 +243,14 @@ public class Contenedor { public boolean estadoApilado() { return this.apilado; } - - //REALIZAR EL METODO PARA CALCULAR LOS TRAYECTOS + + /** + * Metodo que sirve para anyadir un trayecto al contenedor + * @param t + */ + public void anyadirTrayecto(Trayecto t) { + //COMPROBAR SI LA FECHA FIN DEL ANTERIOR ES ANTES QUE FECHA INICIO DEL SIGUIENTE + //LO MISMO CON EL MUELLE DESTINO Y MUELLE ORIGEN + //LO MISMO PUERTO DESTINO Y PUERTO ORIGEN + } } \ No newline at end of file diff --git a/src/es/markse/Muelle.java b/src/es/markse/Muelle.java index 7338a191adda1197baca7e1ffab8c6728137959a..5d88b4ed01b10f83d4baf7afb96346c16fd365de 100644 --- a/src/es/markse/Muelle.java +++ b/src/es/markse/Muelle.java @@ -148,6 +148,7 @@ public class Muelle { * Metodo para comporbar que los valores no sean nulos a la hora de crear un Objeto de tipo Muelle * @param identificador Identificador del muelle * @param cord Coordenadas de muelle (clase GPSCoordinate) + * @throws IllegalArgumentException si el identificador o la coordenada son nulos */ private void comprobarValoresNulos(String identificador, GPSCoordinate cord) { if (identificador == null) throw new IllegalArgumentException("Identificador no puede ser nulo"); @@ -157,6 +158,8 @@ public class Muelle { /** * Metodo que comprueba si el identificador es correcto (2 digitos) * @param identificador identificador del muelle + * @throws IllegalArgumentException si la altura o la plaza son menores que 1, o si el identificador + * no es correcto */ private void comprobarValoresMuelle(String identificador, int plazas, int altura) { if (plazas<1) throw new IllegalArgumentException("Numero de plazas debe ser 1 o mas"); @@ -167,7 +170,9 @@ public class Muelle { } /** - * + * Metodo que sirve para si un codigo de contenedor es correcto + * @param codigo Codigo del contenedor que se comprueba + * @throws IllegalArgumentException si el codigo es nulo o no corresponde a un codigo correcto */ private void comprobarCodigoContenedor(String codigo) { if (codigo == null) throw new IllegalArgumentException("Codigo no puede ser nulo"); @@ -271,8 +276,9 @@ public class Muelle { * 1.1.11 Metodo para colocar un contenedor en una plaza y apilarlo si es posible * @param codigo Codigo del contenedor que queremos colocar * @param plaza La plaza del contenedor - * @return Error si el contenedor ya esta apilado en ese muelle, si la plaza esta llena o si la plaza - * no pertenece al muelle (una plaza mayor a las que hay o menor a 0) + * @throws IllegalArgumentException si el contenedor es nulo, si la plaza esta fuera de rango, si ese contenedor ya esta apilado + * Si ese contenedor essta en transito, si el contenedor donde se coloca encima no tiene techo o si la plaza + * esta llena */ public void colocarContenedorEnPlaza(Contenedor contenedor, int plaza) { if (contenedor == null) throw new IllegalArgumentException("El Ccontenedor no puede ser nulo"); @@ -306,8 +312,8 @@ public class Muelle { /** * 1.1.12 Metodo que sirve para sacar un contenedor de una Plaza y desapilarlo si es posible * @param contenedor: Contenedor a desapilar de la plaza - * @return True si lo ha despilado, o false si no, ya que ese contenedor o no está en el muelle, o no se encuentra en la - * ultima posicio apilada para poder sacarlo + * @throws IllegalArgumentException si el contenedor es nulo, si no se encuentra apilado en ningun sitio o + * si el contenedor no se encuentra en la ultima posicion (no se podria desapilar) */ public void sacarContenedorDePlaza(Contenedor contenedor) { @@ -335,6 +341,8 @@ public class Muelle { * Metodo que cambia el techo a un contenedor comprobando que este sea el ultimo de la plaza para evitar * problemas, ya que no se puede cambiar el techo a un contenedor que tenga apilado otro encima * @param contenedor Contenedor que se cambia el techo + * @throws IllegalArgumentException si el contenedero es nulo, si el contenedor no se encuentra en la ultima + * plaza (no se puede cambiar el techo) o si el contenedor no se encuentra en el muelle */ public void alternarTechoContenedor(Contenedor contenedor) { if (contenedor == null) throw new IllegalArgumentException("El contenedor no puede ser nulo"); diff --git a/src/es/markse/Puerto.java b/src/es/markse/Puerto.java index 70d26a58c8dd6ef10b4c1fa417ceaab37f7e92f1..833837916d6208629cde3f2094d185ccc85bcc3e 100644 --- a/src/es/markse/Puerto.java +++ b/src/es/markse/Puerto.java @@ -35,6 +35,8 @@ public class Puerto { * Metodo que comprueba si tanto el pais como la ciudad son correctos (2 y 3 letras respectivamente) * @param pais Pais del puerto (2 letras) * @param ciudad Ciudad del puerto(3 letras) + * @throws IllegalArgumentException si el pais o la ciudad no corresponden con sus respectivos formatos o + * cuando son nulos */ private void comprobarIdentificador(String pais, String ciudad) { if (pais == null || ciudad == null) { @@ -49,6 +51,7 @@ public class Puerto { * 1.1.1. Metodo que agrega un nuevo muelle al puerto. Se comprueba que ese muelle no se encuentre ya agregado. * Si no lo esta, lo agrega, si ya se encuentra agregado, no. * @param m objeto tipo Muelle + * @throws IllegalArgumentException si el muelle es nulo */ public boolean anyadirMuelle(Muelle m) { if (m == null) throw new IllegalArgumentException("Muelle no puede ser nulo"); diff --git a/uses/es/markse/ContenedorTest.java b/uses/es/markse/ContenedorTest.java new file mode 100644 index 0000000000000000000000000000000000000000..2dd26f7135ef71310687353c3568cacc1e741efd --- /dev/null +++ b/uses/es/markse/ContenedorTest.java @@ -0,0 +1,158 @@ +/** + * Copyright Universidad de Valladolid 2024/2025 + */ +package es.markse; + +import static org.junit.Assert.*; +import org.junit.Test; + +import es.uva.inf.poo.maps.GPSCoordinate; + +/** + * Implementacon de los Test para la clase Contenedor + * @author victorm + * @author javcalv + */ +public class ContenedorTest { + + @Test + public void testContenedor() { + Contenedor c = new Contenedor("RTF", 'Z', "065432", 100, 400, 1000, false, true); + assertEquals("RTFZ0654328", c.getCodigo()); + assertEquals(100.0f, c.obtenerPesoKilos(), 0.001f); + Contenedor c2 = new Contenedor("ABC", 'U', "123456", 200, 500, 1000, true, true); + assertEquals(500.0f, c2.cargaUtilContenedor(), 0.001f); + Contenedor c3 = new Contenedor("TOO", 'J', "123459", 200, 500, 1000, true, true); + assertEquals(1000f, c3.volumenEnMetrosCubicos(), 0.001f); + + } + + @Test(expected = IllegalArgumentException.class) + public void testContenedorCodigoDuenoNulo(){ + new Contenedor(null, 'U', "123456", 200, 500, 1000, true, true); + } + + @Test(expected = IllegalArgumentException.class) + public void testContenedorCodigoDuenoInvalido(){ + new Contenedor("e34", 'J', "123456", 200, 500, 1000, true, true); + } + + @Test(expected = IllegalArgumentException.class) + public void testContenedorCodigoDuenoTamanyoInvalido(){ + new Contenedor("e34433", 'Z', "123456", 200, 500, 1000, true, true); + } + + @Test(expected = IllegalArgumentException.class) + public void testContenedorEquipamientoInvalido(){ + new Contenedor("e34433", 'R', "123456", 200, 500, 1000, true, true); + } + + @Test(expected = IllegalArgumentException.class) + public void testContenedorEquipamientoInvalido_R(){ + new Contenedor("ABC", 'R', "123456", 200, 500, 1000, true, true); + } + + @Test(expected = IllegalArgumentException.class) + public void testContenedorEquipamientoInvalido_X(){ + new Contenedor("DEF", 'X', "654321", 300, 600, 1200, false, false); + } + + @Test(expected = IllegalArgumentException.class) + public void testContenedorNumeroSerieNulo(){ + new Contenedor("DEF", 'J', null, 300, 600, 1200, false, false); + } + + @Test(expected = IllegalArgumentException.class) + public void testContenedorNumeroSerieLetras(){ + new Contenedor("DEF", 'J', "R450T0", 300, 600, 1200, false, false); + } + + @Test(expected = IllegalArgumentException.class) + public void testContenedorNumeroSerieInvalido(){ + new Contenedor("DEF", 'J', "59392020", 300, 600, 1200, false, false); + } + + @Test(expected = IllegalArgumentException.class) + public void testContenedorTaraMenorA1(){ + new Contenedor("DEF", 'J', "134567", 0, 600, 1200, false, false); + } + + @Test(expected = IllegalArgumentException.class) + public void testContenedorCargaMenorA1(){ + new Contenedor("DEF", 'J', "134567", 100, -4, 1200, false, false); + } + + @Test(expected = IllegalArgumentException.class) + public void testContenedorVolumenMenorA1(){ + new Contenedor("DEF", 'J', "134567", 100, 600, 0.5f, false, false); + } + + @Test + public final void testTieneTecho() { + Contenedor c = new Contenedor("RTF", 'Z', "065432", 100, 400, 1000, false, true); + Contenedor c2 = new Contenedor("ACC", 'Z', "493212", 100, 400, 1000, false, false); + assertTrue(c.tieneTecho()); + assertFalse(c2.tieneTecho()); + } + + @Test + public final void testCambiarEstadoARecogida() { + Contenedor c = new Contenedor("RTF", 'Z', "065432", 100, 400, 1000, true, true); + c.cambiarEstadoARecogida(); + assertTrue(c.estadoRecogida()); + assertFalse(c.estadoTransito()); + Contenedor c2 = new Contenedor("RTT", 'Z', "555432", 100, 400, 1000, false, true); + GPSCoordinate cord = new GPSCoordinate(5d, 5d); + Muelle m = new Muelle("01", cord, true, 2,2); + m.colocarContenedorEnPlaza(c2, 0); + assertFalse(c2.estadoRecogida()); + } + + @Test(expected = IllegalArgumentException.class) + public final void testCambiarEstadoARecogidaContenedorApilado() { + Contenedor c = new Contenedor("RTF", 'Z', "065432", 100, 400, 1000, false, true); + GPSCoordinate cord = new GPSCoordinate(5d, 5d); + Muelle m = new Muelle("01", cord, true, 2,2); + m.colocarContenedorEnPlaza(c, 0); + c.cambiarEstadoARecogida(); + } + + @Test + public final void testCambiarEstadoATransito() { + Contenedor c = new Contenedor("RTT", 'Z', "555432", 100, 400, 1000, false, true); + assertFalse(c.estadoTransito()); + c.cambiarEstadoATransito(); + assertTrue(c.estadoTransito()); + } + + @Test (expected = IllegalArgumentException.class) + public final void testCambiarEstadoATransitoContenedorApilado() { + Contenedor c = new Contenedor("RTF", 'Z', "065432", 100, 400, 1000, false, true); + GPSCoordinate cord = new GPSCoordinate(5d, 5d); + Muelle m = new Muelle("01", cord, true, 2,2); + assertFalse(c.estadoTransito()); + m.colocarContenedorEnPlaza(c, 1); + assertFalse(c.estadoTransito()); + c.cambiarEstadoATransito(); + } + + + @Test + public void testVolumenEnPiesCubicos() { + Contenedor c = new Contenedor("RTF", 'Z', "065432", 100, 400, 1000, false, true); + assertEquals(1000*35.3147f, c.volumenEnPiesCubicos(), 0.001f); + } + + @Test + public void testObtenerPesoLibras() { + Contenedor c = new Contenedor("RTF", 'Z', "065432", 100, 400, 1000, false, true); + assertEquals(100*2.20462f, c.obtenerPesoLibras(), 0.001f); + } + + /* + @Test + public void testAnyadirTrayecto() { + fail("Not yet implemented"); // TODO + } + */ +} diff --git a/uses/es/markse/PuertoTest.java b/uses/es/markse/PuertoTest.java index 281c5630212c4f8f1bc758e0e97e5d60cd6f4495..f2f0c482730b0cc07f10d697a495504adca60c21 100644 --- a/uses/es/markse/PuertoTest.java +++ b/uses/es/markse/PuertoTest.java @@ -62,7 +62,7 @@ public class PuertoTest { @Test(expected = IllegalArgumentException.class) public void testAnyadirMuelleNulo() { Puerto p = new Puerto("ES","BAR"); - assertTrue(p.anyadirMuelle(null)); + p.anyadirMuelle(null); }