package org.ovirt.engine.api.restapi.types;
import java.sql.Date;
import java.util.Calendar;
import org.apache.commons.lang.StringUtils;
import org.ovirt.engine.api.model.Cluster;
import org.ovirt.engine.api.model.DataCenter;
import org.ovirt.engine.api.model.Event;
import org.ovirt.engine.api.model.Host;
import org.ovirt.engine.api.model.LogSeverity;
import org.ovirt.engine.api.model.StorageDomain;
import org.ovirt.engine.api.model.Template;
import org.ovirt.engine.api.model.User;
import org.ovirt.engine.api.model.Vm;
import org.ovirt.engine.api.restapi.utils.GuidUtils;
import org.ovirt.engine.api.restapi.utils.TypeConversionHelper;
import org.ovirt.engine.core.common.AuditLogSeverity;
import org.ovirt.engine.core.common.businessentities.AuditLog;
import org.ovirt.engine.core.compat.Guid;
public class EventMapper {
@Mapping(from = AuditLog.class, to = Event.class)
public static Event map(AuditLog entity, Event event) {
Event model = event != null ? event : new Event();
model.setId(String.valueOf(entity.getAuditLogId()));
model.setCode(entity.getLogType().getValue());
model.setSeverity(map(entity.getSeverity(), null));
model.setTime(TypeConversionHelper.toXMLGregorianCalendar(entity
.getLogTime(), null));
model.setDescription(entity.getMessage());
if (entity.getUserId() != null
&& !entity.getUserId().equals(Guid.Empty)) {
User user = new User();
user.setId(entity.getUserId().toString());
model.setUser(user);
}
if (entity.getVmId() != null && !entity.getVmId().equals(Guid.Empty)) {
Vm vm = new Vm();
vm.setId(entity.getVmId().toString());
model.setVm(vm);
}
if (entity.getStorageDomainId() != null
&& !entity.getStorageDomainId().equals(Guid.Empty)) {
StorageDomain sd = new StorageDomain();
sd.setId(entity.getStorageDomainId().toString());
model.setStorageDomain(sd);
}
if (entity.getVdsId() != null
&& !entity.getVdsId().equals(Guid.Empty)) {
Host host = new Host();
host.setId(entity.getVdsId().toString());
model.setHost(host);
}
if (entity.getVmTemplateId() != null
&& !entity.getVmTemplateId().equals(Guid.Empty)) {
Template template = new Template();
template.setId(entity.getVmTemplateId().toString());
model.setTemplate(template);
}
if (entity.getClusterId() != null
&& !entity.getClusterId().equals(Guid.Empty)) {
Cluster cluster = new Cluster();
cluster.setId(entity.getClusterId().toString());
model.setCluster(cluster);
}
if (entity.getStoragePoolId() != null
&& !entity.getStoragePoolId().equals(Guid.Empty)) {
DataCenter dataCenter = new DataCenter();
dataCenter.setId(entity.getStoragePoolId().toString());
model.setDataCenter(dataCenter);
}
if (StringUtils.isNotEmpty(entity.getCorrelationId())) {
model.setCorrelationId(entity.getCorrelationId());
}
if (StringUtils.isNotEmpty(entity.getOrigin())) {
model.setOrigin(entity.getOrigin());
}
model.setCustomId(entity.getCustomEventId());
model.setFloodRate(entity.getEventFloodInSec());
if (StringUtils.isNotEmpty(entity.getCustomData())) {
model.setCustomData(entity.getCustomData());
}
return model;
}
@Mapping(from = Event.class, to = AuditLog.class)
public static AuditLog map(Event event, AuditLog entity) {
AuditLog auditLog = (entity != null) ? entity : new AuditLog();
AuditLogSeverity severity = map(event.getSeverity(), null);
if (severity != null) {
auditLog.setSeverity(severity);
}
auditLog.setLogTime(event.isSetTime() ? event.getTime().toGregorianCalendar().getTime()
: new Date(Calendar.getInstance().getTimeInMillis()));
auditLog.setMessage(event.getDescription());
if (event.isSetUser() && event.getUser().isSetId()) {
Guid guid = GuidUtils.asGuid(event.getUser().getId());
if (!Guid.isNullOrEmpty(guid)) {
auditLog.setUserId(guid);
}
}
if (event.isSetVm() && event.getVm().isSetId()) {
Guid guid = GuidUtils.asGuid(event.getVm().getId());
if (!Guid.isNullOrEmpty(guid)) {
auditLog.setVmId(guid);
}
}
if (event.isSetStorageDomain() && event.getStorageDomain().isSetId()) {
Guid guid = GuidUtils.asGuid(event.getStorageDomain().getId());
if (!Guid.isNullOrEmpty(guid)) {
auditLog.setStorageDomainId(guid);
}
}
if (event.isSetHost() && event.getHost().isSetId()) {
Guid guid = GuidUtils.asGuid(event.getHost().getId());
if (!Guid.isNullOrEmpty(guid)) {
auditLog.setVdsId(guid);
}
}
if (event.isSetTemplate() && event.getTemplate().isSetId()) {
Guid guid = GuidUtils.asGuid(event.getTemplate().getId());
if (!Guid.isNullOrEmpty(guid)) {
auditLog.setVmTemplateId(guid);
}
}
if (event.isSetCluster() && event.getCluster().isSetId()) {
Guid guid = GuidUtils.asGuid(event.getCluster().getId());
if (!Guid.isNullOrEmpty(guid)) {
auditLog.setClusterId(guid);
}
}
if (event.isSetDataCenter() && event.getDataCenter().isSetId()) {
Guid guid = GuidUtils.asGuid(event.getDataCenter().getId());
if (!Guid.isNullOrEmpty(guid)) {
auditLog.setStoragePoolId(guid);
}
}
if (event.isSetCorrelationId()) {
auditLog.setCorrelationId(event.getCorrelationId());
}
if (event.isSetOrigin()) {
auditLog.setOrigin(event.getOrigin());
}
if (event.isSetCustomId()) {
auditLog.setCustomEventId(event.getCustomId());
}
if (event.isSetFloodRate()) {
auditLog.setEventFloodInSec(event.getFloodRate());
}
if (event.isSetCustomData()) {
auditLog.setCustomData(event.getCustomData());
}
return auditLog;
}
@Mapping(from = AuditLogSeverity.class, to = LogSeverity.class)
public static LogSeverity map(AuditLogSeverity entityStatus,
LogSeverity template) {
switch (entityStatus) {
case NORMAL:
return LogSeverity.NORMAL;
case WARNING:
return LogSeverity.WARNING;
case ERROR:
return LogSeverity.ERROR;
case ALERT:
return LogSeverity.ALERT;
default:
return null;
}
}
@Mapping(from = LogSeverity.class, to = AuditLogSeverity.class)
public static AuditLogSeverity map(LogSeverity template, AuditLogSeverity entityStatus) {
switch (template) {
case ALERT:
return AuditLogSeverity.ALERT;
case ERROR:
return AuditLogSeverity.ERROR;
case NORMAL:
return AuditLogSeverity.NORMAL;
case WARNING:
return AuditLogSeverity.WARNING;
default:
return null;
}
}
}