use of cz.metacentrum.perun.core.api.exceptions.MemberResourceMismatchException in project perun by CESNET.
the class ResourcesManagerBlImpl method copyResource.
@Override
public Resource copyResource(PerunSession sess, Resource templateResource, Resource destinationResource, boolean withGroups) throws ResourceExistsException {
Resource newResource = new Resource();
Vo destinationVo = this.getVo(sess, destinationResource);
Facility destinationFacility = this.getFacility(sess, destinationResource);
newResource.setName(destinationResource.getName());
newResource = this.createResource(sess, newResource, destinationVo, destinationFacility);
// resource attributes
List<Attribute> templateResourceAttributes = perunBl.getAttributesManagerBl().getAttributes(sess, templateResource);
// Remove all virt and core attributes before setting
templateResourceAttributes.removeIf(resourceAttribute -> resourceAttribute.getNamespace().startsWith(AttributesManager.NS_RESOURCE_ATTR_VIRT) || resourceAttribute.getNamespace().startsWith(AttributesManager.NS_RESOURCE_ATTR_CORE));
try {
perunBl.getAttributesManagerBl().setAttributes(sess, newResource, templateResourceAttributes);
} catch (WrongAttributeValueException | WrongAttributeAssignmentException | WrongReferenceAttributeValueException ex) {
throw new ConsistencyErrorException("DB inconsistency while copying attributes from one resource to another. Cause:{}", ex);
}
// if withGroups is true we also copy groups and group-resource/member-resource attributes
if (withGroups) {
List<AssignedGroup> templateResourceGroups = perunBl.getResourcesManagerBl().getGroupAssignments(sess, templateResource, List.of());
try {
for (AssignedGroup assignedGroup : templateResourceGroups) {
// assign only direct group-resource assignments
if (assignedGroup.getSourceGroupId() == null) {
assignGroupToResource(sess, assignedGroup.getEnrichedGroup().getGroup(), newResource, false, assignedGroup.getStatus().equals(GroupResourceStatus.INACTIVE), assignedGroup.isAutoAssignSubgroups());
}
List<Attribute> templateGroupResourceAttributes = perunBl.getAttributesManagerBl().getAttributes(sess, templateResource, assignedGroup.getEnrichedGroup().getGroup());
// Remove all virt attributes before setting
templateGroupResourceAttributes.removeIf(groupResourceAttribute -> groupResourceAttribute.getNamespace().startsWith(AttributesManager.NS_GROUP_RESOURCE_ATTR_VIRT));
perunBl.getAttributesManagerBl().setAttributes(sess, newResource, assignedGroup.getEnrichedGroup().getGroup(), templateGroupResourceAttributes);
}
} catch (GroupResourceMismatchException | WrongAttributeValueException | WrongAttributeAssignmentException | WrongReferenceAttributeValueException ex) {
throw new ConsistencyErrorException("DB inconsistency while copying group-resource attributes. Cause:{}", ex);
}
List<Member> templateResourceMembers = perunBl.getResourcesManagerBl().getAssignedMembers(sess, templateResource);
try {
for (Member member : templateResourceMembers) {
List<Attribute> templateMemberResourceAttributes = perunBl.getAttributesManagerBl().getAttributes(sess, member, templateResource);
// Remove all virt attributes before setting
templateMemberResourceAttributes.removeIf(memberResourceAttribute -> memberResourceAttribute.getNamespace().startsWith(AttributesManager.NS_MEMBER_RESOURCE_ATTR_VIRT));
perunBl.getAttributesManagerBl().setAttributes(sess, member, newResource, templateMemberResourceAttributes);
}
} catch (MemberResourceMismatchException | WrongAttributeValueException | WrongAttributeAssignmentException | WrongReferenceAttributeValueException ex) {
throw new ConsistencyErrorException("DB inconsistency while copying group-resource attributes. Cause:{}", ex);
}
}
// services
List<Service> services = getAssignedServices(sess, templateResource);
for (Service service : services) {
try {
getResourcesManagerImpl().assignService(sess, newResource, service);
} catch (ServiceAlreadyAssignedException ex) {
throw new ConsistencyErrorException("Service was already assigned to this resource. {}", ex);
}
}
// tags
List<ResourceTag> templateResourceTags = getAllResourcesTagsForResource(sess, templateResource);
for (ResourceTag resourceTag : templateResourceTags) {
getResourcesManagerImpl().assignResourceTagToResource(sess, resourceTag, newResource);
}
return newResource;
}
use of cz.metacentrum.perun.core.api.exceptions.MemberResourceMismatchException in project perun by CESNET.
the class urn_perun_member_resource_attribute_def_virt_dataQuotas method getAttributeValue.
@Override
public Attribute getAttributeValue(PerunSessionImpl sess, Member member, Resource resource, AttributeDefinition attributeDefinition) {
Attribute attribute = new Attribute(attributeDefinition);
// get resource quotas
Map<String, Pair<BigDecimal, BigDecimal>> resourceTransferedQuotas;
Attribute resourceQuotas;
try {
resourceQuotas = sess.getPerunBl().getAttributesManagerBl().getAttribute(sess, resource, A_R_defaultDataQuotas);
} catch (AttributeNotExistsException ex) {
throw new ConsistencyErrorException(ex);
} catch (WrongAttributeAssignmentException ex) {
throw new InternalErrorException(ex);
}
if (resourceQuotas == null || resourceQuotas.getValue() == null)
resourceTransferedQuotas = new HashMap<>();
else {
try {
resourceTransferedQuotas = sess.getPerunBl().getModulesUtilsBl().checkAndTransferQuotas(resourceQuotas, resource, null, true);
} catch (WrongAttributeValueException ex) {
throw new ConsistencyErrorException("Quotas on resource " + resource + " are in bad format.", ex);
}
}
// get members quotas
Map<String, Pair<BigDecimal, BigDecimal>> memberTransferedQuotas;
Attribute memberQuotas;
try {
memberQuotas = sess.getPerunBl().getAttributesManagerBl().getAttribute(sess, member, resource, A_MR_dataQuotas);
} catch (AttributeNotExistsException ex) {
throw new ConsistencyErrorException(ex);
} catch (WrongAttributeAssignmentException | MemberResourceMismatchException ex) {
throw new InternalErrorException(ex);
}
if (memberQuotas == null || memberQuotas.getValue() == null)
memberTransferedQuotas = new HashMap<>();
else {
try {
memberTransferedQuotas = sess.getPerunBl().getModulesUtilsBl().checkAndTransferQuotas(memberQuotas, resource, member, true);
} catch (WrongAttributeValueException ex) {
throw new ConsistencyErrorException("Quotas on resource " + resource + " for member " + member + " are in bad format.", ex);
}
}
// get members quotas override
Map<String, Pair<BigDecimal, BigDecimal>> memberTransferedQuotasOverride;
Attribute memberQuotasOverride;
try {
memberQuotasOverride = sess.getPerunBl().getAttributesManagerBl().getAttribute(sess, member, resource, A_MR_dataQuotasOverride);
} catch (AttributeNotExistsException ex) {
throw new ConsistencyErrorException(ex);
} catch (WrongAttributeAssignmentException | MemberResourceMismatchException ex) {
throw new InternalErrorException(ex);
}
if (memberQuotasOverride == null || memberQuotasOverride.getValue() == null)
memberTransferedQuotasOverride = new HashMap<>();
else {
try {
memberTransferedQuotasOverride = sess.getPerunBl().getModulesUtilsBl().checkAndTransferQuotas(memberQuotasOverride, resource, member, true);
} catch (WrongAttributeValueException ex) {
throw new ConsistencyErrorException("Override quotas on resource " + resource + " for member " + member + " are in bad format.", ex);
}
}
// Merge quotas for member on resource
Map<String, Pair<BigDecimal, BigDecimal>> finalMemberResourceQuotas = sess.getPerunBl().getModulesUtilsBl().mergeMemberAndResourceTransferredQuotas(resourceTransferedQuotas, memberTransferedQuotas, memberTransferedQuotasOverride);
// set final value to attribute
attribute.setValue(sess.getPerunBl().getModulesUtilsBl().transferQuotasBackToAttributeValue(finalMemberResourceQuotas, true));
// return attribute
return attribute;
}
Aggregations