package org.ovirt.engine.api.restapi.types; import org.ovirt.engine.api.model.Agent; import org.ovirt.engine.api.model.Host; import org.ovirt.engine.api.model.Option; import org.ovirt.engine.api.model.Options; import org.ovirt.engine.api.restapi.utils.GuidUtils; import org.ovirt.engine.core.common.businessentities.pm.FenceAgent; import org.ovirt.engine.core.compat.Guid; public class FenceAgentMapper { private static final String PORT_OPTION = "port"; @Mapping(from = Agent.class, to = FenceAgent.class) public static FenceAgent map(Agent model, FenceAgent template) { FenceAgent entity = template != null ? template : new FenceAgent(); if (model.isSetId()) { entity.setId(GuidUtils.asGuid(model.getId())); } if (model.isSetHost() && model.getHost().isSetId()) { entity.setHostId(new Guid(model.getHost().getId())); } if (model.isSetAddress()) { entity.setIp(model.getAddress()); } if (model.isSetOrder()) { entity.setOrder(model.getOrder()); } if (model.isSetType()) { entity.setType(model.getType()); } if (model.isSetUsername()) { entity.setUser(model.getUsername()); } if (model.isSetPassword()) { entity.setPassword(model.getPassword()); } if (model.isSetPort()) { entity.setPort(model.getPort()); addPortToOptions(model); } if (model.isSetOptions()) { entity.setOptions(HostMapper.map(model.getOptions(), null)); } if (model.isSetEncryptOptions()) { entity.setEncryptOptions(model.isEncryptOptions()); } return entity; } /** * Adds 'port' to options. The engine requires it this way, but conceptually this is wrong and the engine should * take care of it and not delegate this responsibility to clients (TODO). */ private static void addPortToOptions(Agent model) { if (!model.isSetOptions()) { model.setOptions(new Options()); } Option option = new Option(); option.setName(PORT_OPTION); option.setValue(String.valueOf(model.getPort())); model.getOptions().getOptions().add(option); } @Mapping(from = FenceAgent.class, to = Agent.class) public static Agent map(FenceAgent entity, Agent template) { Agent model = template != null ? template : new Agent(); model.setId(entity.getId().toString()); model.setAddress(entity.getIp()); model.setOptions(entity.getOptions() == null || entity.getOptions().isEmpty() ? null : HostMapper.map(entity.getOptionsMap(), null)); model.setEncryptOptions(entity.getEncryptOptions()); model.setOrder(entity.getOrder()); model.setPassword(entity.getPassword()); model.setUsername(entity.getUser()); model.setType(entity.getType()); model.setPort(entity.getPort()); model.setHost(new Host()); model.getHost().setId(entity.getHostId().toString()); return model; } }