From 86b82e96c47210e34edc28ff1084fa815c63566c Mon Sep 17 00:00:00 2001 From: cramakri <cramakri> Date: Mon, 11 Mar 2013 09:53:09 +0000 Subject: [PATCH] BIS-246 SP-538 : Improve performance of experiment browser rendering by caching repeatedly used values. SVN: 28576 --- .../ProjectSelectionTreeGridContainer.java | 53 +++++++++++-------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeGridContainer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeGridContainer.java index 192ad3b960b..97a5f6147df 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeGridContainer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeGridContainer.java @@ -206,6 +206,18 @@ public final class ProjectSelectionTreeGridContainer extends LayoutContainer imp columnConfig.setRenderer(new WidgetTreeGridCellRenderer<ModelData>() { + // Messages that are used repeatedly + final String projectSelectorDetailsLinkLabel = viewContext + .getMessage(Dict.PROJECT_SELECTOR_DETAILS_LINK_LABEL); + + final String projectSelectorDetailsLinkTooltip = viewContext + .getMessage(Dict.PROJECT_SELECTOR_DETAILS_LINK_TOOLTIP); + + final String projectSelectorDescriptionNotAvailable = viewContext + .getMessage(Dict.PROJECT_SELECTOR_DESCRIPTION_NOT_AVAILABLE); + + final String spaceMessage = viewContext.getMessage(Dict.SPACE); + @Override public Widget getWidget(ModelData model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<ModelData> store, Grid<ModelData> grid) @@ -226,8 +238,8 @@ public final class ProjectSelectionTreeGridContainer extends LayoutContainer imp { final Space space = (Space) model.get(ModelDataPropertyNames.OBJECT); final Widget result = new InlineHTML(space.getCode()); - result.setTitle(createTooltipText(viewContext.getMessage(Dict.SPACE), - space.getCode(), space.getDescription())); + result.setTitle(createTooltipText(spaceMessage, space.getCode(), + space.getDescription())); return result; } @@ -247,11 +259,9 @@ public final class ProjectSelectionTreeGridContainer extends LayoutContainer imp } }; final Widget detailsLink = - LinkRenderer.getLinkWidget(viewContext - .getMessage(Dict.PROJECT_SELECTOR_DETAILS_LINK_LABEL), - listener, href); - detailsLink.setTitle(viewContext - .getMessage(Dict.PROJECT_SELECTOR_DETAILS_LINK_TOOLTIP)); + LinkRenderer.getLinkWidget(projectSelectorDetailsLinkLabel, listener, + href); + detailsLink.setTitle(projectSelectorDetailsLinkTooltip); projectLinks.put(project, detailsLink); final FlowPanel panel = @@ -267,8 +277,7 @@ public final class ProjectSelectionTreeGridContainer extends LayoutContainer imp String descriptionOrNull) { String description = - descriptionOrNull == null ? viewContext - .getMessage(Dict.PROJECT_SELECTOR_DESCRIPTION_NOT_AVAILABLE) + descriptionOrNull == null ? projectSelectorDescriptionNotAvailable : StringEscapeUtils.unescapeHtml(descriptionOrNull); return entity + " code: " + code + "\nDescription: " + description; } @@ -382,22 +391,24 @@ public final class ProjectSelectionTreeGridContainer extends LayoutContainer imp /** adds items for given <var>projects</var> to the tree */ private void addToStore(List<Project> projects) { - for (Space space : getSortedSpaces(projects)) + Set<Space> spaces = getSortedSpaces(projects); + HashMap<Space, ModelData> spaceToModelMap = new HashMap<Space, ModelData>(); + List<ModelData> spaceModels = new ArrayList<ModelData>(spaces.size()); + for (Space space : spaces) { SpaceItemModel spaceModel = new SpaceItemModel(space); - tree.getTreeStore().add(spaceModel, true); + spaceModels.add(spaceModel); + spaceToModelMap.put(space, spaceModel); + } + tree.getTreeStore().add(spaceModels, true); + for (Project project : projects) + { + ModelData spaceModel = spaceToModelMap.get(project.getSpace()); tree.setLeaf(spaceModel, false); - for (Project project : projects) - { - if (project.getSpace().equals(space)) - { - ProjectItemModel projectModel = new ProjectItemModel(project); - tree.getTreeStore().add(spaceModel, projectModel, false); - tree.setLeaf(projectModel, true); - } - } + ProjectItemModel projectModel = new ProjectItemModel(project); + tree.getTreeStore().add(spaceModel, projectModel, false); + tree.setLeaf(projectModel, true); } - } /** @return a sorted set of spaces of given <var>projects</var> */ -- GitLab