Olá.
Tenho o seguinte cenário: Tenho que manter uma lista de alarmes. Na lista, posso inserir vários alarmes (sem necessidade de ordem). A ideia é manter o alarme na lista, até que eu mande tirar de lá. O lista de alarme de diz se devo ascender o led do alarme (caso a lista não esteja vazia).
Mas tenho que manter 4 listas dessa. Porque são 4 níveis de Alarme, sendo assim cada lista identificada pelo nível do alarme (Inteiro).
Pensei no seguinte código, mas não sei se é o melhor “aproach” para isso.
Versão enxuta do código (Sim, eu sei que cada objeto terá a sua lista, isso é apenas um exemplo. Provavelmente essa classe será singleton, mas isso é algo pra pensar depois)
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class AlarmLedsMap {
public static int CRITICAL = 0;
public static int MAJOR = 1;
public static int MINOR = 2;
public static int WARNING = 3;
private Set<Integer> criticalLedSet = new HashSet<Integer>();
private Set<Integer> majorLedSet = new HashSet<Integer>();
private Set<Integer> minorLedSet = new HashSet<Integer>();
private Set<Integer> warningLedSet = new HashSet<Integer>();
private Map<Integer,Set><Integer>> ledsMap = new HashMap<Integer,Set><Integer>>();
public AlarmLedsMap(){
ledsMap.put(AlarmLedsMap.CRITICAL, criticalLedSet);
ledsMap.put(AlarmLedsMap.MAJOR, majorLedSet);
ledsMap.put(AlarmLedsMap.MINOR, minorLedSet);
ledsMap.put(AlarmLedsMap.WARNING, warningLedSet);
}
public void addAlarm(Alarm alarm){
ledsMap.get(alarm.getSeverity()).add(alarm.getId());
ControlLeds();
}
public void removeAlarm(Alarm alarm){
ledsMap.get(alarm.getSeverity()).remove(alarm.getId());
ControlLeds();
}
public void removeAlarms(int severity){
ledsMap.get(severity).removeAll(ledsMap.get(severity));
}
public void removeAllAlarms(){
for(Set<Integer> list : ledsMap.values()){
list.removeAll(list);
}
ControlLeds();
}
private void ControlLeds(){
Set<Integer> keys = ledsMap.keySet();
for(int severity : keys){
if(ledsMap.get(severity).isEmpty()){
//Turn LedsOff
}else{
//Turn LedsOn
}
}
}
}
E o bean de alarme:
public class Alarm{
private int id;
private int severity;
Alarm(int level, int fiberId){
this.id = fiberId;
this.severity = level;
}
public int getSeverity(){
return this.severity;
}
public int getId(){
return this.id;
}
}