Skip to content

Commit

Permalink
feat(tipo): tipo by clima and categoria
Browse files Browse the repository at this point in the history
  • Loading branch information
tomasanchez committed May 21, 2021
1 parent 5f6f677 commit 1e85d65
Showing 1 changed file with 72 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import quemepongo.model.clima.Clima;
import quemepongo.model.material.TipoMaterial;

/**
Expand Down Expand Up @@ -48,20 +50,26 @@ public enum TipoPrenda {
ZAPATILLAS(Categoria.CALZADO, "CUERO");

/**
*
* La categoria a la que ese tipo de prenda pertenece.
*
*
* @since 1.0
*/
private Categoria categoria;

/**
* El clima para el cual está pensado la prenda.
*
* @since Iteración IV
*/
private Clima clima;

/**
* Listado de materiales admitidos por el tipo de prenda.
*
* @since 3.0
*/
private List<TipoMaterial> materiales;
private List<TipoMaterial> materiales = new ArrayList<TipoMaterial>();

/**
* Tipos de prenda.
Expand All @@ -73,23 +81,57 @@ public enum TipoPrenda {
this(cat, cat.equals(Categoria.CALZADO) ? "" : "ALGODON");
}

/**
* Prenda con Categoria y Clima.
*
* @param cat la categoria a la que pertenece
* @param clima el clima para el cual es apto
* @since Iteración IV
*/
TipoPrenda(Categoria cat, Clima clima) {
this(cat, cat.equals(Categoria.CALZADO) ? "" : "ALGODON", clima);
}

/**
* Tipo de prenda que admite materiales.
*
* @param categoria la categoria del tipo de prenda
* @param materiales los materiales que admite
*/
TipoPrenda(Categoria categoria, String materiales) {
this(categoria, materiales, null);
}

/**
* Tipo de prendas que admite clima y materiales.
*
* @param categoria La categoría a la que pertenece
* @param materiales los materiales que soporta
* @param clima el clima para el cual es apta.
* @since Iteración IV
*/
TipoPrenda(Categoria categoria, String materiales, Clima clima) {
this.categoria = categoria;
String[] materialesAdmitidos = materiales.split(",");

this.materiales = new ArrayList<TipoMaterial>();
agregarMateriales(materiales);
this.clima = clima;
}

/**
* Agrega un string de materiales a la lista.
*
* @param materiales los materiales compatibles
* @since Iteración IV
*/
private void agregarMateriales(String mts) {
String[] materialesAdmitidos = mts.split(",");
Arrays.stream(materialesAdmitidos).map(str -> TipoMaterial.valueOf(str))
.forEach(material -> this.materiales.add(material));
}

private boolean esDeCategoria(Categoria cat) {
return this.categoria.equals(cat);
}

/**
* Determina una categoría de acuerdo al tipo.
*
Expand All @@ -109,4 +151,29 @@ public Categoria categoria() {
public boolean admiteMaterial(TipoMaterial material) {
return materiales.stream().anyMatch(admitido -> admitido.equals(material));
}

/**
* Verifica si un tipo es apto para el clima.
*
* @param clim el clima a contrastar
* @return si es apto para ese clima
* @since Iteración IV
*/
public boolean aptoClima(Clima clim) {
return Objects.isNull(this.clima) || this.clima.equals(clim);
}

/**
* Obtiene un tipo de prenda al azar, que cumpla con categoria y clima.
*
* @param categoria la categoria de la prenda
* @param clima el clima para el cual utilizar la prenda
* @return un Tipo de Prenda que cumple
* @since Iteración IV
*/
public static TipoPrenda getTipoByCategoriaYClima(Categoria categoria, Clima clima) {
return Arrays.stream(TipoPrenda.values()).filter(t -> t.esDeCategoria(categoria))
.filter(t -> t.aptoClima(clima)).findAny().get();
}

}

0 comments on commit 1e85d65

Please sign in to comment.