package org.ovirt.engine.api.restapi.types; import org.ovirt.engine.api.model.Cluster; import org.ovirt.engine.api.model.DataCenter; import org.ovirt.engine.api.model.Host; import org.ovirt.engine.api.model.Permission; import org.ovirt.engine.api.model.Role; 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.model.VmPool; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.businessentities.permissions; import org.ovirt.engine.core.compat.Guid; public class PermissionMapper { @Mapping(from = Permission.class, to = permissions.class) public static permissions map(Permission model, permissions template) { permissions entity = template != null ? template : new permissions(); if (model.isSetId()) { entity.setId(new Guid(model.getId())); } if (model.isSetRole() && model.getRole().isSetId()) { entity.setrole_id(new Guid(model.getRole().getId())); } if (model.isSetUser() && model.getUser().isSetId()) { entity.setad_element_id(new Guid(model.getUser().getId())); } else if (model.isSetGroup() && model.getGroup().isSetId()) { entity.setad_element_id(new Guid(model.getGroup().getId())); } entity.setObjectId(map(model, template != null ? template.getObjectId() : null)); entity.setObjectType(map(model, template != null ? template.getObjectType() : null)); return entity; } @Mapping(from = permissions.class, to = Role.class) public static Role map(permissions entity, Role template) { Role model = template != null ? template : new Role(); model.setName(entity.getRoleName()); model.setId(entity.getrole_id().toString()); return model; } @Mapping(from = permissions.class, to = Permission.class) public static Permission map(permissions entity, Permission template) { Permission model = template != null ? template : new Permission(); model.setId(entity.getId().toString()); if (entity.getrole_id() != null) { model.setRole(new Role()); model.getRole().setId(entity.getrole_id().toString()); } if (entity.getad_element_id() != null && (template == null || !template.isSetGroup())) { model.setUser(new User()); model.getUser().setId(entity.getad_element_id().toString()); } if (entity.getObjectId() != null) { setObjectId(model, entity); } return model; } @Mapping(from = Permission.class, to = Guid.class) public static Guid map(Permission p, Guid template) { return p.isSetDataCenter() && p.getDataCenter().isSetId() ? new Guid(p.getDataCenter().getId()) : p.isSetCluster() && p.getCluster().isSetId() ? new Guid(p.getCluster().getId()) : p.isSetHost() && p.getHost().isSetId() ? new Guid(p.getHost().getId()) : p.isSetStorageDomain() && p.getStorageDomain().isSetId() ? new Guid(p.getStorageDomain().getId()) : p.isSetVm() && p.getVm().isSetId() ? new Guid(p.getVm().getId()) : p.isSetVmpool() && p.getVmpool().isSetId() ? new Guid(p.getVmpool().getId()) : p.isSetTemplate() && p.getTemplate().isSetId() ? new Guid(p.getTemplate().getId()) : template; } @Mapping(from = Permission.class, to = VdcObjectType.class) public static VdcObjectType map(Permission p, VdcObjectType template) { return p.isSetDataCenter() && p.getDataCenter().isSetId() ? VdcObjectType.StoragePool : p.isSetCluster() && p.getCluster().isSetId() ? VdcObjectType.VdsGroups : p.isSetHost() && p.getHost().isSetId() ? VdcObjectType.VDS : p.isSetStorageDomain() && p.getStorageDomain().isSetId() ? VdcObjectType.Storage : p.isSetVm() && p.getVm().isSetId() ? VdcObjectType.VM : p.isSetVmpool() && p.getVmpool().isSetId() ? VdcObjectType.VmPool : p.isSetTemplate() && p.getTemplate().isSetId() ? VdcObjectType.VmTemplate : template; } /** * @pre completeness of "{entityType}.id" already validated */ private static void setObjectId(Permission model, permissions entity) { String id = entity.getObjectId().toString(); switch (entity.getObjectType()) { case StoragePool : model.setDataCenter(new DataCenter()); model.getDataCenter().setId(id); break; case VdsGroups : model.setCluster(new Cluster()); model.getCluster().setId(id); break; case VDS : model.setHost(new Host()); model.getHost().setId(id); break; case Storage : model.setStorageDomain(new StorageDomain()); model.getStorageDomain().setId(id); break; case VM : model.setVm(new VM()); model.getVm().setId(id); break; case VmPool : model.setVmpool(new VmPool()); model.getVmpool().setId(id); break; case VmTemplate : model.setTemplate(new Template()); model.getTemplate().setId(id); break; default: assert false; } } }