public RequirementRegistration(String requiredName, String dependentName, CapabilityScope dependentContext) { this(requiredName, new CapabilityId(dependentName, dependentContext)); }
@Override public int compareTo(CapabilityRegistration o) { return id.compareTo(o.id); } }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; CapabilityRegistration that = (CapabilityRegistration) o; return id.equals(that.id); }
private Step findCapabilityRemovalStep(CapabilityId missingRequirement, boolean ignoreContext, CapabilityResolutionContext resolutionContext) { Step result = removedCapabilities.get(missingRequirement); if (result == null && !ignoreContext) { String missingName = missingRequirement.getName(); for (Map.Entry<CapabilityId, Step> entry : removedCapabilities.entrySet()) { CapabilityId removedId = entry.getKey(); if (missingName.equals(removedId.getName()) && removedId.getScope().canSatisfyRequirement(missingRequirement.getName(), missingRequirement.getScope(), resolutionContext)) { result = entry.getValue(); break; } } } return result; }
readLock.lock(); try { final CapabilityId capId = capabilityId.getScope() == CapabilityScope.GLOBAL ? capabilityId : new CapabilityId(capabilityId.getName(), CapabilityScope.GLOBAL); //possible registry is only in global scope CapabilityRegistration<?> reg = possibleCapabilities.get(capId); if (reg != null) { for (CapabilityRegistration<?> registration : possibleCapabilities.values()) { if (registration.getCapability().isDynamicallyNamed() && registration.getCapabilityScope().equals(capId.getScope()) && capId.getName().startsWith(registration.getCapabilityName())) { Set<RegistrationPoint> registrationPoints = registration.getRegistrationPoints(); for (RegistrationPoint registrationPoint : registrationPoints) {
private RuntimeStatus getDependentCapabilityStatus(Map<String, RuntimeRequirementRegistration> dependents, CapabilityId requiror, Set<CapabilityId> examined) { RuntimeStatus result = RuntimeStatus.NORMAL; if (dependents != null) { for (String dependent : dependents.keySet()) { CapabilityScope requirorScope = requiror.getScope(); List<CapabilityScope> toCheck = requirorScope == CapabilityScope.GLOBAL ? Collections.singletonList(requirorScope) : Arrays.asList(requirorScope, CapabilityScope.GLOBAL); for (CapabilityScope scope : toCheck) { CapabilityId dependentId = new CapabilityId(dependent, scope); if (!examined.contains(dependentId)) { RuntimeStatus status = getCapabilityStatus(dependentId, examined); if (status == RuntimeStatus.RESTART_REQUIRED) { return status; // no need to check anything else } else if (status == RuntimeStatus.RELOAD_REQUIRED) { result = status; } } } } } return result; }
public String getDependentName() { return dependentId.getName(); }
/** * Gets the scope in which the capability is registered. * * @return the capability scope. Will not return {@code null} */ public CapabilityScope getCapabilityScope() { return id.getScope(); }
@Override public int hashCode() { return id.hashCode(); }
readLock.lock(); try { final CapabilityId capId = capabilityId.getScope() == CapabilityScope.GLOBAL ? capabilityId : new CapabilityId(capabilityId.getName(), CapabilityScope.GLOBAL); //possible registry is only in global scope CapabilityRegistration<?> reg = possibleCapabilities.get(capId); if (reg != null) { for (CapabilityRegistration<?> registration : possibleCapabilities.values()) { if (registration.getCapability().isDynamicallyNamed() && registration.getCapabilityScope().equals(capId.getScope()) && capId.getName().startsWith(registration.getCapabilityName())) { Set<RegistrationPoint> registrationPoints = registration.getRegistrationPoints(); for (RegistrationPoint registrationPoint : registrationPoints) {
private Step findCapabilityRemovalStep(CapabilityId missingRequirement, boolean ignoreContext, CapabilityResolutionContext resolutionContext) { Step result = removedCapabilities.get(missingRequirement); if (result == null && !ignoreContext) { String missingName = missingRequirement.getName(); for (Map.Entry<CapabilityId, Step> entry : removedCapabilities.entrySet()) { CapabilityId removedId = entry.getKey(); if (missingName.equals(removedId.getName()) && removedId.getScope().canSatisfyRequirement(missingRequirement.getName(), missingRequirement.getScope(), resolutionContext)) { result = entry.getValue(); break; } } } return result; }
private RuntimeStatus getDependentCapabilityStatus(Map<String, RuntimeRequirementRegistration> dependents, CapabilityId requiror, Set<CapabilityId> examined) { RuntimeStatus result = RuntimeStatus.NORMAL; if (dependents != null) { for (String dependent : dependents.keySet()) { CapabilityScope requirorScope = requiror.getScope(); List<CapabilityScope> toCheck = requirorScope == CapabilityScope.GLOBAL ? Collections.singletonList(requirorScope) : Arrays.asList(requirorScope, CapabilityScope.GLOBAL); for (CapabilityScope scope : toCheck) { CapabilityId dependentId = new CapabilityId(dependent, scope); if (!examined.contains(dependentId)) { RuntimeStatus status = getCapabilityStatus(dependentId, examined); if (status == RuntimeStatus.RESTART_REQUIRED) { return status; // no need to check anything else } else if (status == RuntimeStatus.RELOAD_REQUIRED) { result = status; } } } } } return result; }
public String getCapabilityName() { return id.getName(); }
/** * Gets the scope in which the capability is registered. * * @return the capability scope. Will not return {@code null} */ public CapabilityScope getCapabilityScope() { return id.getScope(); }
@Override public int hashCode() { return id.hashCode(); }
final CapabilityId capabilityId = new CapabilityId(capability.getName(), CapabilityScope.GLOBAL); RegistrationPoint point = new RegistrationPoint(registrationPoint, null); CapabilityRegistration<?> capabilityRegistration = new CapabilityRegistration<>(capability, CapabilityScope.GLOBAL, point); throw ControllerLogger.MGMT_OP_LOGGER.capabilityAlreadyRegisteredInContext(capabilityId.getName(), capabilityId.getScope().getName());
public RequirementRegistration(String requiredName, String dependentName, CapabilityScope dependentContext) { this(requiredName, new CapabilityId(dependentName, dependentContext)); }
/** * This must be called with the write lock held. * @param requirement the requirement */ private void registerRequirement(RuntimeRequirementRegistration requirement) { assert writeLock.isHeldByCurrentThread(); CapabilityId dependentId = requirement.getDependentId(); if (!capabilities.containsKey(dependentId)) { throw ControllerLogger.MGMT_OP_LOGGER.unknownCapabilityInContext(dependentId.getName(), dependentId.getScope().getName()); } Map<CapabilityId, Map<String, RuntimeRequirementRegistration>> requirementMap = requirement.isRuntimeOnly() ? runtimeOnlyRequirements : requirements; Map<String, RuntimeRequirementRegistration> dependents = requirementMap.get(dependentId); if (dependents == null) { dependents = new HashMap<>(); requirementMap.put(dependentId, dependents); } RuntimeRequirementRegistration existing = dependents.get(requirement.getRequiredName()); if (existing == null) { dependents.put(requirement.getRequiredName(), requirement); } else { existing.addRegistrationPoint(requirement.getOldestRegistrationPoint()); } modified = true; }
public String getDependentName() { return dependentId.getName(); }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; CapabilityRegistration that = (CapabilityRegistration) o; return id.equals(that.id); }