package org.ovirt.engine.core.dal.dbbroker.auditloghandling; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.compat.Guid; public class EventKeyComposer { private static final char KEY_PARTS_DELIMITER = ','; private static final char NAME_VALUE_SEPARATOR = '='; private EventKeyComposer() { } /** * Composes an object id from all log id's to identify uniquely each instance. * * @param event * the event entity that its attributes will be used to created the key * @param logType * the log type associated with the event * @return unique object id */ public static String composeObjectId(AuditLogable event, AuditLogType logType) { final StringBuilder builder = new StringBuilder(); compose(builder, "type", logType.toString()); compose(builder, "sd", emptyGuidToEmptyString(event.getStorageDomainId())); compose(builder, "dc", emptyGuidToEmptyString(event.getStoragePoolId())); compose(builder, "user", emptyGuidToEmptyString(event.getUserId())); compose(builder, "cluster", emptyGuidToEmptyString(event.getClusterId())); compose(builder, "vds", emptyGuidToEmptyString(event.getVdsId())); compose(builder, "vm", emptyGuidToEmptyString(event.getVmId())); compose(builder, "template", emptyGuidToEmptyString(event.getVmTemplateId())); compose(builder, "customId", StringUtils.defaultString(event.getCustomId())); return builder.toString(); } private static void compose(StringBuilder builder, String key, String value) { if (builder.length() > 0) { builder.append(KEY_PARTS_DELIMITER); } builder.append(key).append(NAME_VALUE_SEPARATOR).append(value); } private static String emptyGuidToEmptyString(Guid guid) { return (guid == null || Guid.Empty.equals(guid)) ? "" : guid.toString(); } }