use of cz.metacentrum.perun.core.api.Attribute in project perun by CESNET.
the class AttributesManagerBlImpl method getGroupResourceAttributes.
/**
* Returns all relevant GroupResource RichAttributes for given group.
* That means, returns all GroupResource rich attributes for the given group and resources that the given group
* can access.
* Each rich attribute is returned only once.
*
* @param sess session
* @param group group
* @param attrDef type of attribute that will be returned
* @return List of RichAttribute
*/
private List<RichAttribute> getGroupResourceAttributes(PerunSession sess, Group group, AttributeDefinition attrDef) throws AttributeNotExistsException, WrongAttributeAssignmentException, GroupResourceMismatchException {
List<RichAttribute> listOfRichAttributes = new ArrayList<>();
List<Resource> resourcesFromGroup = getPerunBl().getResourcesManagerBl().getAssignedResources(sess, group);
for (Resource resourceElement : resourcesFromGroup) {
Attribute attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, group, attrDef.getName());
listOfRichAttributes.add(new RichAttribute<>(resourceElement, group, attribute));
}
listOfRichAttributes = new ArrayList<>(new HashSet<>(listOfRichAttributes));
return listOfRichAttributes;
}
use of cz.metacentrum.perun.core.api.Attribute in project perun by CESNET.
the class MembersManagerBlImpl method convertMembersToRichMembersWithAttributes.
/**
* Adds userAttributes and memberAttributes to rich members.
* Specifically adds attributes that are associated with the members and the group. Attributes are also limited by the list of attributes definitions.
* Adds member and member-group attributes to memberAttributes and user attributes to userAttributes.
* The method returns list of rich members with userAttributes and memberAttributes filled.
*
* @param sess
* @param group
* @param richMembers
* @param attrsDef
* @return list of rich members with userAttributes and memberAttributes filled
* @throws InternalErrorException
*/
public List<RichMember> convertMembersToRichMembersWithAttributes(PerunSession sess, Group group, List<RichMember> richMembers, List<AttributeDefinition> attrsDef) throws MemberGroupMismatchException {
List<AttributeDefinition> usersAttributesDef = new ArrayList<>();
List<AttributeDefinition> membersAttributesDef = new ArrayList<>();
List<AttributeDefinition> memberGroupAttributesDef = new ArrayList<>();
for (AttributeDefinition attrd : attrsDef) {
if (attrd.getName().startsWith(AttributesManager.NS_USER_ATTR))
usersAttributesDef.add(attrd);
else if (attrd.getName().startsWith(AttributesManager.NS_MEMBER_ATTR))
membersAttributesDef.add(attrd);
else if (attrd.getName().startsWith(AttributesManager.NS_MEMBER_GROUP_ATTR))
memberGroupAttributesDef.add(attrd);
}
for (RichMember richMember : richMembers) {
List<String> userAttrNames = new ArrayList<>();
for (AttributeDefinition ad : usersAttributesDef) {
userAttrNames.add(ad.getName());
}
List<Attribute> userAttributes = new ArrayList<>(getPerunBl().getAttributesManagerBl().getAttributes(sess, richMember.getUser(), userAttrNames));
List<String> memberAttrNames = new ArrayList<>();
for (AttributeDefinition ad : membersAttributesDef) {
memberAttrNames.add(ad.getName());
}
List<Attribute> memberAttributes = new ArrayList<>(getPerunBl().getAttributesManagerBl().getAttributes(sess, richMember, memberAttrNames));
// add group-member attributes
List<String> groupAttrNames = new ArrayList<>();
for (AttributeDefinition ad : memberGroupAttributesDef) {
groupAttrNames.add(ad.getName());
}
memberAttributes.addAll(getPerunBl().getAttributesManagerBl().getAttributes(sess, richMember, group, groupAttrNames));
richMember.setUserAttributes(userAttributes);
richMember.setMemberAttributes(memberAttributes);
}
return richMembers;
}
use of cz.metacentrum.perun.core.api.Attribute in project perun by CESNET.
the class MembersManagerBlImpl method createMember.
// MAIN METHOD
@Override
public Member createMember(PerunSession sess, Vo vo, SpecificUserType specificUserType, Candidate candidate, List<Group> groups, List<String> overwriteUserAttributes) throws WrongAttributeValueException, WrongReferenceAttributeValueException, AlreadyMemberException, ExtendMembershipException {
log.debug("Creating member for VO {} from candidate {}", vo, candidate);
// Get the user
User user = null;
if (candidate.getUserExtSources() != null) {
for (UserExtSource ues : candidate.getUserExtSources()) {
// Check if the extSource exists
ExtSource tmpExtSource = getPerunBl().getExtSourcesManagerBl().checkOrCreateExtSource(sess, ues.getExtSource().getName(), ues.getExtSource().getType());
// Set the extSource ID
ues.getExtSource().setId(tmpExtSource.getId());
try {
// Try to find the user by userExtSource
user = getPerunBl().getUsersManagerBl().getUserByExtSourceNameAndExtLogin(sess, ues.getExtSource().getName(), ues.getLogin());
} catch (UserExtSourceNotExistsException e) {
// This is OK, non-existent userExtSource will be assigned later
} catch (UserNotExistsException | ExtSourceNotExistsException e) {
// Ignore, we are only checking if the user exists
}
}
}
// If user hasn't been found, then create him
if (user == null) {
user = new User();
user.setFirstName(candidate.getFirstName());
user.setLastName(candidate.getLastName());
user.setMiddleName(candidate.getMiddleName());
user.setTitleAfter(candidate.getTitleAfter());
user.setTitleBefore(candidate.getTitleBefore());
if (specificUserType.equals(SpecificUserType.SERVICE))
user.setServiceUser(true);
if (specificUserType.equals(SpecificUserType.SPONSORED))
user.setSponsoredUser(true);
// Store the user, this must be done in separate transaction
user = getPerunBl().getUsersManagerBl().createUser(sess, user);
log.debug("createMember: new user: {}", user);
}
// Assign missing userExtSource and update LoA
if (candidate.getUserExtSources() != null) {
for (UserExtSource userExtSource : candidate.getUserExtSources()) {
try {
UserExtSource currentUserExtSource = getPerunBl().getUsersManagerBl().getUserExtSourceByExtLogin(sess, userExtSource.getExtSource(), userExtSource.getLogin());
// Update LoA
currentUserExtSource.setLoa(userExtSource.getLoa());
getPerunBl().getUsersManagerBl().updateUserExtSource(sess, currentUserExtSource);
} catch (UserExtSourceNotExistsException e) {
// Create userExtSource
try {
getPerunBl().getUsersManagerBl().addUserExtSource(sess, user, userExtSource);
} catch (UserExtSourceExistsException e1) {
throw new ConsistencyErrorException("Adding userExtSource which already exists: " + userExtSource);
}
} catch (UserExtSourceExistsException e1) {
throw new ConsistencyErrorException("Updating login of userExtSource to value which already exists: " + userExtSource);
}
}
}
try {
Member member = getMemberByUser(sess, vo, user);
throw new AlreadyMemberException(member);
} catch (MemberNotExistsException IGNORE) {
}
// Create the member
Member member = getMembersManagerImpl().createMember(sess, vo, user);
getPerunBl().getAuditer().log(sess, new MemberCreated(member));
// Create the member's attributes
List<Attribute> membersAttributes = new ArrayList<>();
List<Attribute> usersAttributesToMerge = new ArrayList<>();
List<Attribute> usersAttributesToModify = new ArrayList<>();
if (candidate.getAttributes() != null) {
for (String attributeName : candidate.getAttributes().keySet()) {
AttributeDefinition attributeDefinition;
try {
attributeDefinition = getPerunBl().getAttributesManagerBl().getAttributeDefinition(sess, attributeName);
} catch (AttributeNotExistsException ex) {
throw new InternalErrorException(ex);
}
Attribute attribute = new Attribute(attributeDefinition);
attribute.setValue(getPerunBl().getAttributesManagerBl().stringToAttributeValue(candidate.getAttributes().get(attributeName), attribute.getType()));
if (getPerunBl().getAttributesManagerBl().isFromNamespace(sess, attribute, AttributesManager.NS_MEMBER_ATTR_DEF) || getPerunBl().getAttributesManagerBl().isFromNamespace(sess, attribute, AttributesManager.NS_MEMBER_ATTR_OPT)) {
// This is member's attribute
membersAttributes.add(attribute);
} else if (getPerunBl().getAttributesManagerBl().isFromNamespace(sess, attribute, AttributesManager.NS_USER_ATTR_DEF) || getPerunBl().getAttributesManagerBl().isFromNamespace(sess, attribute, AttributesManager.NS_USER_ATTR_OPT)) {
if (overwriteUserAttributes != null && !overwriteUserAttributes.isEmpty() && overwriteUserAttributes.contains(attribute.getName())) {
usersAttributesToModify.add(attribute);
} else {
usersAttributesToMerge.add(attribute);
}
}
}
}
// Store the attributes
try {
// If empty, skip setting or merging empty arrays of attributes at all
if (!membersAttributes.isEmpty())
getPerunBl().getAttributesManagerBl().setAttributes(sess, member, membersAttributes);
if (!usersAttributesToMerge.isEmpty())
getPerunBl().getAttributesManagerBl().mergeAttributesValues(sess, user, usersAttributesToMerge);
if (!usersAttributesToModify.isEmpty())
getPerunBl().getAttributesManagerBl().setAttributes(sess, user, usersAttributesToModify);
} catch (WrongAttributeAssignmentException e) {
throw new InternalErrorException(e);
}
// Set the initial membershipExpiration
// Get user LOA
String memberLoa = null;
try {
Attribute loa = getPerunBl().getAttributesManagerBl().getAttribute(sess, user, AttributesManager.NS_USER_ATTR_VIRT + ":loa");
memberLoa = Integer.toString((Integer) loa.getValue());
} catch (AttributeNotExistsException e) {
// user has no loa defined - if required by VO, it will be stopped in checking method later
} catch (WrongAttributeAssignmentException e) {
throw new InternalErrorException(e);
}
// Check if user can be member
this.canBeMemberInternal(sess, vo, user, memberLoa, true);
// set initial membership expiration
this.extendMembership(sess, member);
insertToMemberGroup(sess, member, vo);
// Add member also to all groups in list
if (groups != null && !groups.isEmpty()) {
for (Group group : groups) {
try {
perunBl.getGroupsManagerBl().addMember(sess, group, member);
} catch (GroupNotExistsException e) {
throw new ConsistencyErrorException(e);
}
}
}
return member;
}
use of cz.metacentrum.perun.core.api.Attribute in project perun by CESNET.
the class MembersManagerBlImpl method convertMembersToRichMembersWithAttributes.
/**
* Adds userAttributes and memberAttributes to rich members.
* Specifically adds attributes that are associated with the members and the resource. Attributes are also limited by the list of attributes definitions.
* Adds member and member-resource attributes to memberAttributes and user and user-facility attributes to userAttributes.
* The method returns list of rich members with userAttributes and memberAttributes filled.
*
* @param sess
* @param richMembers
* @param resource
* @param attrsDef
* @return list of rich members with userAttributes and memberAttributes filled
* @throws InternalErrorException
* @throws WrongAttributeAssignmentException
*/
@Override
public List<RichMember> convertMembersToRichMembersWithAttributes(PerunSession sess, List<RichMember> richMembers, Resource resource, List<AttributeDefinition> attrsDef) throws MemberResourceMismatchException {
List<String> attrNames = new ArrayList<>();
for (AttributeDefinition attributeDefinition : attrsDef) {
attrNames.add(attributeDefinition.getName());
}
for (RichMember richMember : richMembers) {
List<Attribute> userAttributes = new ArrayList<>();
List<Attribute> memberAttributes = new ArrayList<>();
List<Attribute> attributes = getPerunBl().getAttributesManagerBl().getAttributes(sess, richMember, resource, attrNames, true);
for (Attribute attribute : attributes) {
if (attribute.getName().startsWith(AttributesManager.NS_USER_ATTR))
userAttributes.add(attribute);
else if (attribute.getName().startsWith(AttributesManager.NS_USER_FACILITY_ATTR))
userAttributes.add(attribute);
else if (attribute.getName().startsWith(AttributesManager.NS_MEMBER_ATTR))
memberAttributes.add(attribute);
else if (attribute.getName().startsWith(AttributesManager.NS_MEMBER_RESOURCE_ATTR))
memberAttributes.add(attribute);
else {
throw new InternalErrorException(attribute + " is not from user or member namespace (member-resource, user-facility included)!");
}
}
richMember.setUserAttributes(userAttributes);
richMember.setMemberAttributes(memberAttributes);
}
return richMembers;
}
use of cz.metacentrum.perun.core.api.Attribute in project perun by CESNET.
the class MembersManagerBlImpl method convertMembersToRichMembersWithAttributes.
/**
* Adds userAttributes and memberAttributes to rich members.
* Attributes are limited by the list of attributes definitions.
* The method returns list of rich members with userAttributes and memberAttributes filled.
*
* @param sess
* @param richMembers
* @param attrsDef
* @return list of rich members with userAttributes and memberAttributes filled
* @throws InternalErrorException
*/
@Override
public List<RichMember> convertMembersToRichMembersWithAttributes(PerunSession sess, List<RichMember> richMembers, List<AttributeDefinition> attrsDef) {
List<AttributeDefinition> usersAttributesDef = new ArrayList<>();
List<AttributeDefinition> membersAttributesDef = new ArrayList<>();
for (AttributeDefinition attrd : attrsDef) {
if (attrd.getName().startsWith(AttributesManager.NS_USER_ATTR))
usersAttributesDef.add(attrd);
else if (attrd.getName().startsWith(AttributesManager.NS_MEMBER_ATTR))
membersAttributesDef.add(attrd);
}
for (RichMember richMember : richMembers) {
List<String> userAttrNames = new ArrayList<>();
for (AttributeDefinition ad : usersAttributesDef) {
userAttrNames.add(ad.getName());
}
List<Attribute> userAttributes = new ArrayList<>(getPerunBl().getAttributesManagerBl().getAttributes(sess, richMember.getUser(), userAttrNames));
List<String> memberAttrNames = new ArrayList<>();
for (AttributeDefinition ad : membersAttributesDef) {
memberAttrNames.add(ad.getName());
}
List<Attribute> memberAttributes = new ArrayList<>(getPerunBl().getAttributesManagerBl().getAttributes(sess, richMember, memberAttrNames));
richMember.setUserAttributes(userAttributes);
richMember.setMemberAttributes(memberAttributes);
}
return richMembers;
}
Aggregations