package org.ei.drishti.web.controller; import ch.lambdaj.function.convert.Converter; import org.codehaus.jackson.annotate.JsonProperty; import org.ei.drishti.common.audit.AuditMessage; import org.ei.drishti.common.audit.AuditMessageType; import org.ei.drishti.common.audit.Auditor; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import java.io.IOException; import java.util.List; import java.util.Map; import static ch.lambdaj.collection.LambdaCollections.with; @Controller public class AuditMessageController { private final Auditor auditor; @Autowired public AuditMessageController(Auditor auditor) { this.auditor = auditor; } @RequestMapping(method = RequestMethod.GET, value = "/audit/messages") @ResponseBody public List<AuditMessageItem> getAuditMessages(@RequestParam(value = "previousAuditMessageIndex", defaultValue = "0") long previousIndex) throws IOException { List<AuditMessage> messages = auditor.messagesSince(previousIndex); return with(messages).convert(new Converter<AuditMessage, AuditMessageItem>() { @Override public AuditMessageItem convert(AuditMessage auditMessage) { return AuditMessageItem.from(auditMessage); } }); } protected static class AuditMessageItem { @JsonProperty private final DateTime time; @JsonProperty private final long index; @JsonProperty private final AuditMessageType type; @JsonProperty private final Map<String, String> data; public AuditMessageItem(DateTime time, long index, AuditMessageType type, Map<String, String> data) { this.time = time; this.index = index; this.type = type; this.data = data; } public static AuditMessageItem from(AuditMessage auditMessage) { return new AuditMessageItem(auditMessage.time(), auditMessage.index(), auditMessage.type(), auditMessage.data()); } } }