StatoViolazioniPolicy.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.core.controllo_traffico.beans;
import java.util.ArrayList;
import java.util.List;
/**
* StatoViolazioniPolicy
*
* @author Andrea Poli (poli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class StatoViolazioniPolicy {
private List<String> violazioni = new ArrayList<>();
private List<String> violazioniWarningOnly = new ArrayList<>();
private static String RAGGRUPPAMENTO_DISABILITATO = "*";
private static String SEPARATOR_VIOLAZIONE = "\n- ";
private static String SEPARATOR_TRA_VIOLATE_E_WARNING = "\n\n";
private static String WARN = "in modalità WarningOnly";
public StatoViolazioniPolicy(String statoAttuale) {
if(statoAttuale==null) {
return;
}
String violate = null;
String violateWarningOnly = null;
if(statoAttuale.contains(SEPARATOR_TRA_VIOLATE_E_WARNING)) {
String [] tmp = statoAttuale.split(SEPARATOR_TRA_VIOLATE_E_WARNING);
for (int i = 0; i < tmp.length; i++) {
String entry = tmp[i];
if(entry.contains(WARN)) {
violateWarningOnly = entry;
}
else {
violate = entry;
}
}
}
else {
if(statoAttuale.contains(WARN)) {
violateWarningOnly = statoAttuale;
}
else {
violate = statoAttuale;
}
}
if(violate!=null) {
if(violate.contains(SEPARATOR_VIOLAZIONE)) {
String [] tmp = statoAttuale.split(SEPARATOR_VIOLAZIONE);
if(tmp!=null && tmp.length>1) {
// la prima riga e' l'intestazione
for (int i = 1; i < tmp.length; i++) {
String entry = tmp[i];
this.violazioni.add(entry);
}
}
}
else {
this.violazioni.add(violate);
}
}
if(violateWarningOnly!=null) {
if(violateWarningOnly.contains(SEPARATOR_VIOLAZIONE)) {
String [] tmp = statoAttuale.split(SEPARATOR_VIOLAZIONE);
if(tmp!=null && tmp.length>1) {
// la prima riga e' l'intestazione
for (int i = 1; i < tmp.length; i++) {
String entry = tmp[i];
this.violazioniWarningOnly.add(entry);
}
}
}
else {
this.violazioniWarningOnly.add(violateWarningOnly);
}
}
}
@Override
public String toString() {
StringBuilder bf = new StringBuilder();
if(this.violazioni.size()>0) {
if(this.violazioni.size()==1) {
bf.append("Rilevata violazione della policy: ");
}
else {
bf.append("Rilevate ").append(this.violazioni.size()).append(" violazioni della policy: ");
}
for (String violazione : this.violazioni) {
bf.append(SEPARATOR_VIOLAZIONE);
bf.append(violazione);
}
}
if(this.violazioniWarningOnly.size()>0) {
if(this.violazioni.size()>0) {
bf.append(SEPARATOR_TRA_VIOLATE_E_WARNING);
}
if(this.violazioniWarningOnly.size()==1) {
bf.append("Rilevata violazione (in modalità WarningOnly) della policy: ");
}
else {
bf.append("Rilevate ").append(this.violazioniWarningOnly.size()).append(" violazioni ("+WARN+") della policy: ");
}
for (String violazione : this.violazioniWarningOnly) {
bf.append(SEPARATOR_VIOLAZIONE);
bf.append(violazione);
}
}
if(bf.length()>0)
return bf.toString();
else
return "";
}
public void addViolazione(String gruppo,boolean warningOnly) {
if(warningOnly) {
this._addViolazione(gruppo, this.violazioniWarningOnly);
}
else {
this._addViolazione(gruppo, this.violazioni);
}
}
public boolean existsViolazione(String gruppo,boolean warningOnly) {
if(warningOnly) {
return this._existsViolazione(gruppo, this.violazioniWarningOnly);
}
else {
return this._existsViolazione(gruppo, this.violazioni);
}
}
public boolean removeViolazione(String gruppo,boolean warningOnly) {
if(warningOnly) {
return this._removeViolazione(gruppo, this.violazioniWarningOnly);
}
else {
return this._removeViolazione(gruppo, this.violazioni);
}
}
public int sizeViolazioni(boolean warningOnly) {
if(warningOnly) {
return this.violazioniWarningOnly.size();
}
else {
return this.violazioni.size();
}
}
private void _addViolazione(String gruppo, List<String> violazioni) {
if(gruppo==null || gruppo.equals("") || gruppo.equalsIgnoreCase("Disabilitato")) {
gruppo = RAGGRUPPAMENTO_DISABILITATO;
}
if(violazioni.contains(gruppo)==false) {
violazioni.add(gruppo);
}
}
private boolean _existsViolazione(String gruppo, List<String> violazioni) {
if(gruppo==null || gruppo.equals("") || gruppo.equalsIgnoreCase("Disabilitato")) {
gruppo = RAGGRUPPAMENTO_DISABILITATO;
}
return violazioni.contains(gruppo);
}
private boolean _removeViolazione(String gruppo, List<String> violazioni) {
if(gruppo==null || gruppo.equals("") || gruppo.equalsIgnoreCase("Disabilitato")) {
gruppo = RAGGRUPPAMENTO_DISABILITATO;
}
int i = -1;
boolean found = false;
for (i = 0; i < violazioni.size(); i++) {
if(violazioni.get(i).equals(gruppo)) {
found = true;
break;
}
}
if(found) {
violazioni.remove(i);
return true;
}
return false;
}
}