package com.constellio.data.dao.services.bigVault.solr;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.solr.common.SolrInputDocument;
import com.constellio.data.utils.ConsoleLogger;
public class BigVaultLogger {
private boolean enabled;
private List<String> loggedFields;
private BigVaultLogger(List<String> loggedFields, boolean enabled) {
this.loggedFields = loggedFields;
this.enabled = enabled;
}
public static BigVaultLogger forConfig(Map<String, String> configs) {
String loggedEnabled = configs.get("bigVaultLogger_enabled");
if ("TRUE".equalsIgnoreCase(loggedEnabled)) {
String loggedFields = configs.get("bigVaultLogger_loggedFields");
if (StringUtils.isNotBlank(loggedFields)) {
return new BigVaultLogger(Arrays.asList(loggedFields.split(",")), true);
} else {
return new BigVaultLogger(null, true);
}
} else {
return disabled();
}
}
public static BigVaultLogger disabled() {
return new BigVaultLogger(null, false);
}
public void log(List<SolrInputDocument> newDocuments, List<SolrInputDocument> updatedDocuments) {
if (enabled) {
List<String> lines = new ArrayList<>();
String header = "";
if (!newDocuments.isEmpty()) {
header = "Added " + newDocuments.size() + " records";
}
if (!updatedDocuments.isEmpty()) {
if (header.length() > 0) {
header += " / ";
}
header = "Updates " + updatedDocuments.size() + " records";
}
lines.add(header);
for (SolrInputDocument inputDocument : newDocuments) {
lines.add(toString(inputDocument));
}
for (SolrInputDocument inputDocument : updatedDocuments) {
lines.add(toString(inputDocument));
}
ConsoleLogger.log(lines);
}
}
private String toString(SolrInputDocument inputDocument) {
StringBuilder lineBuilder = new StringBuilder("\t");
lineBuilder.append(inputDocument.getFieldValue("id"));
lineBuilder.append(" { ");
for (String fieldName : inputDocument.getFieldNames()) {
if (loggedFields == null || loggedFields.contains(fieldName)) {
lineBuilder.append(fieldName);
lineBuilder.append("=");
if (fieldName.endsWith("ss") || fieldName.endsWith("ds") || fieldName.endsWith("dts")) {
lineBuilder.append(inputDocument.getFieldValues(fieldName));
} else {
lineBuilder.append(inputDocument.getFieldValue(fieldName));
}
lineBuilder.append(", ");
}
}
lineBuilder.append(" } ");
return lineBuilder.toString();
}
}