package com.constellio.data.utils;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.SolrParams;
import org.jdom2.Document;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import org.slf4j.Logger;
import com.constellio.data.dao.dto.records.RecordDTO;
import com.constellio.data.dao.dto.records.RecordDeltaDTO;
import com.constellio.data.dao.dto.records.TransactionDTO;
public class LoggerUtils {
public static void logDocument(Logger logger, String comment, Document document) {
Format format = Format.getPrettyFormat();
StringWriter stringWriter = new StringWriter();
try {
new XMLOutputter(format).output(document, stringWriter);
logger.info(comment + " : \n" + stringWriter.getBuffer().toString());
stringWriter.close();
} catch (IOException e) {
throw new ImpossibleRuntimeException(e);
}
}
public static String toString(TransactionDTO transaction) {
StringBuilder logBuilder = new StringBuilder();
for (RecordDTO recordDTO : transaction.getNewRecords()) {
logBuilder.append("\n\t" + toString(recordDTO));
}
for (RecordDeltaDTO recordDeltaDTO : transaction.getModifiedRecords()) {
logBuilder.append("\n\t" + toString(recordDeltaDTO));
}
return logBuilder.toString();
}
public static String toString(RecordDTO recordDTO) {
StringBuilder log = new StringBuilder();
log.append(recordDTO.getId() + ">> ");
for (Map.Entry<String, Object> field : recordDTO.getFields().entrySet()) {
log.append(field.getKey());
log.append(":");
log.append(field.getValue());
log.append("; ");
}
for (Map.Entry<String, Object> field : recordDTO.getCopyFields().entrySet()) {
log.append(field.getKey());
log.append(":");
log.append(field.getValue());
log.append("; ");
}
return log.toString();
}
public static String toString(RecordDeltaDTO recordDeltaDTO) {
StringBuilder log = new StringBuilder();
log.append(recordDeltaDTO.getId() + ">> ");
for (String modifiedField : recordDeltaDTO.getModifiedFields().keySet()) {
log.append(modifiedField);
log.append(":");
log.append(recordDeltaDTO.getInitialFields().get(modifiedField));
log.append("=>");
log.append(recordDeltaDTO.getModifiedFields().get(modifiedField));
log.append("; ");
}
return log.toString();
}
public static String toParamsString(SolrParams params) {
StringBuilder stringBuilder = new StringBuilder();
Iterator<String> itIterator = params.getParameterNamesIterator();
boolean first = true;
while (itIterator.hasNext()) {
String key = itIterator.next();
for (String value : params.getParams(key)) {
if (!first) {
stringBuilder.append(", ");
}
stringBuilder.append(key);
stringBuilder.append("=");
stringBuilder.append(value);
first = false;
}
}
return stringBuilder.toString();
}
private void logExceptionWhileAdding(Logger logger, List<SolrInputDocument> inputDocuments, Exception e) {
for (SolrInputDocument inputDocument : inputDocuments) {
logger.info("ADD document '" + inputDocument.getFieldValue("id") + "' with version '" + inputDocument
.getFieldValue("_version_") + "'");
}
logger.error("SolrServerException", e);
}
}