docs: @Override
      public Iterator findParentGroups(IGroupMember gm) throws GroupsException {
          if (isTreeRefreshRequired()) {
              refreshTree();
          }
          log.debug("Invoking findParentGroups() for group member: {}", gm.getKey());
          Set<IEntityGroup> rslt = new HashSet<>();
          final IEntityGroup root = getRootGroup();
          if (gm.isGroup()) {
              IEntityGroup group = (IEntityGroup) gm;
              log.debug(
                      "Group member {} is group {}, {}",
                      gm.getKey(),
                      group.getLocalKey(),
                      group.getName());
              getParentGroups(group.getLocalKey(), rslt);
          } else if (!gm.isGroup() && gm.getLeafType().equals(root.getLeafType())) {
              Object[] groupKeys = getPersonGroupMemberKeys(gm);
              for (Object o : groupKeys) {
                  String s = (String) o;
                  IEntityGroup group = groupsTree.getGroups().get(s);
                  rslt.add(group);
                  rslt.addAll(getParentGroups(s, new HashSet<>()));
              }
          }
          return rslt.iterator();
      }