package org.ovirt.engine.api.restapi.types;
import org.ovirt.engine.api.model.Cluster;
import org.ovirt.engine.api.model.GlusterHook;
import org.ovirt.engine.api.model.GlusterHookStatus;
import org.ovirt.engine.api.model.GlusterServerHooks;
import org.ovirt.engine.api.model.HookContentType;
import org.ovirt.engine.api.model.HookStage;
import org.ovirt.engine.api.model.Host;
import org.ovirt.engine.api.restapi.utils.GuidUtils;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterHookConflictFlags;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterHookEntity;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterServerHook;
public class GlusterHookMapper {
@Mapping(from = GlusterHook.class, to = GlusterHookEntity.class)
public static GlusterHookEntity map(GlusterHook hook, GlusterHookEntity entity) {
GlusterHookEntity hookEntity = entity != null ? entity : new GlusterHookEntity();
if (hook.isSetId()) {
hookEntity.setId(GuidUtils.asGuid(hook.getId()));
}
if (hook.isSetName()) {
hookEntity.setName(hook.getName());
}
if (hook.isSetGlusterCommand()) {
hookEntity.setGlusterCommand(hook.getGlusterCommand());
}
if (hook.isSetChecksum()) {
hookEntity.setChecksum(hook.getChecksum());
}
if (hook.isSetContent()) {
hookEntity.setContent(hook.getContent());
}
return hookEntity;
}
@Mapping(from = GlusterHookEntity.class, to = GlusterHook.class)
public static GlusterHook map(GlusterHookEntity entity, GlusterHook hook) {
GlusterHook model = hook != null ? hook : new GlusterHook();
if (entity.getId() != null) {
model.setId(entity.getId().toString());
}
if (entity.getClusterId() != null) {
model.setCluster(new Cluster());
model.getCluster().setId(entity.getClusterId().toString());
}
if (entity.getHookKey() != null) {
model.setName(entity.getHookKey());
}
if (entity.getGlusterCommand() != null) {
model.setGlusterCommand(entity.getGlusterCommand());
}
if (entity.getStage() != null) {
model.setStage(map(entity.getStage(), null));
}
if (entity.getStatus() != null) {
model.setStatus(mapHookStatus(entity.getStatus()));
}
if (entity.getContentType() != null) {
model.setContentType(map(entity.getContentType(), null));
}
if (entity.getChecksum() != null) {
model.setChecksum(entity.getChecksum());
}
if (entity.getContent() != null) {
model.setContent(entity.getContent());
}
if (entity.getConflictStatus() != null) {
model.setConflictStatus(entity.getConflictStatus());
model.setConflicts(mapConflicts(entity));
}
if (entity.getServerHooks() != null && !entity.getServerHooks().isEmpty()) {
model.setServerHooks(new GlusterServerHooks());
for (GlusterServerHook serverHookEntity : entity.getServerHooks()) {
model.getServerHooks().getGlusterServerHooks().add(map(serverHookEntity));
}
}
return model;
}
private static String mapConflicts(GlusterHookEntity hook) {
StringBuilder sb = new StringBuilder();
if (hook.isMissingHookConflict()) {
sb.append(GlusterHookConflictFlags.MISSING_HOOK.toString());
}
if (hook.isContentConflict()) {
sb.append(sb.length() > 0 ? ",":"").append(GlusterHookConflictFlags.CONTENT_CONFLICT.toString());
}
if (hook.isStatusConflict()) {
sb.append(sb.length() > 0 ? ",":"").append(GlusterHookConflictFlags.STATUS_CONFLICT.toString());
}
return sb.toString();
}
@Mapping (from=org.ovirt.engine.core.common.businessentities.gluster.GlusterServerHook.class, to=org.ovirt.engine.api.model.GlusterServerHook.class)
public static org.ovirt.engine.api.model.GlusterServerHook map(GlusterServerHook serverHookEntity) {
org.ovirt.engine.api.model.GlusterServerHook serverHookModel = new org.ovirt.engine.api.model.GlusterServerHook();
if (serverHookEntity.getServerId() != null) {
serverHookModel.setHost(new Host());
serverHookModel.getHost().setId(serverHookEntity.getServerId().toString());
}
return serverHookModel;
}
@Mapping(from = org.ovirt.engine.core.common.businessentities.gluster.GlusterHookContentType.class, to = HookContentType.class)
public static HookContentType map(org.ovirt.engine.core.common.businessentities.gluster.GlusterHookContentType hookContentType,
HookContentType template) {
switch (hookContentType) {
case BINARY:
return HookContentType.BINARY;
case TEXT:
return HookContentType.TEXT;
default:
return null;
}
}
@Mapping(from = org.ovirt.engine.core.common.businessentities.gluster.GlusterHookStage.class, to = HookStage.class)
public static HookStage map(org.ovirt.engine.core.common.businessentities.gluster.GlusterHookStage hookStage,
HookStage template) {
switch (hookStage) {
case POST:
return HookStage.POST;
case PRE:
return HookStage.PRE;
default:
return null;
}
}
private static GlusterHookStatus mapHookStatus(org.ovirt.engine.core.common.businessentities.gluster.GlusterHookStatus status) {
switch (status) {
case DISABLED:
return GlusterHookStatus.DISABLED;
case ENABLED:
return GlusterHookStatus.ENABLED;
case MISSING:
return GlusterHookStatus.MISSING;
default:
return null;
}
}
}