Está en la página 1de 15

P1

public class VentanaResultados {...


private void initialize() {...
JButton btnPacientesEnUci = new JButton("Pacientes en UCI");
btnPacientesEnUci.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
LocalDate fe = LocalDate.parse(tf_fechaentrada.getText());
LocalDate fs = LocalDate.parse(tf_fechasalida.getText());
long count = 0;
for (AreaSanitaria area:
RepoAreasSanitarias.INSTANCE.findAllAreas())
for (Hospital ho: area.getHospitales())
for (PacienteCovid19 pac: ho.getPacientesCovid())
if ((pac.getEstado().equals(Estado.UCI)) &&
(fe.isBefore(pac.getFechaAltaUCI()) ||
fe.isEqual(pac.getFechaAltaUCI())) &&
(fs.isAfter(pac.getFechaBajaUCI()) ||
fs.isEqual(pac.getFechaBajaUCI())))
count = count+1;
textArea.setText(String.valueOf(count));
public class VentanaResultados {..
private void initialize() {..
textArea.setText(String.valueOf(
ControladorCovid19.INSTANCE.getTotalPacUCI(fe,fs)));
}
public enum ControladorCovid19 {
INSTANCE;
public int getTotalPacUCI(LocalDate fe, LocalDate fs)
return RepositorioAreasSanitarias.INSTANCE.
getTotalPacUCI(fe,fs);
}
}
public class AreaSanitaria {
public int getTotalPacUCI(LocalDate fe, LocalDate fs) {
int count = 0;
for (Hospital ho: this.getHospitales())
count = count + ho.getTotalPacUCI(fe,fs);
return count;
}
}
public enum RepoAreasSanitarias {..
INSTANCE;
public int getTotalPacUCI(LocalDate fe, LocalDate fs) {
int count=0;
for (AreaSanitaria area: this.findAllAreas()
count=count + area.getTotalPacUCI(fe,fs);
return count;
}
}

public class Hospital {


public int getTotalPacUCI(LocalDate fe, LocalDate fs) {..
int count = 0;
for (PacienteCovid19 pac : this.getPacientesCovid())
if (pac.isUCI(fe,fs)) count=count+1;
return count;
}
}
public class PacienteCovid19 {..
public boolean isUCI(LocalDate fe, LocalDate fs) {
return ((this.getEstado().equals(Estado.UCI)) &
(fe.isBefore(this.getFechaAltaUCI())
|| fe.isEqual(this.getFechaAltaUCI()) ) &
..
}
}
long count = 0;
2a for (AreaSanitaria area: RepoAreasSanitarias.INSTANCE.findAllAreas())
for (Hospital ho: area.getHospitales())
for (PacienteCovid19 pac: ho.getPacientesCovid())
if ((pac.getEstado().equals(Estado.UCI)) &&
(fe.isBefore(pac.getFechaAltaUCI()) ||
fe.isEqual(pac.getFechaAltaUCI())) &&
(fs.isAfter(pac.getFechaBajaUCI()) ||
fs.isEqual(pac.getFechaBajaUCI())))
count = count+1;
textArea.setText(String.valueOf(count));

public long findTotalPacsUCI(LocalDate fe, LocalDate fs) {


return RepoAreasSanitarias.INSTANCE.findAllAreas().stream()
.flatMap(area -> area.getHospitales().stream())
.flatMap(hos -> hos.getPacientesCovid().stream())
.filter(pac -> pac.isUCI(fe,fs))
.count();
}
2b
Supuesto un método getNumDiasUCI() en la clase PacienteCovid19 que retorna el número
de días en UCI de un paciente en los últimos 7 días, escribe el método public List<String>
findHospitalesNoUCIUltSemana() que retorna una lista con los nombres de hospitales que
no han tenido ningún enfermo en UCI en la última semana y que está ordenada alfabéticamente.

public List<String> findHospitalesNoUCIUltSemana(){


return (this.areas.values()).stream()
.flatMap(a ->a.getHospitales().stream())
.filter(h -> h.getPacientesCovid().stream()
.noneMatch(p -> p.getNumDiasUCI() > 0))
.map(Hospital::getNombre)
.sorted()
.collect(toList());
}
3a
3b public interface IRastreo {..
List<SPublico> getServiciosPublicos (String numeroMovil);
List<Contacto> getContactos(String numeroMovil);
}
3b
public final class ContactListing {...
private IRastreo inforastreo;
public ContactListing (String nombreAPIRastreo) {
inforastreo = FactoriaRastreo.INSTANCE.getRastreo(nombreAPIRastreo);
}
public List<String> getDNIContactosMismaCiudad(PacienteCovid19 paCovid) {
List<String> dnis = new ArrayList<>();
for (Contacto co: inforastreo.getContactos(paCovid.getMovil()))
if (co.getCiudad().equals(paCovid.getCiudad()))
dnis.add(co.getDNI());
return dnis;
}
}

public enum FactoriaRastreo {


INSTANCE;
public IRastreo getRastreo (String nombreAPI) {
try{
Class<?>.forName(nombreAPI)
.getDeclaredConstructor().newInstance()
} catch (Exception e) {

}
}
4
public final class ContactListing {...
private Supplier<IRastreo> inforastreo;
public ContactListing (Ssupplier<IRastreo> supplierRastreo) {
inforastreo = supplierRastreo;
}
public List<String> getDNIContactosMismaCiudad(PacienteCovid19 paCovid) {
List<String> dnis = new ArrayList<>();
for (Contacto co: inforastreo.get().getContactos(paCovid.getMovil()))
if (co.getCiudad().equals(paCovid.getCiudad()))
dnis.add(co.getDNI());
return dnis;
}
}

Supplier<IRastreo> imptracing = () -> new Imp4TracingCovid19();

ContactListing cl = new ContactListing(imptracing);

cl. getDNIContactosMismaCiudad(unPaciente)
5a public List<String> getDNIContactosMismaCiudad(PacienteCovid19 paCovid){
return inforastreo.getContactos(paCovid.getMovil()).stream()
.filter(co -> co.getCiudad().equals(paCovid.getCiudad()))
.map (co-> co.getDNI())
.distinct()
.collect(Collectors.toList())
}

5b public class Iterador<T> {


List<T> col;
public Iterador(List<T> c) {
col = c;
}
public void doIf(Predicate<T> p, Consumer<T> c){
for (T o: col)
if (p.test(o)) c.accept(o);
}
}
5c
public final class ContactListing {...
private List<String> dnis = new ArrayList<>();

public List<String> getDNIContactosMismaCiudad(PacienteCovid19 paCovid){


Iterator<Contacto> it = new Iterator<Contacto>(
inforastreo.getContactos(paCovid.getMovil());
Predicate<Contacto> cond = co ->
co.getCiudad().equals(paCovid.getCiudad()))
Consumer<Contacto> action = co -> dnis.add(co.getDNI())
it.doIf(cond,action);
return dnis;
}
6

public class NuevoIngresoCoronavirus {...


public void ingresoHospital(Coronavirus co) {
Tratamiento tr = co.crearTratamiento();
tratamiento.iniciar(); }
}
}
7

Decorador
8a
public class InfoCovidCS implements Serializable {..
private double numContagios;
private String nombre;
private ArrayList<NumContagiosListener> numContagiosListener =
new ArrayList<NumContagiosListener>();
public synchronized void addNumContagiosListener(
NumContagiosListener listener){
numContagiosListeners.add(listener);
}
// igual remove listener
public InfoCovidCS() {}
public double getNumContagios() {
return numContagios;
}
public void setNumContagios(double nuevoNumero) {
int oldNumero = this.numContagios;
this. numContagios = nuevoNumero;
if (oldNumero != nuevoNumero) {
NumContagiosEvent ev = new NumContagiosEvent (oldNumero,
nuevoNumero);
notificarCambio(ev);

}
private void notificarCambio(NumContagiosEvent ev){…}
}
8a public class InfoCovidCS implements Serializable{..
private void notificarCambio(NumContagiosEvent ev){
ArrayList<NumContagiosListener> lista;
synchronized(this){
lista=(ArrayList<NumContagiosListener>)
numContagiosListener.clone();
}
for (NumContagiosListener ncl : lista)
ncl.nuevoNumeroContagios(ev);
}
public class NumContagiosEvent extends EventObject {
protected int oldNumContagios, numContagios;
public NumContagiosEvent(Object source, int old, int new) {
super(source);
this.numContagios =new;
this.oldNumContagios = old;
}
public int getNumContagios() { return numContagios;}
public int getOldNumContagios(){ return oldNumContagios;}
}

public interface NumContagiosListener extends EventListener {


public void nuevoNumeroContagios(NumContagiosEvent e);
}

También podría gustarte