ManageData.java
package access.manage;
import access.api.ApplicationController;
import access.model.Application;
import access.model.Connection;
import com.fasterxml.jackson.annotation.JsonIgnore;
import org.springframework.util.StringUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
@SuppressWarnings({"unchecked", "rawtypes"})
public class ManageData {
private static Set<String> secrets = Set.of("secret", "originalSecret");
private ManageData() {
}
public static Map<String, Object> getMetaDataFields(Map<String, Object> data) {
return (Map<String, Object>) data.get("metaDataFields");
}
public static Map<String, Object> getData(Map<String, Object> provider) {
return (Map<String, Object>) provider.get("data");
}
public static String getProviderName(Map<String, Object> provider) {
Map<String, Object> metaDataFields = getMetaDataFields(getData(provider));
return (String) metaDataFields.get("name:en");
}
public static String getEntityID(Map<String, Object> provider) {
Map<String, Object> data = getData(provider);
return (String) data.get("entityid");
}
public static List<String> contactPersons(Map<String, Object> provider) {
Pattern pattern = Pattern.compile("contacts:[0-9]:contactType");
List contactTypes = List.of("technical", "support", "administrative");
Map<String, Object> metaDataFields = getMetaDataFields(getData(provider));
return metaDataFields.keySet()
.stream()
.filter(key -> pattern.matcher(key).matches() && contactTypes.contains(metaDataFields.get(key)))
.map(key -> (String) metaDataFields.get(key.replace("contactType", "emailAddress")))
.toList();
}
public static void removeSecrets(Map<String, Object> application) {
List<Map<String, Object>> connections = (List<Map<String, Object>>) application.getOrDefault("connections", List.of());
connections.forEach(connection -> {
Map<String, Object> metaData = (Map<String, Object>) connection.getOrDefault("metaData", Map.of());
metaData.keySet().removeIf(key -> secrets.contains(key));
});
}
public static void removeSecrets(Application application) {
Set<Connection> connections = application.getConnections();
connections.forEach(connection -> {
HashMap<String, Object> metaData = connection.getMetaData();
metaData.keySet().removeIf(key -> secrets.contains(key));
});
}
public static boolean isEmpty(Object object) {
return switch (object) {
case List l -> l.isEmpty();
case String s -> !StringUtils.hasText(s);
case Map m -> m.isEmpty();
case null -> true;
default -> false;
};
}
}