Search in sources :

Example 11 with RichAttribute

use of cz.metacentrum.perun.core.api.RichAttribute in project perun by CESNET.

the class AttributesManagerBlImpl method setAttribute.

public void setAttribute(PerunSession sess, Vo vo, Attribute attribute) throws InternalErrorException, WrongAttributeValueException, WrongAttributeAssignmentException, WrongReferenceAttributeValueException {
    if (attribute.getValue() == null) {
        removeAttribute(sess, vo, attribute);
        return;
    }
    if (setAttributeWithoutCheck(sess, vo, attribute)) {
        checkAttributeValue(sess, vo, attribute);
        this.checkAttributeDependencies(sess, new RichAttribute(vo, null, attribute));
    }
}
Also used : RichAttribute(cz.metacentrum.perun.core.api.RichAttribute)

Example 12 with RichAttribute

use of cz.metacentrum.perun.core.api.RichAttribute in project perun by CESNET.

the class AttributesManagerBlImpl method getRichAttributesWithHoldersForAttributeDefinition.

public List<RichAttribute> getRichAttributesWithHoldersForAttributeDefinition(PerunSession sess, AttributeDefinition attrDef, RichAttribute aidingAttr) throws InternalErrorException, AttributeNotExistsException, VoNotExistsException, WrongAttributeAssignmentException, WrongAttributeValueException, WrongReferenceAttributeValueException {
    //Filling objects from aidingAttr
    if (aidingAttr == null)
        throw new InternalErrorException("Aiding attribute cant be null.");
    if (attrDef == null)
        throw new InternalErrorException("attrDef cant be null.");
    List<RichAttribute> listOfRichAttributes = new ArrayList<RichAttribute>();
    //All possible useful objects
    Vo vo = null;
    Facility facility = null;
    Group group = null;
    Member member = null;
    User user = null;
    Host host = null;
    Resource resource = null;
    String key = null;
    Attribute attribute = null;
    //Get object for primaryHolder of aidingAttr
    if (aidingAttr.getPrimaryHolder() != null) {
        if (aidingAttr.getPrimaryHolder() instanceof Vo)
            vo = (Vo) aidingAttr.getPrimaryHolder();
        else if (aidingAttr.getPrimaryHolder() instanceof Facility)
            facility = (Facility) aidingAttr.getPrimaryHolder();
        else if (aidingAttr.getPrimaryHolder() instanceof Group)
            group = (Group) aidingAttr.getPrimaryHolder();
        else if (aidingAttr.getPrimaryHolder() instanceof Member)
            member = (Member) aidingAttr.getPrimaryHolder();
        else if (aidingAttr.getPrimaryHolder() instanceof User)
            user = (User) aidingAttr.getPrimaryHolder();
        else if (aidingAttr.getPrimaryHolder() instanceof Host)
            host = (Host) aidingAttr.getPrimaryHolder();
        else if (aidingAttr.getPrimaryHolder() instanceof Resource)
            resource = (Resource) aidingAttr.getPrimaryHolder();
        else if (aidingAttr.getPrimaryHolder() instanceof String)
            key = (String) aidingAttr.getPrimaryHolder();
        else {
            throw new InternalErrorException("There is unrecognized object in primaryHolder of aidingAttr.");
        }
    } else {
        throw new InternalErrorException("Aiding attribute must have primaryHolder which is not null.");
    }
    //Get object for secondaryHolder of aidingAttr
    if (aidingAttr.getSecondaryHolder() != null) {
        if (aidingAttr.getSecondaryHolder() instanceof Vo)
            vo = (Vo) aidingAttr.getSecondaryHolder();
        else if (aidingAttr.getSecondaryHolder() instanceof Facility)
            facility = (Facility) aidingAttr.getSecondaryHolder();
        else if (aidingAttr.getSecondaryHolder() instanceof Group)
            group = (Group) aidingAttr.getSecondaryHolder();
        else if (aidingAttr.getSecondaryHolder() instanceof Member)
            member = (Member) aidingAttr.getSecondaryHolder();
        else if (aidingAttr.getSecondaryHolder() instanceof User)
            user = (User) aidingAttr.getSecondaryHolder();
        else if (aidingAttr.getSecondaryHolder() instanceof Host)
            host = (Host) aidingAttr.getSecondaryHolder();
        else if (aidingAttr.getSecondaryHolder() instanceof Resource)
            resource = (Resource) aidingAttr.getSecondaryHolder();
        else if (aidingAttr.getSecondaryHolder() instanceof String)
            key = (String) aidingAttr.getSecondaryHolder();
        else {
            throw new InternalErrorException("There is unrecognized object in secondaryHolder of aidingAttr");
        }
    }
    if (getAttributesManagerImpl().isFromNamespace(sess, attrDef, NS_VO_ATTR)) {
        //Second on the fact what i really have in aidingAttr i try to find what i am looking for
        if (resource != null && member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                vo = getPerunBl().getVosManagerBl().getVoById(sess, member.getVoId());
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, vo, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(vo, null, attribute));
            }
        } else if (group != null && resource != null) {
            vo = getPerunBl().getVosManagerBl().getVoById(sess, group.getVoId());
            attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, vo, attrDef.getName());
            listOfRichAttributes.add(new RichAttribute(vo, null, attribute));
        } else if (user != null && facility != null) {
            List<Vo> vosFromUser = new ArrayList<Vo>();
            List<Member> membersFromUser = getPerunBl().getMembersManagerBl().getMembersByUser(sess, user);
            List<Resource> resourcesFromUser = new ArrayList<Resource>();
            for (Member memberElement : membersFromUser) {
                resourcesFromUser.addAll(getPerunBl().getResourcesManagerBl().getAllowedResources(sess, memberElement));
            }
            for (Resource resourceElement : resourcesFromUser) {
                vosFromUser.add(getPerunBl().getResourcesManagerBl().getVo(sess, resourceElement));
            }
            List<Vo> vosFromFacility = getPerunBl().getFacilitiesManagerBl().getAllowedVos(sess, facility);
            vosFromFacility.retainAll(vosFromUser);
            vosFromFacility = new ArrayList<Vo>(new HashSet<Vo>(vosFromFacility));
            for (Vo voElement : vosFromFacility) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, voElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(voElement, null, attribute));
            }
        } else if (member != null && group != null) {
            vo = getPerunBl().getVosManagerBl().getVoById(sess, group.getVoId());
            attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, vo, attrDef.getName());
            listOfRichAttributes.add(new RichAttribute(vo, null, attribute));
        } else if (group != null) {
            vo = getPerunBl().getVosManagerBl().getVoById(sess, group.getVoId());
            attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, vo, attrDef.getName());
            listOfRichAttributes.add(new RichAttribute(vo, null, attribute));
        } else if (member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                vo = getPerunBl().getMembersManagerBl().getMemberVo(sess, member);
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, vo, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(vo, null, attribute));
            }
        } else if (resource != null) {
            vo = getPerunBl().getVosManagerBl().getVoById(sess, resource.getVoId());
            attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, vo, attrDef.getName());
            listOfRichAttributes.add(new RichAttribute(vo, null, attribute));
        } else if (user != null) {
            List<Member> membersFromUser = getPerunBl().getMembersManagerBl().getMembersByUser(sess, user);
            List<Vo> vosFromMembers = new ArrayList<Vo>();
            for (Member memberElement : membersFromUser) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    vosFromMembers.add(getPerunBl().getMembersManagerBl().getMemberVo(sess, memberElement));
                }
            }
            for (Vo voElement : vosFromMembers) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, voElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(voElement, null, attribute));
            }
        } else if (host != null) {
            facility = getPerunBl().getFacilitiesManagerBl().getFacilityForHost(sess, host);
            List<Vo> vos = getPerunBl().getFacilitiesManagerBl().getAllowedVos(sess, facility);
            for (Vo voElement : vos) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, voElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(voElement, null, attribute));
            }
        } else if (facility != null) {
            List<Vo> vos = getPerunBl().getFacilitiesManagerBl().getAllowedVos(sess, facility);
            for (Vo voElement : vos) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, voElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(voElement, null, attribute));
            }
        } else if (vo != null) {
            attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, vo, attrDef.getName());
            listOfRichAttributes.add(new RichAttribute(vo, null, attribute));
        } else if (key != null) {
            List<Vo> vos = getPerunBl().getVosManagerBl().getVos(sess);
            for (Vo voElement : vos) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, voElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(voElement, null, attribute));
            }
        }
    } else if (getAttributesManagerImpl().isFromNamespace(sess, attrDef, NS_GROUP_ATTR)) {
        if (resource != null && member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                List<Group> groupsFromResource = getPerunBl().getResourcesManagerBl().getAssignedGroups(sess, resource);
                List<Group> groupsFromMember = getPerunBl().getGroupsManagerBl().getAllMemberGroups(sess, member);
                groupsFromResource.retainAll(groupsFromMember);
                groupsFromResource = new ArrayList<Group>(new HashSet<Group>(groupsFromResource));
                for (Group groupElement : groupsFromResource) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, groupElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(groupElement, null, attribute));
                }
            }
        } else if (group != null && resource != null) {
            attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, group, attrDef.getName());
            listOfRichAttributes.add(new RichAttribute(group, null, attribute));
        } else if (user != null && facility != null) {
            List<Member> members = getPerunBl().getMembersManagerBl().getMembersByUser(sess, user);
            Set<Group> groupsFromMembers = new HashSet<Group>();
            for (Member memberElement : members) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    groupsFromMembers.addAll(getPerunBl().getGroupsManagerBl().getAllMemberGroups(sess, memberElement));
                }
            }
            groupsFromMembers.retainAll(getPerunBl().getGroupsManagerBl().getAssignedGroupsToFacility(sess, facility));
            for (Group groupElement : groupsFromMembers) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, groupElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(groupElement, null, attribute));
            }
        } else if (member != null && group != null) {
            attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, group, attrDef.getName());
            listOfRichAttributes.add(new RichAttribute(group, null, attribute));
        } else if (group != null) {
            attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, group, attrDef.getName());
            listOfRichAttributes.add(new RichAttribute(group, null, attribute));
        } else if (member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                List<Group> groupsFromMember = getPerunBl().getGroupsManagerBl().getAllMemberGroups(sess, member);
                for (Group groupElement : groupsFromMember) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, groupElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(groupElement, null, attribute));
                }
            }
        } else if (resource != null) {
            List<Group> groupsFromResource = getPerunBl().getResourcesManagerBl().getAssignedGroups(sess, resource);
            for (Group groupElement : groupsFromResource) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, groupElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(groupElement, null, attribute));
            }
        } else if (user != null) {
            List<Member> members = getPerunBl().getMembersManagerBl().getMembersByUser(sess, user);
            List<Group> groupsFromMembers = new ArrayList<Group>();
            for (Member memberElement : members) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    groupsFromMembers.addAll(getPerunBl().getGroupsManagerBl().getAllMemberGroups(sess, memberElement));
                }
            }
            groupsFromMembers = new ArrayList<Group>(new HashSet<Group>(groupsFromMembers));
            for (Group groupElement : groupsFromMembers) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, groupElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(groupElement, null, attribute));
            }
        } else if (host != null) {
            facility = getPerunBl().getFacilitiesManagerBl().getFacilityForHost(sess, host);
            List<Group> groupsFromFacility = getPerunBl().getGroupsManagerBl().getAssignedGroupsToFacility(sess, facility);
            for (Group groupElement : groupsFromFacility) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, groupElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(groupElement, null, attribute));
            }
        } else if (facility != null) {
            List<Group> groupsFromFacility = getPerunBl().getGroupsManagerBl().getAssignedGroupsToFacility(sess, facility);
            for (Group groupElement : groupsFromFacility) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, groupElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(groupElement, null, attribute));
            }
        } else if (vo != null) {
            List<Group> groups = getPerunBl().getGroupsManagerBl().getAllGroups(sess, vo);
            for (Group groupElement : groups) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, groupElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(groupElement, null, attribute));
            }
        } else if (key != null) {
            List<Vo> vos = getPerunBl().getVosManagerBl().getVos(sess);
            List<Group> groupsFromVos = new ArrayList<Group>();
            for (Vo voElement : vos) {
                groupsFromVos.addAll(getPerunBl().getGroupsManagerBl().getAllGroups(sess, voElement));
            }
            groupsFromVos = new ArrayList<Group>(new HashSet<Group>(groupsFromVos));
            for (Group groupElement : groupsFromVos) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, groupElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(groupElement, null, attribute));
            }
        }
    } else if (getAttributesManagerImpl().isFromNamespace(sess, attrDef, NS_FACILITY_ATTR)) {
        if (resource != null && member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                facility = getPerunBl().getResourcesManagerBl().getFacility(sess, resource);
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facility, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(facility, null, attribute));
            }
        } else if (group != null && resource != null) {
            facility = getPerunBl().getResourcesManagerBl().getFacility(sess, resource);
            attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facility, attrDef.getName());
            listOfRichAttributes.add(new RichAttribute(facility, null, attribute));
        } else if (user != null && facility != null) {
            List<Facility> facilitiesFromUser = getPerunBl().getFacilitiesManagerBl().getAllowedFacilities(sess, user);
            if (facilitiesFromUser.contains(facility)) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facility, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(facility, null, attribute));
            }
        } else if (member != null && group != null) {
            List<Resource> resources = getPerunBl().getResourcesManagerBl().getAssignedResources(sess, group);
            List<Facility> facilitiesFromResources = new ArrayList<>();
            for (Resource resourceElement : resources) {
                facilitiesFromResources.add(getPerunBl().getResourcesManagerBl().getFacility(sess, resourceElement));
            }
            facilitiesFromResources = new ArrayList<>(new HashSet<>(facilitiesFromResources));
            for (Facility facilityElement : facilitiesFromResources) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facilityElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(facilityElement, null, attribute));
            }
        } else if (group != null) {
            List<Resource> resources = getPerunBl().getResourcesManagerBl().getAssignedResources(sess, group);
            List<Facility> facilitiesFromResources = new ArrayList<Facility>();
            for (Resource resourceElemenet : resources) {
                facilitiesFromResources.add(getPerunBl().getResourcesManagerBl().getFacility(sess, resourceElemenet));
            }
            facilitiesFromResources = new ArrayList<Facility>(new HashSet<Facility>(facilitiesFromResources));
            for (Facility facilityElement : facilitiesFromResources) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facilityElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(facilityElement, null, attribute));
            }
        } else if (member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                List<Group> groupsForMember = getPerunBl().getGroupsManagerBl().getAllMemberGroups(sess, member);
                List<Resource> resourcesFromMember = new ArrayList<Resource>();
                for (Group groupElement : groupsForMember) {
                    resourcesFromMember.addAll(getPerunBl().getResourcesManagerBl().getAssignedResources(sess, groupElement));
                }
                resourcesFromMember = new ArrayList<Resource>(new HashSet<Resource>(resourcesFromMember));
                for (Resource resourceElement : resourcesFromMember) {
                    Facility facilityFromMember = getPerunBl().getResourcesManagerBl().getFacility(sess, resourceElement);
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facilityFromMember, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(facilityFromMember, null, attribute));
                }
            }
        } else if (resource != null) {
            facility = getPerunBl().getResourcesManagerBl().getFacility(sess, resource);
            attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facility, attrDef.getName());
            listOfRichAttributes.add(new RichAttribute(facility, null, attribute));
        } else if (user != null) {
            List<Facility> facilities = getPerunBl().getFacilitiesManagerBl().getAllowedFacilities(sess, user);
            for (Facility facilityElement : facilities) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facilityElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(facilityElement, null, attribute));
            }
        } else if (host != null) {
            facility = getPerunBl().getFacilitiesManagerBl().getFacilityForHost(sess, host);
            attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facility, attrDef.getName());
            listOfRichAttributes.add(new RichAttribute(facility, null, attribute));
        } else if (facility != null) {
            attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facility, attrDef.getName());
            listOfRichAttributes.add(new RichAttribute(facility, null, attribute));
        } else if (vo != null) {
            List<Resource> resources = getPerunBl().getResourcesManagerBl().getResources(sess, vo);
            List<Facility> facilitiesFromResources = new ArrayList<Facility>();
            for (Resource resourceElemenet : resources) {
                facilitiesFromResources.add(getPerunBl().getResourcesManagerBl().getFacility(sess, resourceElemenet));
            }
            facilitiesFromResources = new ArrayList<Facility>(new HashSet<Facility>(facilitiesFromResources));
            for (Facility facilityElement : facilitiesFromResources) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facilityElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(facilityElement, null, attribute));
            }
        } else if (key != null) {
            List<Facility> facilities = getPerunBl().getFacilitiesManagerBl().getFacilities(sess);
            for (Facility facilityElement : facilities) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facilityElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(facilityElement, null, attribute));
            }
        }
    } else if (getAttributesManagerImpl().isFromNamespace(sess, attrDef, NS_MEMBER_ATTR)) {
        if (resource != null && member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, member, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(member, null, attribute));
            }
        } else if (group != null && resource != null) {
            List<Member> membersFromResource = getPerunBl().getResourcesManagerBl().getAllowedMembers(sess, resource);
            List<Member> membersFromGroup = getPerunBl().getGroupsManagerBl().getGroupMembers(sess, group);
            membersFromResource.retainAll(membersFromGroup);
            membersFromResource = new ArrayList<Member>(new HashSet<Member>(membersFromResource));
            for (Member memberElement : membersFromResource) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, memberElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(memberElement, null, attribute));
                }
            }
        } else if (user != null && facility != null) {
            List<Member> membersFromUser = getPerunBl().getMembersManagerBl().getMembersByUser(sess, user);
            List<Member> membersFromFacility = getPerunBl().getFacilitiesManagerBl().getAllowedMembers(sess, facility);
            membersFromUser.retainAll(membersFromFacility);
            membersFromUser = new ArrayList<Member>(new HashSet<Member>(membersFromUser));
            for (Member memberElement : membersFromUser) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, memberElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(memberElement, null, attribute));
            }
        } else if (member != null && group != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, member, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(member, null, attribute));
            }
        } else if (group != null) {
            List<Member> membersFromGroup = getPerunBl().getGroupsManagerBl().getGroupMembers(sess, group);
            for (Member memberElement : membersFromGroup) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, memberElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(memberElement, null, attribute));
                }
            }
        } else if (member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, member, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(member, null, attribute));
            }
        } else if (resource != null) {
            List<Member> membersFromResource = getPerunBl().getResourcesManagerBl().getAllowedMembers(sess, resource);
            for (Member memberElement : membersFromResource) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, memberElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(memberElement, null, attribute));
            }
        } else if (user != null) {
            List<Member> membersFromUser = getPerunBl().getMembersManagerBl().getMembersByUser(sess, user);
            for (Member memberElement : membersFromUser) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, memberElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(memberElement, null, attribute));
                }
            }
        } else if (host != null) {
            facility = getPerunBl().getFacilitiesManagerBl().getFacilityForHost(sess, host);
            List<Member> membersFromHost = getPerunBl().getFacilitiesManagerBl().getAllowedMembers(sess, facility);
            for (Member memberElement : membersFromHost) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, memberElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(memberElement, null, attribute));
            }
        } else if (facility != null) {
            List<Member> membersFromFacility = getPerunBl().getFacilitiesManagerBl().getAllowedMembers(sess, facility);
            for (Member memberElement : membersFromFacility) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, memberElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(memberElement, null, attribute));
            }
        } else if (vo != null) {
            List<Member> membersFromVo = getPerunBl().getMembersManagerBl().getMembers(sess, vo);
            for (Member memberElement : membersFromVo) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, memberElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(memberElement, null, attribute));
                }
            }
        } else if (key != null) {
            List<Vo> vos = getPerunBl().getVosManagerBl().getVos(sess);
            List<Member> allMembers = new ArrayList<Member>();
            for (Vo voElement : vos) {
                allMembers.addAll(getPerunBl().getMembersManagerBl().getMembers(sess, voElement));
            }
            allMembers = new ArrayList<Member>(new HashSet<Member>(allMembers));
            for (Member memberElement : allMembers) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, memberElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(memberElement, null, attribute));
                }
            }
        }
    } else if (getAttributesManagerImpl().isFromNamespace(sess, attrDef, NS_RESOURCE_ATTR)) {
        if (resource != null && member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resource, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(resource, null, attribute));
            }
        } else if (group != null && resource != null) {
            attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resource, attrDef.getName());
            listOfRichAttributes.add(new RichAttribute(resource, null, attribute));
        } else if (user != null && facility != null) {
            List<Member> members = getPerunBl().getMembersManagerBl().getMembersByUser(sess, user);
            List<Resource> resourcesFromUser = new ArrayList<Resource>();
            for (Member memberElement : members) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    resourcesFromUser.addAll(getPerunBl().getResourcesManagerBl().getAllowedResources(sess, memberElement));
                }
            }
            List<Resource> resourcesFromFacility = getPerunBl().getFacilitiesManagerBl().getAssignedResources(sess, facility);
            resourcesFromUser.retainAll(resourcesFromFacility);
            resourcesFromUser = new ArrayList<Resource>(new HashSet<Resource>(resourcesFromUser));
            for (Resource resourceElement : resourcesFromUser) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(resourceElement, null, attribute));
            }
        } else if (member != null && group != null) {
            List<Resource> resourcesFromGroup = new ArrayList<>(new HashSet<>(getPerunBl().getResourcesManagerBl().getAssignedResources(sess, group)));
            for (Resource resourceElement : resourcesFromGroup) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(resourceElement, null, attribute));
            }
        } else if (group != null) {
            List<Resource> resourcesFromGroup = getPerunBl().getResourcesManagerBl().getAssignedResources(sess, group);
            for (Resource resourceElement : resourcesFromGroup) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(resourceElement, null, attribute));
            }
        } else if (member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                List<Resource> resourcesFromMember = getPerunBl().getResourcesManagerBl().getAllowedResources(sess, member);
                for (Resource resourceElement : resourcesFromMember) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(resourceElement, null, attribute));
                }
            }
        } else if (resource != null) {
            attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resource, attrDef.getName());
            listOfRichAttributes.add(new RichAttribute(resource, null, attribute));
        } else if (user != null) {
            List<Member> members = getPerunBl().getMembersManagerBl().getMembersByUser(sess, user);
            List<Resource> resourcesFromUser = new ArrayList<Resource>();
            for (Member memberElement : members) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    resourcesFromUser.addAll(getPerunBl().getResourcesManagerBl().getAllowedResources(sess, memberElement));
                }
            }
            resourcesFromUser = new ArrayList<Resource>(new HashSet<Resource>(resourcesFromUser));
            for (Resource resourceElement : resourcesFromUser) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(resourceElement, null, attribute));
            }
        } else if (host != null) {
            facility = getPerunBl().getFacilitiesManagerBl().getFacilityForHost(sess, host);
            List<Resource> resourcesFromFacility = getPerunBl().getFacilitiesManagerBl().getAssignedResources(sess, facility);
            for (Resource resourceElement : resourcesFromFacility) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(resourceElement, null, attribute));
            }
        } else if (facility != null) {
            List<Resource> resourcesFromFacility = getPerunBl().getFacilitiesManagerBl().getAssignedResources(sess, facility);
            for (Resource resourceElement : resourcesFromFacility) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(resourceElement, null, attribute));
            }
        } else if (vo != null) {
            List<Resource> resourcesFromVo = getPerunBl().getResourcesManagerBl().getResources(sess, vo);
            for (Resource resourceElement : resourcesFromVo) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(resourceElement, null, attribute));
            }
        } else if (key != null) {
            List<Vo> vos = getPerunBl().getVosManagerBl().getVos(sess);
            List<Resource> allResources = new ArrayList<Resource>();
            for (Vo voElement : vos) {
                allResources.addAll(getPerunBl().getResourcesManagerBl().getResources(sess, voElement));
            }
            allResources = new ArrayList<Resource>(new HashSet<Resource>(allResources));
            for (Resource resourceElement : allResources) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(resourceElement, null, attribute));
            }
        }
    } else if (getAttributesManagerImpl().isFromNamespace(sess, attrDef, NS_USER_ATTR)) {
        if (resource != null && member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                user = getPerunBl().getUsersManagerBl().getUserByMember(sess, member);
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, user, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(user, null, attribute));
            }
        } else if (group != null && resource != null) {
            List<Member> members = getPerunBl().getGroupsManagerBl().getGroupMembers(sess, group);
            List<Member> membersFromResource = getPerunBl().getResourcesManagerBl().getAllowedMembers(sess, resource);
            members.retainAll(membersFromResource);
            List<User> usersFromGroup = new ArrayList<User>();
            for (Member memberElement : members) {
                usersFromGroup.add(getPerunBl().getUsersManagerBl().getUserByMember(sess, memberElement));
            }
            usersFromGroup = new ArrayList<User>(new HashSet<User>(usersFromGroup));
            for (User userElement : usersFromGroup) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, userElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(userElement, null, attribute));
            }
        } else if (user != null && facility != null) {
            List<Facility> facilitiesFromUser = getPerunBl().getFacilitiesManagerBl().getAllowedFacilities(sess, user);
            if (facilitiesFromUser.contains(user)) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, user, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(user, null, attribute));
            }
        } else if (member != null && group != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                user = getPerunBl().getUsersManagerBl().getUserByMember(sess, member);
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, user, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(user, null, attribute));
            }
        } else if (group != null) {
            List<Member> members = getPerunBl().getGroupsManagerBl().getGroupMembers(sess, group);
            List<User> usersFromGroup = new ArrayList<User>();
            for (Member memberElement : members) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    usersFromGroup.add(getPerunBl().getUsersManagerBl().getUserByMember(sess, memberElement));
                }
            }
            usersFromGroup = new ArrayList<User>(new HashSet<User>(usersFromGroup));
            for (User userElement : usersFromGroup) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, userElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(userElement, null, attribute));
            }
        } else if (member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                user = getPerunBl().getUsersManagerBl().getUserByMember(sess, member);
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, user, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(user, null, attribute));
            }
        } else if (resource != null) {
            List<User> usersFromResource = getPerunBl().getResourcesManagerBl().getAllowedUsers(sess, resource);
            for (User userElement : usersFromResource) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, userElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(userElement, null, attribute));
            }
        } else if (user != null) {
            attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, user, attrDef.getName());
            listOfRichAttributes.add(new RichAttribute(user, null, attribute));
        } else if (host != null) {
            facility = getPerunBl().getFacilitiesManagerBl().getFacilityForHost(sess, host);
            List<User> usersFromHost = getPerunBl().getFacilitiesManagerBl().getAllowedUsers(sess, facility);
            for (User userElement : usersFromHost) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, userElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(userElement, null, attribute));
            }
        } else if (facility != null) {
            List<User> usersFromFacility = getPerunBl().getFacilitiesManagerBl().getAllowedUsers(sess, facility);
            for (User userElement : usersFromFacility) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, userElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(userElement, null, attribute));
            }
        } else if (vo != null) {
            List<Member> members = getPerunBl().getMembersManagerBl().getMembers(sess, vo);
            List<User> usersFromVo = new ArrayList<User>();
            for (Member memberElement : members) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    usersFromVo.add(getPerunBl().getUsersManagerBl().getUserByMember(sess, memberElement));
                }
            }
            usersFromVo = new ArrayList<User>(new HashSet<User>(usersFromVo));
            for (User userElement : usersFromVo) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, userElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(userElement, null, attribute));
            }
        } else if (key != null) {
            List<User> allUsers = getPerunBl().getUsersManagerBl().getUsers(sess);
            for (User userElement : allUsers) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, userElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(userElement, null, attribute));
            }
        }
    } else if (getAttributesManagerImpl().isFromNamespace(sess, attrDef, AttributesManager.NS_HOST_ATTR)) {
        if (resource != null && member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                facility = getPerunBl().getResourcesManagerBl().getFacility(sess, resource);
                List<Host> hostsFromResource = getPerunBl().getFacilitiesManagerBl().getHosts(sess, facility);
                for (Host hostElement : hostsFromResource) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, hostElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(hostElement, null, attribute));
                }
            }
        } else if (group != null && resource != null) {
            facility = getPerunBl().getResourcesManagerBl().getFacility(sess, resource);
            List<Host> hostsFromResource = getPerunBl().getFacilitiesManagerBl().getHosts(sess, facility);
            for (Host hostElement : hostsFromResource) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, hostElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(hostElement, null, attribute));
            }
        } else if (user != null && facility != null) {
            if (getPerunBl().getFacilitiesManagerBl().getAllowedFacilities(sess, user).contains(facility)) {
                List<Host> hostsFromFacility = getPerunBl().getFacilitiesManagerBl().getHosts(sess, facility);
                for (Host hostElement : hostsFromFacility) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, hostElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(hostElement, null, attribute));
                }
            }
        } else if (member != null && group != null) {
            List<Resource> resourcesFromGroup = getPerunBl().getResourcesManagerBl().getAssignedResources(sess, group);
            List<Facility> facilitiesFromResources = new ArrayList<>();
            for (Resource resourceElement : resourcesFromGroup) {
                facilitiesFromResources.add(getPerunBl().getResourcesManagerBl().getFacility(sess, resourceElement));
            }
            facilitiesFromResources = new ArrayList<>(new HashSet<>(facilitiesFromResources));
            List<Host> hostsFromFacilities = new ArrayList<>();
            for (Facility facilityElement : facilitiesFromResources) {
                hostsFromFacilities.addAll(getPerunBl().getFacilitiesManagerBl().getHosts(sess, facilityElement));
            }
            for (Host hostElement : hostsFromFacilities) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, hostElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(hostElement, null, attribute));
            }
        } else if (group != null) {
            List<Resource> resources = getPerunBl().getResourcesManagerBl().getAssignedResources(sess, group);
            List<Facility> facilities = new ArrayList<Facility>();
            for (Resource resourceElement : resources) {
                facilities.add(getPerunBl().getResourcesManagerBl().getFacility(sess, resourceElement));
            }
            List<Host> hostsFromGroup = new ArrayList<Host>();
            for (Facility facilityElement : facilities) {
                hostsFromGroup.addAll(getPerunBl().getFacilitiesManagerBl().getHosts(sess, facilityElement));
            }
            hostsFromGroup = new ArrayList<Host>(new HashSet<Host>(hostsFromGroup));
            for (Host hostElement : hostsFromGroup) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, hostElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(hostElement, null, attribute));
            }
        } else if (member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                List<Resource> resources = getPerunBl().getResourcesManagerBl().getAllowedResources(sess, member);
                List<Facility> facilities = new ArrayList<Facility>();
                for (Resource resourceElement : resources) {
                    facilities.add(getPerunBl().getResourcesManagerBl().getFacility(sess, resourceElement));
                }
                List<Host> hostsFromMembers = new ArrayList<Host>();
                for (Facility facilityElement : facilities) {
                    hostsFromMembers.addAll(getPerunBl().getFacilitiesManagerBl().getHosts(sess, facilityElement));
                }
                hostsFromMembers = new ArrayList<Host>(new HashSet<Host>(hostsFromMembers));
                for (Host hostElement : hostsFromMembers) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, hostElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(hostElement, null, attribute));
                }
            }
        } else if (resource != null) {
            facility = getPerunBl().getResourcesManagerBl().getFacility(sess, resource);
            List<Host> hostsFromResource = getPerunBl().getFacilitiesManagerBl().getHosts(sess, facility);
            for (Host hostElement : hostsFromResource) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, hostElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(hostElement, null, attribute));
            }
        } else if (user != null) {
            List<Facility> facilities = getPerunBl().getFacilitiesManagerBl().getAllowedFacilities(sess, user);
            List<Host> hostsFromUser = new ArrayList<Host>();
            for (Facility facilityElement : facilities) {
                hostsFromUser.addAll(getPerunBl().getFacilitiesManagerBl().getHosts(sess, facilityElement));
            }
            hostsFromUser = new ArrayList<Host>(new HashSet<Host>(hostsFromUser));
            for (Host hostElement : hostsFromUser) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, hostElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(hostElement, null, attribute));
            }
        } else if (host != null) {
            attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, host, attrDef.getName());
            listOfRichAttributes.add(new RichAttribute(host, null, attribute));
        } else if (facility != null) {
            List<Host> hostsFromFacility = getPerunBl().getFacilitiesManagerBl().getHosts(sess, facility);
            for (Host hostElement : hostsFromFacility) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, hostElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(hostElement, null, attribute));
            }
        } else if (vo != null) {
            List<Resource> resources = getPerunBl().getResourcesManagerBl().getResources(sess, vo);
            List<Facility> facilities = new ArrayList<Facility>();
            for (Resource resourceElement : resources) {
                facilities.add(getPerunBl().getResourcesManagerBl().getFacility(sess, resourceElement));
            }
            List<Host> hostsFromVo = new ArrayList<Host>();
            for (Facility facilityElement : facilities) {
                hostsFromVo.addAll(getPerunBl().getFacilitiesManagerBl().getHosts(sess, facilityElement));
            }
            hostsFromVo = new ArrayList<Host>(new HashSet<Host>(hostsFromVo));
            for (Host hostElement : hostsFromVo) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, hostElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(hostElement, null, attribute));
            }
        } else if (key != null) {
            List<Facility> facilities = getPerunBl().getFacilitiesManagerBl().getFacilities(sess);
            List<Host> hostsFromVo = new ArrayList<Host>();
            for (Facility facilityElement : facilities) {
                hostsFromVo.addAll(getPerunBl().getFacilitiesManagerBl().getHosts(sess, facilityElement));
            }
            hostsFromVo = new ArrayList<Host>(new HashSet<Host>(hostsFromVo));
            for (Host hostElement : hostsFromVo) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, hostElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(hostElement, null, attribute));
            }
        }
    } else if (getAttributesManagerImpl().isFromNamespace(sess, attrDef, AttributesManager.NS_ENTITYLESS_ATTR)) {
        if (key != null) {
            attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, key, attrDef.getName());
            listOfRichAttributes.add(new RichAttribute(key, null, attribute));
        } else {
            List<String> keys = this.getEntitylessKeys(sess, attrDef);
            for (String keyElement : keys) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, keyElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(keyElement, null, attribute));
            }
        }
    } else if (getAttributesManagerImpl().isFromNamespace(sess, attrDef, NS_GROUP_RESOURCE_ATTR)) {
        if (resource != null && member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                List<Group> groupsFromResource = getPerunBl().getResourcesManagerBl().getAssignedGroups(sess, resource);
                List<Group> groupsFromMember = getPerunBl().getGroupsManagerBl().getAllMemberGroups(sess, member);
                groupsFromResource.retainAll(groupsFromMember);
                groupsFromResource = new ArrayList<Group>(new HashSet<Group>(groupsFromResource));
                for (Group groupElement : groupsFromResource) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resource, groupElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(resource, groupElement, attribute));
                }
            }
        } else if (group != null && resource != null) {
            attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resource, group, attrDef.getName());
            listOfRichAttributes.add(new RichAttribute(resource, group, attribute));
        } else if (user != null && facility != null) {
            //Groups from User
            List<Member> members = getPerunBl().getMembersManagerBl().getMembersByUser(sess, user);
            List<Group> groupsFromUser = new ArrayList<Group>();
            for (Member memberElement : members) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    groupsFromUser.addAll(getPerunBl().getGroupsManagerBl().getAllMemberGroups(sess, memberElement));
                }
            }
            //Retain of Groups from facility
            List<Group> groupsFromFacility = getPerunBl().getGroupsManagerBl().getAssignedGroupsToFacility(sess, facility);
            groupsFromFacility.retainAll(groupsFromUser);
            //Resources from user
            List<Member> membersFromUser = getPerunBl().getMembersManagerBl().getMembersByUser(sess, user);
            List<Resource> resourcesFromUser = new ArrayList<Resource>();
            for (Member memberElement : membersFromUser) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    resourcesFromUser.addAll(getPerunBl().getResourcesManagerBl().getAllowedResources(sess, memberElement));
                }
            }
            //Resource from facility
            List<Resource> resourcesFromFacility = getPerunBl().getFacilitiesManagerBl().getAssignedResources(sess, facility);
            //Retain of Resources
            resourcesFromFacility.retainAll(resourcesFromUser);
            //All possibilities
            resourcesFromFacility = new ArrayList<Resource>(new HashSet<Resource>(resourcesFromFacility));
            for (Resource resourceElement : resourcesFromFacility) {
                List<Group> groupsForResourceElement = getPerunBl().getResourcesManagerBl().getAssignedGroups(sess, resourceElement);
                groupsForResourceElement.retainAll(groupsFromFacility);
                groupsForResourceElement = new ArrayList<Group>(new HashSet<Group>(groupsForResourceElement));
                for (Group groupElement : groupsForResourceElement) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, groupElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(resourceElement, groupElement, attribute));
                }
            }
        } else if (member != null && group != null) {
            // there is no need to get Resources from Member because Members are only in those groups
            // from which we already took Resources
            List<Resource> resourcesFromGroup = getPerunBl().getResourcesManagerBl().getAssignedResources(sess, group);
            for (Resource resourceElement : resourcesFromGroup) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, group, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(resourceElement, group, attribute));
            }
        } else if (group != null) {
            List<Resource> resourcesFromGroup = getPerunBl().getResourcesManagerBl().getAssignedResources(sess, group);
            for (Resource resourceElement : resourcesFromGroup) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, group, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(resourceElement, group, attribute));
            }
        } else if (member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                List<Group> groupsFromMember = getPerunBl().getGroupsManagerBl().getAllMemberGroups(sess, member);
                List<Resource> resourcesFromMember = getPerunBl().getResourcesManagerBl().getAllowedResources(sess, member);
                for (Resource resourceElement : resourcesFromMember) {
                    List<Group> groupsFromResourceElement = getPerunBl().getResourcesManagerBl().getAssignedGroups(sess, resourceElement);
                    groupsFromResourceElement.retainAll(groupsFromMember);
                    groupsFromResourceElement = new ArrayList<Group>(new HashSet<Group>(groupsFromResourceElement));
                    for (Group groupElement : groupsFromResourceElement) {
                        attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, groupElement, attrDef.getName());
                        listOfRichAttributes.add(new RichAttribute(resourceElement, groupElement, attribute));
                    }
                }
            }
        } else if (resource != null) {
            List<Group> groupsFromResource = getPerunBl().getResourcesManagerBl().getAssignedGroups(sess, resource);
            for (Group groupElement : groupsFromResource) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resource, groupElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(resource, groupElement, attribute));
            }
        } else if (user != null) {
            List<Member> members = getPerunBl().getMembersManagerBl().getMembersByUser(sess, user);
            List<Group> groupsFromUser = new ArrayList<Group>();
            List<Resource> resourcesFromUser = new ArrayList<Resource>();
            for (Member memberElement : members) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    groupsFromUser.addAll(getPerunBl().getGroupsManagerBl().getAllMemberGroups(sess, memberElement));
                    resourcesFromUser.addAll(getPerunBl().getResourcesManagerBl().getAllowedResources(sess, memberElement));
                }
            }
            groupsFromUser = new ArrayList<Group>(new HashSet<Group>(groupsFromUser));
            for (Group groupElement : groupsFromUser) {
                List<Resource> resourcesFromGroupElement = getPerunBl().getResourcesManagerBl().getAssignedResources(sess, groupElement);
                resourcesFromGroupElement.retainAll(resourcesFromUser);
                resourcesFromGroupElement = new ArrayList<Resource>(new HashSet<Resource>(resourcesFromGroupElement));
                for (Resource resourceElement : resourcesFromGroupElement) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, groupElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(resourceElement, groupElement, attribute));
                }
            }
        } else if (host != null) {
            facility = getPerunBl().getFacilitiesManagerBl().getFacilityForHost(sess, host);
            List<Resource> resourcesFromHost = getPerunBl().getFacilitiesManagerBl().getAssignedResources(sess, facility);
            for (Resource resourceElement : resourcesFromHost) {
                List<Group> groupsFromResourceElement = getPerunBl().getResourcesManagerBl().getAssignedGroups(sess, resourceElement);
                for (Group groupElement : groupsFromResourceElement) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, groupElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(resourceElement, groupElement, attribute));
                }
            }
        } else if (facility != null) {
            List<Resource> resourcesFromHost = getPerunBl().getFacilitiesManagerBl().getAssignedResources(sess, facility);
            for (Resource resourceElement : resourcesFromHost) {
                List<Group> groupsFromResourceElement = getPerunBl().getResourcesManagerBl().getAssignedGroups(sess, resourceElement);
                for (Group groupElement : groupsFromResourceElement) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, groupElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(resourceElement, groupElement, attribute));
                }
            }
        } else if (vo != null) {
            List<Resource> resources = getPerunBl().getResourcesManagerBl().getResources(sess, vo);
            for (Resource resourceElement : resources) {
                List<Group> groupsFromResourceElement = getPerunBl().getResourcesManagerBl().getAssignedGroups(sess, resourceElement);
                for (Group groupElement : groupsFromResourceElement) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, groupElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(resourceElement, groupElement, attribute));
                }
            }
        } else if (key != null) {
            List<Facility> facilities = getPerunBl().getFacilitiesManagerBl().getFacilities(sess);
            List<Resource> resources = new ArrayList<Resource>();
            for (Facility facilityElement : facilities) {
                resources.addAll(getPerunBl().getFacilitiesManagerBl().getAssignedResources(sess, facilityElement));
            }
            resources = new ArrayList<Resource>(new HashSet<Resource>(resources));
            for (Resource resourceElement : resources) {
                List<Group> groupsFromResourceElement = getPerunBl().getResourcesManagerBl().getAssignedGroups(sess, resourceElement);
                for (Group groupElement : groupsFromResourceElement) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, groupElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(resourceElement, groupElement, attribute));
                }
            }
        }
    } else if (getAttributesManagerImpl().isFromNamespace(sess, attrDef, NS_MEMBER_GROUP_ATTR)) {
        if (resource != null && member != null) {
            List<Group> groupFromMembers = new ArrayList<>();
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                groupFromMembers = getPerunBl().getGroupsManagerBl().getAllMemberGroups(sess, member);
            }
            List<Group> groupsFromResources = getPerunBl().getResourcesManagerBl().getAssignedGroups(sess, resource);
            groupsFromResources.retainAll(groupFromMembers);
            groupsFromResources = new ArrayList<>(new HashSet<>(groupsFromResources));
            for (Group groupElement : groupsFromResources) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, member, groupElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(member, group, attribute));
            }
        } else if (group != null && resource != null) {
            // there is no need to get Members from Resource because needed Members are only from 'group' variable
            // which we already have. Other Members (aquired from Resource) than from 'group' variable will be redundant because
            // they will be not assigned to it.
            List<Member> membersFromGroup = getPerunBl().getGroupsManagerBl().getGroupMembers(sess, group, Status.VALID);
            for (Member memberElement : membersFromGroup) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, memberElement, group, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(memberElement, group, attribute));
            }
        } else if (user != null && facility != null) {
            // get all groups from facility
            List<Group> groupsFromFacility = getPerunBl().getGroupsManagerBl().getAssignedGroupsToFacility(sess, facility);
            // get all groups from user
            List<Member> membersFromUser = getPerunBl().getMembersManagerBl().getMembersByUser(sess, user);
            Set<Group> groupsFromMembers = new HashSet<>();
            for (Member memberElement : membersFromUser) {
                groupsFromMembers.addAll(getPerunBl().getGroupsManagerBl().getAllMemberGroups(sess, memberElement));
            }
            // retain of groups
            groupsFromMembers.retainAll(groupsFromFacility);
            List<Group> retainedGroups = new ArrayList<>(groupsFromMembers);
            // all possible groups
            for (Group groupElement : retainedGroups) {
                // get all members for 'groupElement' variable
                List<Member> membersFromGroup = getPerunBl().getGroupsManagerBl().getGroupMembers(sess, group, Status.VALID);
                // all possibilities
                for (Member memberElement : membersFromGroup) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, memberElement, groupElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(memberElement, groupElement, attribute));
                }
            }
        } else if (member != null && group != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, member, group, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(member, group, attribute));
            }
        } else if (group != null) {
            List<Member> membersFromGroups = getPerunBl().getGroupsManagerBl().getGroupMembers(sess, group, Status.VALID);
            for (Member memberElement : membersFromGroups) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, memberElement, group, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(memberElement, group, attribute));
            }
        } else if (member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                List<Group> groupsFromMembers = getPerunBl().getGroupsManagerBl().getAllMemberGroups(sess, member);
                for (Group groupElement : groupsFromMembers) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, member, groupElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(member, groupElement, attribute));
                }
            }
        } else if (resource != null) {
            List<Group> groupsFromResources = getPerunBl().getResourcesManagerBl().getAssignedGroups(sess, resource);
            for (Group groupElement : groupsFromResources) {
                // get all members for 'groupElement' variable
                List<Member> membersFromGroup = getPerunBl().getGroupsManagerBl().getGroupMembers(sess, group, Status.VALID);
                for (Member memberElement : membersFromGroup) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, memberElement, groupElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(memberElement, groupElement, attribute));
                }
            }
        } else if (user != null) {
            List<Member> membersFromUser = getPerunBl().getMembersManagerBl().getMembersByUser(sess, user);
            for (Member memberElement : membersFromUser) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    // get all groups for 'memberElement' variable
                    List<Group> groupsFromMember = getPerunBl().getGroupsManagerBl().getAllMemberGroups(sess, memberElement);
                    for (Group groupElement : groupsFromMember) {
                        attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, memberElement, groupElement, attrDef.getName());
                        listOfRichAttributes.add(new RichAttribute(memberElement, groupElement, attribute));
                    }
                }
            }
        } else if (host != null) {
            facility = getPerunBl().getFacilitiesManagerBl().getFacilityForHost(sess, host);
            List<Group> groupsFromFacility = getPerunBl().getGroupsManagerBl().getAssignedGroupsToFacility(sess, facility);
            for (Group groupElement : groupsFromFacility) {
                // get all members for 'groupElement' variable
                List<Member> membersFromGroup = getPerunBl().getGroupsManagerBl().getGroupMembers(sess, group, Status.VALID);
                for (Member memberElement : membersFromGroup) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, memberElement, groupElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(memberElement, groupElement, attribute));
                }
            }
        } else if (facility != null) {
            List<Group> groupsFromFacility = getPerunBl().getGroupsManagerBl().getAssignedGroupsToFacility(sess, facility);
            for (Group groupElement : groupsFromFacility) {
                // get all members for 'groupElement' variable
                List<Member> membersFromGroup = getPerunBl().getGroupsManagerBl().getGroupMembers(sess, group, Status.VALID);
                for (Member memberElement : membersFromGroup) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, memberElement, groupElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(memberElement, groupElement, attribute));
                }
            }
        } else if (vo != null) {
            List<Group> groupsFromVo = getPerunBl().getGroupsManagerBl().getAllGroups(sess, vo);
            for (Group groupElement : groupsFromVo) {
                // get all members for 'groupElement' variable
                List<Member> membersFromGroup = getPerunBl().getGroupsManagerBl().getGroupMembers(sess, group, Status.VALID);
                for (Member memberElement : membersFromGroup) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, memberElement, groupElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(memberElement, groupElement, attribute));
                }
            }
        } else if (key != null) {
            List<Vo> vos = getPerunBl().getVosManagerBl().getVos(sess);
            List<Group> groupsFromVo = new ArrayList<>();
            for (Vo voElement : vos) {
                groupsFromVo.addAll(getPerunBl().getGroupsManagerBl().getAllGroups(sess, voElement));
            }
            groupsFromVo = new ArrayList<>(new HashSet<>(groupsFromVo));
            for (Group groupElement : groupsFromVo) {
                // get all members for 'groupElement' variable
                List<Member> membersFromGroup = getPerunBl().getGroupsManagerBl().getGroupMembers(sess, group, Status.VALID);
                for (Member memberElement : membersFromGroup) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, memberElement, groupElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(memberElement, groupElement, attribute));
                }
            }
        }
    } else if (getAttributesManagerImpl().isFromNamespace(sess, attrDef, NS_MEMBER_RESOURCE_ATTR)) {
        if (resource != null && member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resource, member, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(resource, member, attribute));
            }
        } else if (group != null && resource != null) {
            List<Member> membersFromGroup = getPerunBl().getGroupsManagerBl().getGroupMembers(sess, group);
            List<Member> membersFromResource = getPerunBl().getResourcesManagerBl().getAllowedMembers(sess, resource);
            membersFromGroup.retainAll(membersFromResource);
            membersFromGroup = new ArrayList<Member>(new HashSet<Member>(membersFromGroup));
            for (Member memberElement : membersFromGroup) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resource, memberElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(resource, memberElement, attribute));
            }
        } else if (user != null && facility != null) {
            List<Member> membersFromUser = getPerunBl().getMembersManagerBl().getMembersByUser(sess, user);
            List<Member> membersFromFacility = getPerunBl().getFacilitiesManagerBl().getAllowedMembers(sess, facility);
            List<Resource> resourcesFromFacility = getPerunBl().getFacilitiesManagerBl().getAssignedResources(sess, facility);
            List<Resource> resourcesFromUser = new ArrayList<Resource>();
            for (Member memberElement : membersFromUser) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    resourcesFromUser.addAll(getPerunBl().getResourcesManagerBl().getAllowedResources(sess, memberElement));
                }
            }
            membersFromUser.retainAll(membersFromFacility);
            resourcesFromUser.retainAll(resourcesFromFacility);
            resourcesFromUser = new ArrayList<Resource>(new HashSet<Resource>(resourcesFromUser));
            for (Resource resourceElement : resourcesFromUser) {
                List<Member> membersForResourceElement = getPerunBl().getResourcesManagerBl().getAllowedMembers(sess, resourceElement);
                membersForResourceElement.retainAll(membersFromUser);
                membersForResourceElement = new ArrayList<Member>(new HashSet<Member>(membersForResourceElement));
                for (Member memberElement : membersForResourceElement) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, memberElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(resourceElement, memberElement, attribute));
                }
            }
        } else if (member != null && group != null) {
            // there is no need to get Resources from Member because Members are only in those groups
            // from which we already took Resources
            List<Resource> resourcesFromGroup = getPerunBl().getResourcesManagerBl().getAssignedResources(sess, group);
            for (Resource resourceElement : resourcesFromGroup) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, member, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(resourceElement, member, attribute));
            }
        } else if (group != null) {
            List<Resource> resources = getPerunBl().getResourcesManagerBl().getAssignedResources(sess, group);
            List<Member> members = getPerunBl().getGroupsManagerBl().getGroupMembers(sess, group);
            for (Resource resourceElement : resources) {
                List<Member> membersForResourceElement = getPerunBl().getResourcesManagerBl().getAllowedMembers(sess, resourceElement);
                membersForResourceElement.retainAll(members);
                membersForResourceElement = new ArrayList<Member>(new HashSet<Member>(membersForResourceElement));
                for (Member memberElement : members) {
                    if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                        attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, memberElement, attrDef.getName());
                        listOfRichAttributes.add(new RichAttribute(resourceElement, memberElement, attribute));
                    }
                }
            }
        } else if (member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                List<Resource> resources = getPerunBl().getResourcesManagerBl().getAllowedResources(sess, member);
                for (Resource resourceElement : resources) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, member, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(resourceElement, member, attribute));
                }
            }
        } else if (resource != null) {
            List<Member> members = getPerunBl().getResourcesManagerBl().getAllowedMembers(sess, resource);
            for (Member memberElement : members) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resource, memberElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(resource, memberElement, attribute));
            }
        } else if (user != null) {
            List<Member> members = getPerunBl().getMembersManagerBl().getMembersByUser(sess, user);
            for (Member memberElement : members) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    List<Resource> resources = getPerunBl().getResourcesManagerBl().getAllowedResources(sess, memberElement);
                    for (Resource resourceElement : resources) {
                        attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, memberElement, attrDef.getName());
                        listOfRichAttributes.add(new RichAttribute(resourceElement, memberElement, attribute));
                    }
                }
            }
        } else if (host != null) {
            facility = getPerunBl().getFacilitiesManagerBl().getFacilityForHost(sess, host);
            List<Resource> resources = getPerunBl().getFacilitiesManagerBl().getAssignedResources(sess, facility);
            for (Resource resourceElement : resources) {
                List<Member> members = getPerunBl().getResourcesManagerBl().getAllowedMembers(sess, resourceElement);
                for (Member memberElement : members) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, memberElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(resourceElement, memberElement, attribute));
                }
            }
        } else if (facility != null) {
            List<Resource> resources = getPerunBl().getFacilitiesManagerBl().getAssignedResources(sess, facility);
            for (Resource resourceElement : resources) {
                List<Member> members = getPerunBl().getResourcesManagerBl().getAllowedMembers(sess, resourceElement);
                for (Member memberElement : members) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, memberElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(resourceElement, memberElement, attribute));
                }
            }
        } else if (vo != null) {
            List<Resource> resources = getPerunBl().getResourcesManagerBl().getResources(sess, vo);
            List<Member> membersFromVo = getPerunBl().getMembersManagerBl().getMembers(sess, vo);
            for (Resource resourceElement : resources) {
                List<Member> membersFromResource = getPerunBl().getResourcesManagerBl().getAllowedMembers(sess, resource);
                membersFromResource.retainAll(membersFromVo);
                for (Member memberElement : membersFromResource) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, memberElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(resourceElement, memberElement, attribute));
                }
            }
        } else if (key != null) {
            List<Vo> vos = getPerunBl().getVosManagerBl().getVos(sess);
            List<Resource> resources = new ArrayList<Resource>();
            List<Member> membersFromVo = new ArrayList<Member>();
            for (Vo voElement : vos) {
                resources.addAll(getPerunBl().getResourcesManagerBl().getResources(sess, voElement));
                membersFromVo.addAll(getPerunBl().getMembersManagerBl().getMembers(sess, voElement));
            }
            resources = new ArrayList<Resource>(new HashSet<Resource>(resources));
            for (Resource resourceElement : resources) {
                List<Member> membersFromResource = getPerunBl().getResourcesManagerBl().getAllowedMembers(sess, resourceElement);
                membersFromResource.retainAll(membersFromVo);
                membersFromResource = new ArrayList<Member>(new HashSet<Member>(membersFromResource));
                for (Member memberElement : membersFromResource) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, resourceElement, memberElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(resourceElement, memberElement, attribute));
                }
            }
        }
    } else if (getAttributesManagerImpl().isFromNamespace(sess, attrDef, NS_USER_FACILITY_ATTR)) {
        if (resource != null && member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                facility = getPerunBl().getResourcesManagerBl().getFacility(sess, resource);
                user = getPerunBl().getUsersManagerBl().getUserByMember(sess, member);
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facility, user, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(facility, user, attribute));
            }
        } else if (group != null && resource != null) {
            facility = getPerunBl().getResourcesManagerBl().getFacility(sess, resource);
            //get Users from Group
            List<Member> members = getPerunBl().getGroupsManagerBl().getGroupMembers(sess, group);
            List<User> usersFromGroup = new ArrayList<User>();
            for (Member memberElement : members) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    usersFromGroup.add(getPerunBl().getUsersManagerBl().getUserByMember(sess, memberElement));
                }
            }
            //get users from resource
            List<Member> membersFromResource = getPerunBl().getResourcesManagerBl().getAllowedMembers(sess, resource);
            List<User> usersFromResource = new ArrayList<User>();
            for (Member memberElement : membersFromResource) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    usersFromResource.add(getPerunBl().getUsersManagerBl().getUserByMember(sess, memberElement));
                }
            }
            usersFromGroup.retainAll(usersFromResource);
            usersFromGroup = new ArrayList<User>(new HashSet<User>(usersFromGroup));
            for (User userElement : usersFromGroup) {
                if (getPerunBl().getFacilitiesManagerBl().getAllowedFacilities(sess, userElement).contains(facility)) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facility, userElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(facility, userElement, attribute));
                }
            }
        } else if (user != null && facility != null) {
            attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facility, user, attrDef.getName());
            listOfRichAttributes.add(new RichAttribute(facility, user, attribute));
        } else if (member != null && group != null) {
            List<Resource> resourcesFromGroup = getPerunBl().getResourcesManagerBl().getAssignedResources(sess, group);
            List<Facility> facilitiesFromResources = new ArrayList<>();
            for (Resource resourceElement : resourcesFromGroup) {
                facilitiesFromResources.add(getPerunBl().getResourcesManagerBl().getFacility(sess, resourceElement));
            }
            facilitiesFromResources = new ArrayList<>(new HashSet<>(facilitiesFromResources));
            User userFromMember = getPerunBl().getUsersManagerBl().getUserByMember(sess, member);
            for (Facility facilityElement : facilitiesFromResources) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facilityElement, userFromMember, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(facilityElement, userFromMember, attribute));
            }
        } else if (group != null) {
            List<Member> members = getPerunBl().getGroupsManagerBl().getGroupMembers(sess, group);
            List<User> users = new ArrayList<User>();
            for (Member memberElement : members) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    users.add(getPerunBl().getUsersManagerBl().getUserByMember(sess, memberElement));
                }
            }
            List<Resource> resources = getPerunBl().getResourcesManagerBl().getAssignedResources(sess, group);
            List<Facility> facilities = new ArrayList<Facility>();
            for (Resource resourceElement : resources) {
                facilities.add(getPerunBl().getResourcesManagerBl().getFacility(sess, resourceElement));
            }
            users = new ArrayList<User>(new HashSet<User>(users));
            for (User userElement : users) {
                List<Facility> facilitiesFromUser = getPerunBl().getFacilitiesManagerBl().getAllowedFacilities(sess, userElement);
                facilities.retainAll(facilitiesFromUser);
                facilities = new ArrayList<Facility>(new HashSet<Facility>(facilities));
                for (Facility facilityElement : facilities) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facilityElement, userElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(facilityElement, userElement, attribute));
                }
            }
        } else if (member != null) {
            if (!getPerunBl().getMembersManagerBl().haveStatus(sess, member, Status.INVALID)) {
                user = getPerunBl().getUsersManagerBl().getUserByMember(sess, member);
                List<Resource> memberResources = getPerunBl().getResourcesManagerBl().getAllowedResources(sess, member);
                List<Facility> facilities = new ArrayList<Facility>();
                for (Resource resourceElement : memberResources) {
                    facilities.add(getPerunBl().getResourcesManagerBl().getFacility(sess, resourceElement));
                }
                facilities = new ArrayList<Facility>(new HashSet<Facility>(facilities));
                for (Facility facilityElement : facilities) {
                    if (getPerunBl().getFacilitiesManagerBl().getAllowedFacilities(sess, user).contains(facilityElement)) {
                        attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facilityElement, user, attrDef.getName());
                        listOfRichAttributes.add(new RichAttribute(facilityElement, user, attribute));
                    }
                }
            }
        } else if (resource != null) {
            facility = getPerunBl().getResourcesManagerBl().getFacility(sess, resource);
            List<User> usersFromResource = getPerunBl().getResourcesManagerBl().getAllowedUsers(sess, resource);
            for (User userElement : usersFromResource) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facility, userElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(facility, userElement, attribute));
            }
        } else if (user != null) {
            List<Facility> facilities = getPerunBl().getFacilitiesManagerBl().getAllowedFacilities(sess, user);
            for (Facility facilityElement : facilities) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facilityElement, user, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(facilityElement, user, attribute));
            }
        } else if (host != null) {
            facility = getPerunBl().getFacilitiesManagerBl().getFacilityForHost(sess, host);
            List<User> users = getPerunBl().getFacilitiesManagerBl().getAllowedUsers(sess, facility);
            for (User userElement : users) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facility, userElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(facility, userElement, attribute));
            }
        } else if (facility != null) {
            List<User> users = getPerunBl().getFacilitiesManagerBl().getAllowedUsers(sess, facility);
            for (User userElement : users) {
                attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facility, userElement, attrDef.getName());
                listOfRichAttributes.add(new RichAttribute(facility, userElement, attribute));
            }
        } else if (vo != null) {
            List<Member> members = getPerunBl().getMembersManagerBl().getMembers(sess, vo);
            List<User> users = new ArrayList<User>();
            for (Member memberElement : members) {
                if (!getPerunBl().getMembersManagerBl().haveStatus(sess, memberElement, Status.INVALID)) {
                    users.add(getPerunBl().getUsersManagerBl().getUserByMember(sess, memberElement));
                }
            }
            List<Resource> resourcesFromVo = getPerunBl().getResourcesManagerBl().getResources(sess, vo);
            List<Facility> facilitiesFromVo = new ArrayList<Facility>();
            for (Resource resourceElement : resourcesFromVo) {
                facilitiesFromVo.add(getPerunBl().getResourcesManagerBl().getFacility(sess, resourceElement));
            }
            users = new ArrayList<User>(new HashSet<User>(users));
            for (User userElement : users) {
                List<Facility> facilitiesFromUserElement = getPerunBl().getFacilitiesManagerBl().getAllowedFacilities(sess, userElement);
                facilitiesFromUserElement.retainAll(facilitiesFromVo);
                facilitiesFromUserElement = new ArrayList<Facility>(new HashSet<Facility>(facilitiesFromUserElement));
                for (Facility facilityElement : facilitiesFromUserElement) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facilityElement, userElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(facilityElement, userElement, attribute));
                }
            }
        } else if (key != null) {
            List<Facility> facilities = getPerunBl().getFacilitiesManagerBl().getFacilities(sess);
            for (Facility facilityElement : facilities) {
                List<User> users = getPerunBl().getFacilitiesManagerBl().getAllowedUsers(sess, facilityElement);
                for (User userElement : users) {
                    attribute = getPerunBl().getAttributesManagerBl().getAttribute(sess, facilityElement, userElement, attrDef.getName());
                    listOfRichAttributes.add(new RichAttribute(facilityElement, userElement, attribute));
                }
            }
        }
    } else {
        throw new InternalErrorException("There is unrecognized namespace in attribute " + attrDef);
    }
    return listOfRichAttributes;
}
Also used : Group(cz.metacentrum.perun.core.api.Group) User(cz.metacentrum.perun.core.api.User) Set(java.util.Set) HashSet(java.util.HashSet) Attribute(cz.metacentrum.perun.core.api.Attribute) RichAttribute(cz.metacentrum.perun.core.api.RichAttribute) ArrayList(java.util.ArrayList) RichAttribute(cz.metacentrum.perun.core.api.RichAttribute) Vo(cz.metacentrum.perun.core.api.Vo) List(java.util.List) ArrayList(java.util.ArrayList) Member(cz.metacentrum.perun.core.api.Member) HashSet(java.util.HashSet) Resource(cz.metacentrum.perun.core.api.Resource) Host(cz.metacentrum.perun.core.api.Host) InternalErrorException(cz.metacentrum.perun.core.api.exceptions.InternalErrorException) Facility(cz.metacentrum.perun.core.api.Facility)

Example 13 with RichAttribute

use of cz.metacentrum.perun.core.api.RichAttribute in project perun by CESNET.

the class AttributesManagerBlImpl method setAttribute.

public void setAttribute(PerunSession sess, User user, Attribute attribute) throws InternalErrorException, WrongAttributeValueException, WrongAttributeAssignmentException, WrongReferenceAttributeValueException {
    if (attribute.getValue() == null) {
        removeAttribute(sess, user, attribute);
        return;
    }
    if (setAttributeWithoutCheck(sess, user, attribute)) {
        checkAttributeValue(sess, user, attribute);
        this.checkAttributeDependencies(sess, new RichAttribute(user, null, attribute));
    }
}
Also used : RichAttribute(cz.metacentrum.perun.core.api.RichAttribute)

Example 14 with RichAttribute

use of cz.metacentrum.perun.core.api.RichAttribute in project perun by CESNET.

the class AttributesManagerBlImpl method removeAllUserFacilityAttributes.

public void removeAllUserFacilityAttributes(PerunSession sess, User user) throws InternalErrorException, WrongAttributeValueException, WrongReferenceAttributeValueException {
    List<RichAttribute<User, Facility>> userFacilitiesAttributes = getAttributesManagerImpl().getAllUserFacilityRichAttributes(sess, user);
    //remove all non-virtual attributes
    getAttributesManagerImpl().removeAllUserFacilityAttributes(sess, user);
    getPerunBl().getAuditer().log(sess, "All non-virtual user-facility attributes removed for all facilities and {}", user);
    for (RichAttribute<User, Facility> richAttribute : userFacilitiesAttributes) {
        try {
            checkAttributeValue(sess, richAttribute.getSecondaryHolder(), richAttribute.getPrimaryHolder(), new Attribute(richAttribute.getAttribute()));
            this.checkAttributeDependencies(sess, richAttribute);
        } catch (WrongAttributeAssignmentException ex) {
            throw new ConsistencyErrorException(ex);
        }
    }
    for (RichAttribute<User, Facility> attribute : userFacilitiesAttributes) {
        try {
            getAttributesManagerImpl().changedAttributeHook(sess, attribute.getSecondaryHolder(), attribute.getPrimaryHolder(), new Attribute(attribute.getAttribute()));
        } catch (WrongAttributeValueException ex) {
            //TODO better exception here
            throw new InternalErrorException(ex);
        } catch (WrongReferenceAttributeValueException ex) {
            //TODO better exception here
            throw new InternalErrorException(ex);
        }
    }
}
Also used : ConsistencyErrorException(cz.metacentrum.perun.core.api.exceptions.ConsistencyErrorException) User(cz.metacentrum.perun.core.api.User) RichAttribute(cz.metacentrum.perun.core.api.RichAttribute) Attribute(cz.metacentrum.perun.core.api.Attribute) RichAttribute(cz.metacentrum.perun.core.api.RichAttribute) WrongAttributeAssignmentException(cz.metacentrum.perun.core.api.exceptions.WrongAttributeAssignmentException) WrongReferenceAttributeValueException(cz.metacentrum.perun.core.api.exceptions.WrongReferenceAttributeValueException) Facility(cz.metacentrum.perun.core.api.Facility) InternalErrorException(cz.metacentrum.perun.core.api.exceptions.InternalErrorException) WrongAttributeValueException(cz.metacentrum.perun.core.api.exceptions.WrongAttributeValueException)

Example 15 with RichAttribute

use of cz.metacentrum.perun.core.api.RichAttribute in project perun by CESNET.

the class AttributesManagerBlImpl method removeAttribute.

public void removeAttribute(PerunSession sess, String key, AttributeDefinition attribute) throws InternalErrorException, WrongAttributeValueException, WrongAttributeAssignmentException, WrongReferenceAttributeValueException {
    if (removeAttributeWithoutCheck(sess, key, attribute)) {
        this.checkAttributeValue(sess, key, new Attribute(attribute));
        this.checkAttributeDependencies(sess, new RichAttribute(key, null, new Attribute(attribute)));
    }
}
Also used : Attribute(cz.metacentrum.perun.core.api.Attribute) RichAttribute(cz.metacentrum.perun.core.api.RichAttribute) RichAttribute(cz.metacentrum.perun.core.api.RichAttribute)

Aggregations

RichAttribute (cz.metacentrum.perun.core.api.RichAttribute)42 Attribute (cz.metacentrum.perun.core.api.Attribute)29 AbstractPerunIntegrationTest (cz.metacentrum.perun.core.AbstractPerunIntegrationTest)14 AttributeDefinition (cz.metacentrum.perun.core.api.AttributeDefinition)14 Test (org.junit.Test)14 Vo (cz.metacentrum.perun.core.api.Vo)11 ArrayList (java.util.ArrayList)6 Group (cz.metacentrum.perun.core.api.Group)3 Facility (cz.metacentrum.perun.core.api.Facility)2 User (cz.metacentrum.perun.core.api.User)2 InternalErrorException (cz.metacentrum.perun.core.api.exceptions.InternalErrorException)2 Host (cz.metacentrum.perun.core.api.Host)1 Member (cz.metacentrum.perun.core.api.Member)1 Resource (cz.metacentrum.perun.core.api.Resource)1 ConsistencyErrorException (cz.metacentrum.perun.core.api.exceptions.ConsistencyErrorException)1 WrongAttributeAssignmentException (cz.metacentrum.perun.core.api.exceptions.WrongAttributeAssignmentException)1 WrongAttributeValueException (cz.metacentrum.perun.core.api.exceptions.WrongAttributeValueException)1 WrongReferenceAttributeValueException (cz.metacentrum.perun.core.api.exceptions.WrongReferenceAttributeValueException)1 HashSet (java.util.HashSet)1 List (java.util.List)1