package DNPM.analyzer; import java.util.Map; import java.util.Optional; /** * Klasse mit Hilfsfunktionen für Analyzer * * @since 0.1.0 */ public class AnalyzerUtils { private AnalyzerUtils() {} /** * Prüft, ob in InputMap einen Eintrag mit key key und Typ type * gefunden wurde. * * @param input InputMap * @param key Key des Werts * @param type Typ des Werts * @return true>, wenn ein Wert von dem Typ gefunden wurde */ public static boolean requiredValuePresent(final Map input, final String key, final Class type) { var value = input.get(key); if (null == value) { return false; } return type.isInstance(value); } /** * Übergibt ein Optional mit Wert, wenn in InputMap ein Eintrag mit key key und Typ type * gefunden wurde. Anderenfalls ein leeres Optional * *

Beispiel *

     *     var id = AnalyzerUtils.getRequiredValue(input, "id", Integer.class);
     *     if (id.isEmpty()) {
     *         logger.error("Keine ID angegeben!");
     *         return false;
     *     }
     *
     *     var idNummer = id.get();
     *     ...
     * 
* * @param input InputMap * @param key Key des Werts * @param type Typ des Werts * @return Optional mit entsprechendem Wert oder leeres Optional */ public static Optional getRequiredValue(final Map input, final String key, final Class type) { if (! requiredValuePresent(input, key, type)) { return Optional.empty(); } @SuppressWarnings("unchecked") var result = Optional.of((T)input.get(key)); return result; } /** * Prüft, ob ein Wert in der InputMap als Zeichenkette dem angegebenen RegExp entspricht * * @param input InputMap * @param key Key des Werts * @param regexp Der zu prüfende reguläre Ausdruck * @return true>, wenn ein Wert gefunden wurde, der dem RegExp entspricht */ public static boolean requiredValueMatches(final Map input, final String key, final String regexp) { var value = input.get(key); if (null == value) { return false; } return value.toString().matches(regexp); } /** * Übergibt ein Optional mit dem Wert als Zeichenkette, wenn er dem angegebenen RegExp entspricht. * Hierzu wird die Methode toString() auf den Wert angewendet. * * @param input InputMap * @param key Key des Werts * @param regexp Der zu prüfende reguläre Ausdruck * @return Optional mit entsprechendem Wert als Zeichenkette oder leeres Optional */ public static Optional getRequiredValueMatching(final Map input, final String key, final String regexp) { if (! requiredValueMatches(input, key, regexp)) { return Optional.empty(); } return Optional.of(input.get(key).toString()); } /** * Prüft, ob ein Wert in der InputMap eine ID ist und damit eine Zahl größer Null ist. * * @param input InputMap * @param key Key des Werts * @return true>, wenn ein Wert gefunden wurde, der dem RegExp entspricht */ public static boolean requiredValueIsId(final Map input, final String key) { return requiredValuePresent(input, key, Integer.class) && Integer.parseInt(input.get(key).toString()) > 0; } /** * Übergibt ein Optional, wenn der Wert eine ID ist und damit eine Zahl größer Null ist. *

Beispiel *

     *     var id = AnalyzerUtils.getRequiredId(input, "id");
     *     if (id.isEmpty()) {
     *         logger.error("Keine gültige ID angegeben!");
     *         return false;
     *     }
     *
     *     // Ist hier immer größer als Null
     *     var idNummer = id.get();
     *     ...
     * 
* * @param input InputMap * @param key Key des Werts * @return Optional mit entsprechendem Wert oder leeres Optional */ public static Optional getRequiredId(final Map input, final String key) { if (! requiredValuePresent(input, key, Integer.class)) { return Optional.empty(); } var id = (int)input.get(key); if (id > 0) { return Optional.of(id); } return Optional.empty(); } }