/*****************************************************************************
*
* Copyright (C) Zenoss, Inc. 2010, all rights reserved.
*
* This content is made available according to terms specified in
* License.zenoss under the directory where your Zenoss product is installed.
*
****************************************************************************/
package org.zenoss.zep.dao.impl;
import org.springframework.jdbc.core.RowMapper;
import org.zenoss.protobufs.JsonFormat;
import org.zenoss.protobufs.zep.Zep.Event;
import org.zenoss.protobufs.zep.Zep.EventAuditLog;
import org.zenoss.protobufs.zep.Zep.EventNote;
import org.zenoss.protobufs.zep.Zep.EventStatus;
import org.zenoss.protobufs.zep.Zep.EventSummary;
import org.zenoss.zep.dao.impl.compat.DatabaseCompatibility;
import org.zenoss.zep.dao.impl.compat.TypeConverter;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import static org.zenoss.zep.dao.impl.EventConstants.*;
public class EventSummaryRowMapper implements RowMapper<EventSummary> {
private final EventDaoHelper helper;
private final TypeConverter<Long> timestampConverter;
private final TypeConverter<String> uuidConverter;
public EventSummaryRowMapper(EventDaoHelper eventDaoHelper, DatabaseCompatibility databaseCompatibility) {
this.helper = eventDaoHelper;
this.timestampConverter = databaseCompatibility.getTimestampConverter();
this.uuidConverter = databaseCompatibility.getUUIDConverter();
}
@Override
public EventSummary mapRow(ResultSet rs, int rowNum) throws SQLException {
final EventSummary.Builder summaryBuilder = EventSummary.newBuilder();
summaryBuilder.addOccurrence(mapEvent(rs));
summaryBuilder.setUuid(uuidConverter.fromDatabaseType(rs, COLUMN_UUID));
summaryBuilder.setStatus(EventStatus.valueOf(rs.getInt(COLUMN_STATUS_ID)));
summaryBuilder.setFirstSeenTime(timestampConverter.fromDatabaseType(rs, COLUMN_FIRST_SEEN));
summaryBuilder.setStatusChangeTime(timestampConverter.fromDatabaseType(rs, COLUMN_STATUS_CHANGE));
summaryBuilder.setLastSeenTime(timestampConverter.fromDatabaseType(rs, COLUMN_LAST_SEEN));
summaryBuilder.setUpdateTime(timestampConverter.fromDatabaseType(rs, COLUMN_UPDATE_TIME));
summaryBuilder.setCount(rs.getInt(COLUMN_EVENT_COUNT));
String currentUserUuid = uuidConverter.fromDatabaseType(rs, COLUMN_CURRENT_USER_UUID);
if (currentUserUuid != null) {
summaryBuilder.setCurrentUserUuid(currentUserUuid);
}
String currentUserName = rs.getString(COLUMN_CURRENT_USER_NAME);
if (currentUserName != null) {
summaryBuilder.setCurrentUserName(currentUserName);
}
String clearedByEventUuid = uuidConverter.fromDatabaseType(rs, COLUMN_CLEARED_BY_EVENT_UUID);
if (clearedByEventUuid != null) {
summaryBuilder.setClearedByEventUuid(clearedByEventUuid);
}
String notesJson = rs.getString(COLUMN_NOTES_JSON);
if (notesJson != null) {
try {
List<EventNote> notes = JsonFormat.mergeAllDelimitedFrom("[" + notesJson + "]",
EventNote.getDefaultInstance());
summaryBuilder.addAllNotes(notes);
} catch (IOException e) {
throw new SQLException(e);
}
}
String auditJson = rs.getString(COLUMN_AUDIT_JSON);
if (auditJson != null) {
try {
List<EventAuditLog> auditLog = JsonFormat.mergeAllDelimitedFrom("[" + auditJson + "]",
EventAuditLog.getDefaultInstance());
summaryBuilder.addAllAuditLog(auditLog);
} catch (IOException e) {
throw new SQLException(e);
}
}
return summaryBuilder.build();
}
/**
* Maps portion of a result set to an Event
* @param rs
* @return Event
* @throws SQLException
*/
protected Event mapEvent(ResultSet rs) throws SQLException {
return helper.eventMapper(rs, false);
}
}