import java.util.HashMap;
import java.util.Map;
class LogValidator {
/**
* Maps log stream fields for validation checks.
*
* @param logStream The input log stream as a string.
* @param fieldMapping A map defining the fields to be validated. Key is the field name, value is a validation function.
* @return A map containing the validation results for each field. Returns an empty map if logStream is null or fieldMapping is empty.
*/
public static Map<String, Boolean> validateLogStream(String logStream, Map<String, ValidationFunction> fieldMapping) {
Map<String, Boolean> validationResults = new HashMap<>();
if (logStream == null || fieldMapping == null || fieldMapping.isEmpty()) {
return validationResults; // Return empty map if input is invalid
}
String[] lines = logStream.split("\\r?\\n"); // Split log stream into lines
for (Map.Entry<String, ValidationFunction> entry : fieldMapping.entrySet()) {
String fieldName = entry.getKey();
ValidationFunction validationFunction = entry.getValue();
validationResults.put(fieldName, validateField(lines, fieldName, validationFunction));
}
return validationResults;
}
/**
* Validates a specific field in the log stream.
*
* @param lines The array of log lines.
* @param fieldName The name of the field to validate.
* @param validationFunction The validation function for the field.
* @return True if validation passes, false otherwise.
*/
private static boolean validateField(String[] lines, String fieldName, ValidationFunction validationFunction) {
for (String line : lines) {
if (line.contains(fieldName)) {
try {
return validationFunction.validate(line, fieldName);
} catch (Exception e) {
System.err.println("Error validating field " + fieldName + ": " + e.getMessage());
return false; // Return false on error
}
}
}
return false; // Field not found in any line
}
/**
* Functional interface for defining validation logic.
*/
public interface ValidationFunction {
boolean validate(String line, String fieldName);
}
public static void main(String[] args) {
// Example usage
String logStream = "Timestamp: 2023-10-27 10:00:00, User: John Doe, Message: Successful operation";
Map<String, ValidationFunction> fieldMapping = new HashMap<>();
fieldMapping.put("Timestamp", TimestampValidator.validateTimestamp);
fieldMapping.put("User", UserValidator.validateUsername);
fieldMapping.put("Message", MessageValidator.validateMessageLength);
Map<String, Boolean> results = validateLogStream(logStream, fieldMapping);
for (Map.Entry<String, Boolean> entry : results.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
//Example Validation Functions
static class TimestampValidator implements ValidationFunction {
@Override
public boolean validate(String line, String fieldName) {
return line.contains(fieldName) && line.substring(line.indexOf(fieldName) + fieldName.length()).matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}"); //Basic Timestamp check
}
}
static class UserValidator implements ValidationFunction {
@Override
public boolean validate(String line, String fieldName) {
return line.contains(fieldName) && line.substring(line.indexOf(fieldName) + fieldName.length()).matches("[a-zA-Z\\s]+"); //Basic username check
}
}
static class MessageValidator implements ValidationFunction {
@Override
public boolean validate(String line, String fieldName) {
return line.contains(fieldName) && line.substring(line.indexOf(fieldName) + fieldName.length()).length() <= 100; //Message length check
}
}
}
Add your comment