package org.ovirt.engine.api.restapi.types; import java.util.ArrayList; import java.util.HashMap; import org.ovirt.engine.api.model.Balance; import org.ovirt.engine.api.model.Filter; import org.ovirt.engine.api.model.SchedulingPolicy; import org.ovirt.engine.api.model.SchedulingPolicyUnit; import org.ovirt.engine.api.model.Weight; import org.ovirt.engine.api.restapi.utils.CustomPropertiesParser; import org.ovirt.engine.api.restapi.utils.GuidUtils; import org.ovirt.engine.core.common.scheduling.ClusterPolicy; import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.compat.Guid; public class SchedulingPolicyMapper { @Mapping(from = ClusterPolicy.class, to = SchedulingPolicy.class) public static SchedulingPolicy map(ClusterPolicy entity, SchedulingPolicy template) { SchedulingPolicy model = template != null ? template : new SchedulingPolicy(); model.setId(entity.getId().toString()); model.setName(entity.getName()); model.setDescription(entity.getDescription()); model.setLocked(entity.isLocked()); model.setDefaultPolicy(entity.isDefaultPolicy()); if (entity.getParameterMap() != null && !entity.getParameterMap().isEmpty()) { model.setProperties(CustomPropertiesParser.fromMap(entity.getParameterMap())); } return model; } @Mapping(from = SchedulingPolicy.class, to = ClusterPolicy.class) public static ClusterPolicy map(SchedulingPolicy model, ClusterPolicy template) { ClusterPolicy entity = template != null ? template : new ClusterPolicy(); if (model.isSetId()) { entity.setId(GuidUtils.asGuid(model.getId())); } if (model.isSetName()) { entity.setName(model.getName()); } if (model.isSetDescription()) { entity.setDescription(model.getDescription()); } if (model.isSetLocked()) { entity.setLocked(model.isLocked()); } if (model.isSetDefaultPolicy()) { entity.setDefaultPolicy(model.isDefaultPolicy()); } if (model.isSetProperties()) { entity.setParameterMap(CustomPropertiesParser.toMap(model.getProperties())); } return entity; } @Mapping(from = ClusterPolicy.class, to = Filter.class) public static Filter map(ClusterPolicy entity, Filter template) { if (template == null) { assert false : "scheduling filter cannot be null"; return null; } Filter model = template; SchedulingPolicyUnit schedulingPolicyUnit = new SchedulingPolicyUnit(); schedulingPolicyUnit.setId(model.getId()); model.setSchedulingPolicyUnit(schedulingPolicyUnit); Integer position = null; if (entity.getFilterPositionMap() != null) { position = entity.getFilterPositionMap().get(GuidUtils.asGuid(model.getId())); } model.setPosition(position != null ? position : 0); return model; } @Mapping(from = Filter.class, to = ClusterPolicy.class) public static ClusterPolicy map(Filter model, ClusterPolicy template) { ClusterPolicy entity = template != null ? template : new ClusterPolicy(); if(model.isSetSchedulingPolicyUnit() && model.getSchedulingPolicyUnit().isSetId()){ Guid guid = GuidUtils.asGuid(model.getSchedulingPolicyUnit().getId()); if (entity.getFilters() == null) { entity.setFilters(new ArrayList<>()); entity.setFilterPositionMap(new HashMap<>()); } entity.getFilters().add(guid); entity.getFilterPositionMap().put(guid, model.isSetPosition() ? model.getPosition() : 0); } return entity; } @Mapping(from = ClusterPolicy.class, to = Weight.class) public static Weight map(ClusterPolicy entity, Weight template) { if (template == null) { assert false : "scheduling weight cannot be null"; return null; } Weight model = template; SchedulingPolicyUnit schedulingPolicyUnit = new SchedulingPolicyUnit(); schedulingPolicyUnit.setId(model.getId()); model.setSchedulingPolicyUnit(schedulingPolicyUnit); model.setFactor(model.getFactor()); return model; } @Mapping(from = Weight.class, to = ClusterPolicy.class) public static ClusterPolicy map(Weight model, ClusterPolicy template) { ClusterPolicy entity = template != null ? template : new ClusterPolicy(); if (model.isSetSchedulingPolicyUnit() && model.getSchedulingPolicyUnit().isSetId()) { Guid guid = GuidUtils.asGuid(model.getSchedulingPolicyUnit().getId()); if (entity.getFunctions() == null) { entity.setFunctions(new ArrayList<>()); } entity.getFunctions().add(new Pair<>(guid, model.isSetFactor() ? model.getFactor() : 1)); } return entity; } @Mapping(from = ClusterPolicy.class, to = Balance.class) public static Balance map(ClusterPolicy entity, Balance template) { if (template == null) { assert false : "scheduling balance cannot be null"; return null; } Balance model = template; SchedulingPolicyUnit schedulingPolicyUnit = new SchedulingPolicyUnit(); schedulingPolicyUnit.setId(model.getId()); model.setSchedulingPolicyUnit(schedulingPolicyUnit); return model; } @Mapping(from = Balance.class, to = ClusterPolicy.class) public static ClusterPolicy map(Balance model, ClusterPolicy template) { ClusterPolicy entity = template != null ? template : new ClusterPolicy(); if (model.isSetSchedulingPolicyUnit() && model.getSchedulingPolicyUnit().isSetId()) { Guid guid = GuidUtils.asGuid(model.getSchedulingPolicyUnit().getId()); entity.setBalance(guid); } return entity; } }