1
0
mirror of https://github.com/pcvolkmer/onkostar-plugin-dnpm.git synced 2025-07-02 09:12:54 +00:00
Files
onkostar-plugin-dnpm/src/main/java/DNPM/analyzer/AnalyzerUtils.java

146 lines
4.5 KiB
Java

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 <code>key</code> und Typ <code>type</code>
* gefunden wurde.
*
* @param input InputMap
* @param key Key des Werts
* @param type Typ des Werts
* @return <code>true</code>>, wenn ein Wert von dem Typ gefunden wurde
*/
public static boolean requiredValuePresent(final Map<String, Object> 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 <code>key</code> und Typ <code>type</code>
* gefunden wurde. Anderenfalls ein leeres Optional
*
* <p><b>Beispiel</b>
* <pre>
* var id = AnalyzerUtils.getRequiredValue(input, "id", Integer.class);
* if (id.isEmpty()) {
* logger.error("Keine ID angegeben!");
* return false;
* }
*
* var idNummer = id.get();
* ...
* </pre>
*
* @param input InputMap
* @param key Key des Werts
* @param type Typ des Werts
* @return Optional mit entsprechendem Wert oder leeres Optional
*/
public static <T> Optional<T> getRequiredValue(final Map<String, Object> input, final String key, final Class<T> 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 <code>true</code>>, wenn ein Wert gefunden wurde, der dem RegExp entspricht
*/
public static boolean requiredValueMatches(final Map<String, Object> 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 <code>toString()</code> 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<String> getRequiredValueMatching(final Map<String, Object> 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 <code>true</code>>, wenn ein Wert gefunden wurde, der dem RegExp entspricht
*/
public static boolean requiredValueIsId(final Map<String, Object> 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.
* <p><b>Beispiel</b>
* <pre>
* 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();
* ...
* </pre>
*
* @param input InputMap
* @param key Key des Werts
* @return Optional mit entsprechendem Wert oder leeres Optional
*/
public static Optional<Integer> getRequiredId(final Map<String, Object> 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();
}
}