/** * Determine if this is a valid node layout given the service constraints. * * @param serviceConstraints Service constraints to use for checking validity. * @return True if it satisfies all service constraints, false if not. */ public boolean satisfiesServiceConstraints(Map<String, ServiceConstraint> serviceConstraints) { for (String service : services) { ServiceConstraint constraint = serviceConstraints.get(service); if (constraint != null) { // check that no required hardware rules are broken Set<String> requiredHardwareTypes = constraint.getRequiredHardwareTypes(); if (requiredHardwareTypes != null && !requiredHardwareTypes.isEmpty() && !requiredHardwareTypes.contains(hardwareType)) { return false; } // check that no required image rules are broken Set<String> requiredImageTypes = constraint.getRequiredImageTypes(); if (requiredImageTypes != null && !requiredImageTypes.isEmpty() && !requiredImageTypes.contains(imageType)) { return false; } } } return true; }
@Override public JsonElement serialize(ServiceConstraint serviceConstraint, Type type, JsonSerializationContext context) { JsonObject jsonObj = new JsonObject(); jsonObj.add("hardwaretypes", context.serialize(serviceConstraint.getRequiredHardwareTypes())); jsonObj.add("imagetypes", context.serialize(serviceConstraint.getRequiredImageTypes())); JsonObject quantities = new JsonObject(); quantities.add("min", context.serialize(serviceConstraint.getMinCount())); quantities.add("max", context.serialize(serviceConstraint.getMaxCount())); jsonObj.add("quantities", quantities); return jsonObj; }