Skip to content

Commit

Permalink
fix: profile resources loading optimization
Browse files Browse the repository at this point in the history
- Do not get member for each resource, as the member is same for
  all resources from the same VO.
- Temporarily disabled loading of assigned groups. Common users can't
  call this method, plus loading logic merges all groups together without
  any mapping to actual resources in the table.
  This needs to be completely reworked.
  • Loading branch information
zlamalp committed Nov 29, 2022
1 parent 9b25eed commit 02b3c1a
Showing 1 changed file with 24 additions and 36 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package cz.metacentrum.perun.wui.profile.pages.resources;


import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.inject.Inject;
import com.google.web.bindery.event.shared.EventBus;
Expand All @@ -24,7 +22,6 @@
import cz.metacentrum.perun.wui.model.PerunException;
import cz.metacentrum.perun.wui.model.beans.Group;
import cz.metacentrum.perun.wui.model.beans.Member;
import cz.metacentrum.perun.wui.model.beans.Resource;
import cz.metacentrum.perun.wui.model.beans.RichResource;
import cz.metacentrum.perun.wui.model.beans.Vo;
import cz.metacentrum.perun.wui.profile.client.PerunProfileUtils;
Expand Down Expand Up @@ -129,7 +126,7 @@ private void loadMemberAndResources(Integer userId, int voId) {
@Override
public void onFinished(JavaScriptObject result) {
Member member = (Member) result;
loadResources(member.getId());
loadResources(member);
}

@Override
Expand All @@ -144,15 +141,15 @@ public void onLoadingStart() {
});
}

private void loadResources(int id) {
ResourcesManager.getAssignedRichResources(id, new JsonEvents() {
private void loadResources(Member member) {
ResourcesManager.getAssignedRichResources(member.getId(), new JsonEvents() {
@Override
public void onFinished(JavaScriptObject result) {
List<RichResource> resources = JsUtils.jsoAsList(result);
if (resources.isEmpty()) {
getView().setResources(new HashMap<>());
} else {
loadGroupsForResources(resources);
loadGroupsForResources(member, resources);
}
}

Expand All @@ -168,44 +165,28 @@ public void onLoadingStart() {
});
}

private void loadGroupsForResources(List<RichResource> richResources) {
private void loadGroupsForResources(Member member, List<RichResource> richResources) {
final Integer userId = PerunProfileUtils.getUserId(placeManager);

final PlaceRequest request = placeManager.getCurrentPlaceRequest();

if (userId == null) {
placeManager.revealErrorPlace(request.getNameToken());
} else {

AbstractRepeatingJsonEvent memberEvent = new AbstractRepeatingJsonEvent(richResources.size()) {
@Override
public void done(List<JavaScriptObject> results) {
List<Member> members = JsUtils.jsListAsList(results);
loadGroupsFromMembers(richResources, members);
}

@Override
public void erred(PerunException exception) {
getView().setResourcesDataError(exception);
}

@Override
public void started() {
// do nothing
}
};

for (RichResource resource : richResources) {
MembersManager.getMemberByUser(userId, resource.getVoId(), memberEvent);
}
loadGroupsFromMember(richResources, member);
}
}

private void loadGroupsFromMembers(List<RichResource> resources, List<Member> members) {
private void loadGroupsFromMember(List<RichResource> resources, Member member) {

AbstractRepeatingJsonEvent event = new AbstractRepeatingJsonEvent(resources.size()) {

AbstractRepeatingJsonEvent resourceGroupsEvent = new AbstractRepeatingJsonEvent(members.size()) {
@Override
public void done(List<JavaScriptObject> results) {

// FIXME - this doesnt makes sense as AbstractRepeatingJsonEvent merges all results together
// and we don't have list of "list", but just the list of all groups assigned to all resources
// without any mapping (by id or other) between group and resource.
List<List<Group>> resourcesGroups = new ArrayList<>();

for (JavaScriptObject result : results) {
Expand All @@ -232,11 +213,18 @@ public void started() {
}
};

for (int i = 0; i < members.size(); i++) {
Member member = members.get(i);
Resource resource = resources.get(i);
/* FIXME - temporary disabled
for (RichResource resource : resources) {
ResourcesManager.getAssignedGroups(resource.getId(), member.getId(), event);
}
*/

ResourcesManager.getAssignedGroups(resource.getId(), member.getId(), resourceGroupsEvent);
// pass with empty groups
Map<RichResource, List<Group>> resourceWithGroups = new HashMap<>();
for (RichResource resource : resources) {
resourceWithGroups.put(resource,new ArrayList<Group>());
}
getView().setResources(resourceWithGroups);

}
}

0 comments on commit 02b3c1a

Please sign in to comment.