diff --git a/src/es/markse/Contenedor.java b/src/es/markse/Contenedor.java index 90b0c17943a6e7b141905d29991ed2c13bdea6b2..83322f170d4a87ead6640c89da8cf6dc53182253 100644 --- a/src/es/markse/Contenedor.java +++ b/src/es/markse/Contenedor.java @@ -16,9 +16,10 @@ public class Contenedor { private float pesoTara; private float maximaCargaUtil; private float volumen; - private boolean transito; private boolean techo; private List<Trayecto> trayectos = new ArrayList<>(); + private boolean recogida = false; + private boolean transito = false; /** * Constructor del Objeto Contenedor @@ -119,6 +120,7 @@ public class Contenedor { * 1.1.13 Metodo que sirve para cambiar el estado a recogida de un contenedor */ public void cambiarEstadoARecogida() { + this.recogida = true; this.transito = false; } @@ -127,6 +129,7 @@ public class Contenedor { */ public void cambiarEstadoATransito() { this.transito = true; + this.recogida = false; } /** @@ -177,4 +180,29 @@ public class Contenedor { this.trayectos.add(t); } + /** + * Metodo que devuelve la maxima carga util de un contenedor + * @return La maxima carga util de un contenedor + */ + public float cargaUtilContenedor() { + return this.maximaCargaUtil; + } + + /** + * Metodo que devuelve el estado de recogida de un contenedor + * @return estado de recogida de un contenedor + */ + public boolean estadoRecogida() { + return this.recogida; + } + + /** + * Metodo que devuelve el estado de transito de un contenedor + * @return estado de transito de un contenedor + */ + public boolean estadoTransito() { + return this.transito; + } + + //REALIZAR EL METODO PARA CALCULAR LOS TRAYECTOS } \ No newline at end of file diff --git a/src/es/markse/Muelle.java b/src/es/markse/Muelle.java index 5ab892942979d17efc1e3a2495070ea74598d43b..96a24cd9cd41b406c4130ac07c5466ab5fd20558 100644 --- a/src/es/markse/Muelle.java +++ b/src/es/markse/Muelle.java @@ -14,6 +14,7 @@ import es.uva.inf.poo.maps.GPSCoordinate; * @author victorm */ public class Muelle { + private Plaza[] plazas; private String identificador; private boolean operativo; @@ -144,6 +145,11 @@ 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) + */ private void comprobarValoresNulos(String identificador, GPSCoordinate cord) { if (identificador == null) throw new IllegalArgumentException("Identificador no puede ser nulo"); if (cord == null) throw new IllegalArgumentException("Identificador no puede ser nulo"); @@ -161,6 +167,14 @@ public class Muelle { } } + /** + * + */ + private void comprobarCodigoContenedor(String codigo) { + if (codigo == null) throw new IllegalArgumentException("Codigo no puede ser nulo"); + if (!codigo.matches("[A-Z]{4}\\d{7}")) throw new IllegalArgumentException("El codigo no pertenece a un codigo de contenedor"); + } + /** * Metodo que devuelve el identificador de un muelle. Este identificador sera de 2 digitos. * @return identificador del muelle @@ -229,6 +243,7 @@ public class Muelle { * @return la plaza del contenedor o -1 si no se encuentra en ninguna plaza */ public int plazaActual(String codigo) { + this.comprobarCodigoContenedor(codigo); for (int i = 0; i < this.plazas.length; i++) { if (this.plazas[i].numeroContenedores() != 0 && this.plazas[i].contieneContenedor(codigo)) { return i; @@ -244,6 +259,7 @@ public class Muelle { * @return el nivel en el que se encuentra el contenedor o -1 si no se encuentra */ public int nivelEnPlaza(String codigo) { + this.comprobarCodigoContenedor(codigo); for (Plaza plaza : this.plazas) { if (plaza.numeroContenedores() != 0 && plaza.contieneContenedor(codigo)) { return plaza.nivelContenedor(codigo); @@ -253,13 +269,17 @@ public class Muelle { } /** - * Metodo para colocar un contenedor en una plaza y apilarlo si es posible + * 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) */ public void colocarContenedorEnPlaza(Contenedor contenedor, int plaza) { + if (contenedor == null) throw new IllegalArgumentException("El Ccontenedor no puede ser nulo"); + if (plaza < 0 || plaza > this.numeroDePlazasTotales()) throw new + IllegalArgumentException("La plaza debe de estar entre 0-"+ (this.plazas.length -1)); + Contenedor ultimo = this.plazas[plaza].ultimoContenedor(); // Verificar si hay un último contenedor y si tiene techo boolean teniaTecho = (ultimo != null && ultimo.tieneTecho()); @@ -269,6 +289,8 @@ public class Muelle { this.actualizarPlazas(plazasAntes, plazasDespues, this.plazas[plaza], teniaTecho); } else { + if (!this.plazas[plaza].ultimoContenedor().tieneTecho()) + throw new IllegalArgumentException("El contenedor no tiene techo"); throw new IllegalArgumentException("La plaza está llena"); } } @@ -281,6 +303,7 @@ public class Muelle { */ public void sacarContenedorDePlaza(Contenedor contenedor) { + if (contenedor == null) throw new IllegalArgumentException("El Ccontenedor no puede ser nulo"); for (Plaza plaza : this.plazas) { if (plaza.numeroContenedores() != 0 && plaza.estaEnUltimoNivel(contenedor.getCodigo())) { int plazasAntes = plaza.numeroContenedores(); @@ -298,25 +321,35 @@ public class Muelle { * @param contenedor Contenedor que se cambia el techo */ public void alternarTechoContenedor(Contenedor contenedor) { + if (contenedor == null) throw new IllegalArgumentException("El contenedor no puede ser nulo"); String codigo = contenedor.getCodigo(); + boolean encontrado = false; for (Plaza plaza: this.plazas) { - //Si el contenedor esta en el ultimo nivel de una plaza se puede cambiar el techo - if (plaza.contieneContenedor(codigo) && plaza.estaEnUltimoNivel(codigo)) { - plaza.ultimoContenedor().alternarTecho(); - //Si la cantidad de contenedores es menor a la altura, hay cambios en el numero de plazas - if (plaza.numeroContenedores() < plaza.altura()) { - //Si ahora tiene techo, las llenas son uno mas y semillenas uno menos - if (plaza.ultimoContenedor().tieneTecho()) { - this.plazasLlenas--; - this.plazasSemillenas++; - } - //Si ahora no lo tiene, las llenas son una mas y semillenas uno menos - else { - this.plazasLlenas++; this.plazasSemillenas--; + if (plaza.contieneContenedor(codigo)) { + encontrado = true; + //Si el contenedor esta en el ultimo nivel de una plaza se puede cambiar el techo + if (plaza.estaEnUltimoNivel(codigo)) { + plaza.ultimoContenedor().alternarTecho(); + //Si la cantidad de contenedores es menor a la altura, hay cambios en el numero de plazas + if (plaza.numeroContenedores() < plaza.altura()) { + //Si ahora tiene techo, las llenas son uno mas y semillenas uno menos + if (plaza.ultimoContenedor().tieneTecho()) { + this.plazasLlenas--; + this.plazasSemillenas++; + } + //Si ahora no lo tiene, las llenas son una mas y semillenas uno menos + else { + this.plazasLlenas++; this.plazasSemillenas--; + } } } + //No se encuentra en la ultima plaza + else { + throw new IllegalArgumentException("El contenedor no esta en la ultima plaza (no se puede cambiar el techo"); + } } } + if(!encontrado) throw new IllegalArgumentException("No se en cuentra el contenedor"); } /** diff --git a/src/es/markse/Puerto.java b/src/es/markse/Puerto.java index 406121f13b442116b5e21ba5c2667a7de168fe58..70d26a58c8dd6ef10b4c1fa417ceaab37f7e92f1 100644 --- a/src/es/markse/Puerto.java +++ b/src/es/markse/Puerto.java @@ -151,38 +151,7 @@ public class Puerto { } } return cercanos.toArray(new Muelle[0]); - } - - /** - * 1.1.11 Metodo que almacena un Contenedor en el Muelle (Comprueba que ese contenedor no este en - * un puerto) - * @param m Muelle donde se almacena el contenedor - * @param c Contenedor a almacenar - * @param plaza Plaza donde se apilara el contenedor - * @return - */ - - public void colocarContenedorEnMuelle(Muelle m, Contenedor c, int plaza) { - if (m == null) throw new IllegalArgumentException("El Muelle no puede ser nulo"); - if (c == null) throw new IllegalArgumentException("El Contenedor no puede ser nulo"); - // Verificar si el muelle m está en la lista de muelles del puerto - if (!this.muelles.contains(m)) { - throw new IllegalArgumentException("El muelle no está en el puerto."); - } - // Comprobamos si la plaza está fuera del rango - if (plaza < 0 || plaza >= m.numeroDePlazasTotales()) { - throw new IllegalArgumentException("La plaza está fuera del rango de las plazas del muelle. 0 - " + (m.numeroDePlazasTotales() - 1)); - } - // Comprobamos si ese contenedor ya está apilado en algún muelle - for (Muelle muelle : this.muelles) { - if (muelle.plazaActual(c.getCodigo()) != -1) { - throw new IllegalArgumentException("El contenedor ya está apilado en un muelle."); - } - } - // Si todas las verificaciones anteriores pasan, colocamos el contenedor en la plaza especificada - m.colocarContenedorEnPlaza(c, plaza); - } - + } /** * Metodo que devuelve el pais del puerto * @return pais del perto diff --git a/uses/es/markse/MuelleTest.java b/uses/es/markse/MuelleTest.java index d130945f2d9c3d75666d93e795d906f0a1071e25..5d0ce309eb9505be3405e0ed142c7138a859a01d 100644 --- a/uses/es/markse/MuelleTest.java +++ b/uses/es/markse/MuelleTest.java @@ -9,14 +9,14 @@ import es.uva.inf.poo.maps.GPSCoordinate; /** * Realizacion de los Test de la Clase Muelle. Esta clase gestiona la propia clase Plaza, por lo que - * en la realizacion de estos test se probaran los funcionamientos de los metodos de la clase Plaza. + * en la realizacion de estos test se probaran los funcionamientos de los metodos de la clase Plaza + * indirectamente. * @author javcalv * @author victorm */ public class MuelleTest { - @Test public final void testMuelle() { GPSCoordinate cord = new GPSCoordinate(5d, 5d); @@ -90,37 +90,119 @@ public class MuelleTest { assertEquals(2,m.numeroDePlazasTotales()); } - /* + @Test public final void testPlazasVacias() { - fail("Not yet implemented"); // TODO + Puerto p = new Puerto("ES","BAR"); + GPSCoordinate cord = new GPSCoordinate(5d, 5d); + Muelle m = new Muelle("01", cord, true, 2,1); + p.anyadirMuelle(m); + assertEquals(2, m.plazasVacias()); + Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true); + Contenedor c2 = new Contenedor("TRR", 'J', "056731", 100, 400, 500, false, true); + m.colocarContenedorEnPlaza(c, 0); + assertEquals(1, m.plazasVacias()); + m.colocarContenedorEnPlaza(c2, 1); + assertEquals(0, m.plazasVacias()); + m.sacarContenedorDePlaza(c2); + assertEquals(1, m.plazasVacias()); } - + @Test public final void testPlazasLlenas() { - fail("Not yet implemented"); // TODO + Puerto p = new Puerto("ES","BAR"); + GPSCoordinate cord = new GPSCoordinate(5d, 5d); + Muelle m = new Muelle("01", cord, true, 1,2); + p.anyadirMuelle(m); + assertEquals(0, m.plazasLlenas()); + Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true); + m.colocarContenedorEnPlaza(c, 0); + assertEquals(0, m.plazasLlenas()); + m.alternarTechoContenedor(c); + assertEquals(1, m.plazasLlenas()); } - + @Test public final void testPlazasSemillenas() { - fail("Not yet implemented"); // TODO + Puerto p = new Puerto("ES","BAR"); + GPSCoordinate cord = new GPSCoordinate(5d, 5d); + Muelle m = new Muelle("01", cord, true, 1,2); + p.anyadirMuelle(m); + assertEquals(0, m.plazasSemillenas()); + Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true); + Contenedor c2 = new Contenedor("TRR", 'J', "056731", 100, 400, 500, false, true); + m.colocarContenedorEnPlaza(c, 0); + assertEquals(1, m.plazasSemillenas()); + m.alternarTechoContenedor(c); + assertEquals(0, m.plazasSemillenas()); + m.alternarTechoContenedor(c); + assertEquals(1, m.plazasSemillenas()); + m.colocarContenedorEnPlaza(c2, 0); + assertEquals(0, m.plazasSemillenas()); } - + @Test public final void testPlazaActual() { - fail("Not yet implemented"); // TODO + Puerto p = new Puerto("ES","BAR"); + GPSCoordinate cord = new GPSCoordinate(5d, 5d); + Muelle m = new Muelle("01", cord, true, 10,2); + p.anyadirMuelle(m); + Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true); + m.colocarContenedorEnPlaza(c, 4); + assertEquals(4, m.plazaActual(c.getCodigo())); + assertEquals(-1, m.plazaActual("RUTJ0438521")); } - + + @Test(expected = IllegalArgumentException.class) + public final void testPlazaActualCodigoInvalido() { + GPSCoordinate cord = new GPSCoordinate(5d, 5d); + Muelle m = new Muelle("01", cord, true, 10,2); + m.plazaActual("HOLA"); + } + + @Test(expected = IllegalArgumentException.class) + public final void testPlazaActualCodigoNulo() { + GPSCoordinate cord = new GPSCoordinate(5d, 5d); + Muelle m = new Muelle("01", cord, true, 10,2); + m.plazaActual(null); + } + + @Test public final void testNivelEnPlaza() { - fail("Not yet implemented"); // TODO + Puerto p = new Puerto("ES","BAR"); + GPSCoordinate cord = new GPSCoordinate(5d, 5d); + Muelle m = new Muelle("01", cord, true, 10,2); + p.anyadirMuelle(m); + Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true); + Contenedor c2 = new Contenedor("ZEX", 'Z', "666731", 100, 400, 500, false, true); + m.colocarContenedorEnPlaza(c, 4); + m.colocarContenedorEnPlaza(c2, 4); + assertEquals(1, m.nivelEnPlaza(c.getCodigo())); + assertEquals(2, m.nivelEnPlaza(c2.getCodigo())); + assertEquals(-1, m.nivelEnPlaza("RUTJ0438521")); } - + + @Test(expected = IllegalArgumentException.class) + public final void testNivelEnPlazaCodigoInvalido() { + GPSCoordinate cord = new GPSCoordinate(5d, 5d); + Muelle m = new Muelle("01", cord, true, 10,2); + m.nivelEnPlaza("HOLA"); + } + + @Test(expected = IllegalArgumentException.class) + public final void testNivelEnPlazaCodigoNulo() { + GPSCoordinate cord = new GPSCoordinate(5d, 5d); + Muelle m = new Muelle("01", cord, true, 10,2); + m.nivelEnPlaza(null); + } + + /* @Test public final void testColocarContenedorEnPlaza() { - fail("Not yet implemented"); // TODO } + @Test public final void testSacarContenedorDePlaza() { fail("Not yet implemented"); // TODO diff --git a/uses/es/markse/PuertoTest.java b/uses/es/markse/PuertoTest.java index 0109de9a509b4076548e20dea6bedac12de52a39..281c5630212c4f8f1bc758e0e97e5d60cd6f4495 100644 --- a/uses/es/markse/PuertoTest.java +++ b/uses/es/markse/PuertoTest.java @@ -115,9 +115,9 @@ public class PuertoTest { Contenedor c11 = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true); Contenedor c21 = new Contenedor("RTZ", 'Z', "569026", 100, 400, 500, false, true); Contenedor c22 = new Contenedor("WCD", 'Z', "432012", 100, 400, 500, false, true); - p.colocarContenedorEnMuelle(m1, c11, 0); - p.colocarContenedorEnMuelle(m2, c21, 0); - p.colocarContenedorEnMuelle(m2, c22, 1); + m1.colocarContenedorEnPlaza(c11, 0); + m2.colocarContenedorEnPlaza(c21, 0); + m2.colocarContenedorEnPlaza(c22, 1); assertTrue(p.comprobarSiEstaLleno()); } @@ -132,8 +132,8 @@ public class PuertoTest { p.anyadirMuelle(m2); Contenedor c11 = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true); Contenedor c21 = new Contenedor("RTZ", 'Z', "569026", 100, 400, 500, false, true); - p.colocarContenedorEnMuelle(m1, c11, 0); - p.colocarContenedorEnMuelle(m2, c21, 0); + m1.colocarContenedorEnPlaza(c11, 0); + m2.colocarContenedorEnPlaza(c21, 0); assertFalse(p.comprobarSiEstaLleno()); } @@ -163,7 +163,7 @@ public class PuertoTest { Muelle[] muellesEsperados = {m1}; assertArrayEquals(muellesEsperados, p.muellesConEspacio()); Contenedor c11 = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true); - p.colocarContenedorEnMuelle(m1, c11, 0); + m1.colocarContenedorEnPlaza(c11, 0); assertEquals(0, p.muellesConEspacio().length); } @@ -190,85 +190,4 @@ public class PuertoTest { Puerto p = new Puerto("ES","BAR"); p.muellesCercanoAPunto(null); } - - @Test - public void testColocarContenedorEnMuelle() { - Puerto p = new Puerto("ES","BAR"); - GPSCoordinate cord1 = new GPSCoordinate(10d, 10d); - Muelle m1 = new Muelle("01", cord1, true, 1, 1); - p.anyadirMuelle(m1); - Contenedor c11 = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true); - p.colocarContenedorEnMuelle(m1, c11, 0); - assertEquals(1, m1.plazasLlenas()); - assertEquals(0, m1.plazasVacias()); - assertEquals(0, m1.plazasSemillenas()); - } - - @Test(expected = IllegalArgumentException.class) - public void testColocarContenedorEnMuelleMuelleVacio() { - Puerto p = new Puerto("ES","BAR"); - Contenedor c11 = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true); - p.colocarContenedorEnMuelle(null, c11, 0); - } - - @Test(expected = IllegalArgumentException.class) - public void testColocarContenedorEnMuelleContenedorVacio() { - Puerto p = new Puerto("ES","BAR"); - GPSCoordinate cord1 = new GPSCoordinate(10d, 10d); - Muelle m1 = new Muelle("01", cord1, true, 1, 1); - p.anyadirMuelle(m1); - p.colocarContenedorEnMuelle(m1, null, 0); - } - - @Test(expected = IllegalArgumentException.class) - public void testColocarContenedorEnMuelleQueNoEstaEnPuerto() { - Puerto p = new Puerto("ES","BAR"); - GPSCoordinate cord1 = new GPSCoordinate(10d, 10d); - Muelle m1 = new Muelle("01", cord1, true, 1, 1); - Contenedor c11 = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true); - p.colocarContenedorEnMuelle(m1, c11, 0); - } - - @Test(expected = IllegalArgumentException.class) - public void testColocarContenedorEnMuelleConPlazaFueraDeRangoPorArriba(){ - Puerto p = new Puerto("ES","BAR"); - GPSCoordinate cord1 = new GPSCoordinate(10d, 10d); - Muelle m1 = new Muelle("01", cord1, true, 1, 1); - p.anyadirMuelle(m1); - Contenedor c11 = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true); - p.colocarContenedorEnMuelle(m1, c11, 1); - } - - @Test(expected = IllegalArgumentException.class) - public void testColocarContenedorEnMuelleConPlazaFueraDeRangoPorAbajo(){ - Puerto p = new Puerto("ES","BAR"); - GPSCoordinate cord1 = new GPSCoordinate(10d, 10d); - Muelle m1 = new Muelle("01", cord1, true, 1, 1); - p.anyadirMuelle(m1); - Contenedor c11 = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true); - p.colocarContenedorEnMuelle(m1, c11, -1); - } - - @Test(expected = IllegalArgumentException.class) - public void testColocarContenedorEnMuelleYaApilado() { - Puerto p = new Puerto("ES","BAR"); - GPSCoordinate cord1 = new GPSCoordinate(10d, 10d); - Muelle m1 = new Muelle("01", cord1, true, 1, 1); - p.anyadirMuelle(m1); - Contenedor c11 = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true); - p.colocarContenedorEnMuelle(m1, c11, 0); - p.colocarContenedorEnMuelle(m1, c11, 0); - } - - @Test(expected = IllegalArgumentException.class) - public void testColocarContenedorEnMuelleLleno() { - Puerto p = new Puerto("ES","BAR"); - GPSCoordinate cord1 = new GPSCoordinate(10d, 10d); - Muelle m1 = new Muelle("01", cord1, true, 1, 1); - p.anyadirMuelle(m1); - Contenedor c11 = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true); - Contenedor c12 = new Contenedor("RTA", 'J', "056731", 100, 400, 500, false, true); - p.colocarContenedorEnMuelle(m1, c11, 0); - p.colocarContenedorEnMuelle(m1, c12, 0); - } } \ No newline at end of file