From 4deb8c7cd6edd9c5fd0c4d5373d49cb695c3cac8 Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Mon, 16 May 2022 22:45:34 -0700 Subject: [PATCH 1/2] Render titles for wiki links to aliases --- wiki/src/org/labkey/wiki/WikiCollections.java | 20 +++++++++++++++---- wiki/src/org/labkey/wiki/WikiManager.java | 3 ++- .../org/labkey/wiki/WikiSelectManager.java | 10 +++++++--- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/wiki/src/org/labkey/wiki/WikiCollections.java b/wiki/src/org/labkey/wiki/WikiCollections.java index 92b3988ab73..e1b60aff9cd 100644 --- a/wiki/src/org/labkey/wiki/WikiCollections.java +++ b/wiki/src/org/labkey/wiki/WikiCollections.java @@ -35,6 +35,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Comparator; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.LinkedList; @@ -55,9 +56,10 @@ public class WikiCollections private final Map _treesByRowId; private final Map _treesByName; private final Map _nameTitleMap; + private final Map _nameAliasTitleMap; private final List _names; private final Map _namesByAlias; - private final MultiValuedMap _aliasesByRowsId; + private final MultiValuedMap _aliasesByRowId; private final List _adminNavTree; private final List _nonAdminNavTree; @@ -123,14 +125,19 @@ public WikiCollections(Container c) _adminNavTree = createNavTree(c, true); _nonAdminNavTree = createNavTree(c, false); - _aliasesByRowsId = new TableSelector(CommSchema.getInstance().getTableInfoPageAliases(), PageFlowUtil.set("Alias", "PageRowId"), SimpleFilter.createContainerFilter(c), null) + _aliasesByRowId = new TableSelector(CommSchema.getInstance().getTableInfoPageAliases(), PageFlowUtil.set("Alias", "PageRowId"), SimpleFilter.createContainerFilter(c), null) .mapStream() .map(map->new Alias((Integer)map.get("PageRowId"), (String)map.get("Alias"))) .sorted(Comparator.comparing(Alias::alias, String.CASE_INSENSITIVE_ORDER)) .collect(LabKeyCollectors.toMultiValuedMap(record->record.pageRowId, record->record.alias)); - _namesByAlias = _aliasesByRowsId.entries().stream() + _namesByAlias = _aliasesByRowId.entries().stream() .filter(e->_treesByRowId.get(e.getKey()) != null) // Just in case - ignore orphaned aliases .collect(LabKeyCollectors.toCaseInsensitiveMap(Map.Entry::getValue, e->_treesByRowId.get(e.getKey()).getName())); + Map nameAliasTitleMap = new HashMap<>(_nameTitleMap); + _aliasesByRowId.entries().stream() + .filter(e->_treesByRowId.get(e.getKey()) != null) // Just in case - ignore orphaned aliases + .forEach(e->nameAliasTitleMap.put(e.getValue(), _treesByRowId.get(e.getKey()).getTitle())); + _nameAliasTitleMap = Collections.unmodifiableMap(nameAliasTitleMap); } public record Alias(int pageRowId, String alias) {} @@ -232,6 +239,11 @@ Map getNameTitleMap() return _nameTitleMap; } + public Map getNameAndAliasTitleMap() + { + return _nameAliasTitleMap; + } + String getName(int rowId) { WikiTree tree = getWikiTree(rowId); @@ -270,7 +282,7 @@ private Set populateWikiTrees(WikiTree root, Set trees) // Ordered by alias (case-insensitive) Collection getAliases(int rowId) { - return _aliasesByRowsId.get(rowId); + return _aliasesByRowId.get(rowId); } // Returns null for no match diff --git a/wiki/src/org/labkey/wiki/WikiManager.java b/wiki/src/org/labkey/wiki/WikiManager.java index 19f2c9556eb..13562d09aa6 100644 --- a/wiki/src/org/labkey/wiki/WikiManager.java +++ b/wiki/src/org/labkey/wiki/WikiManager.java @@ -514,7 +514,8 @@ public FormattedHtml formatWiki(Container c, Wiki wiki, WikiVersion wikiversion) if (null != wiki.getEntityId()) attachPrefix = WikiController.getDownloadURL(wiki.lookupContainer(), wiki, "").getLocalURIString(); - Map nameTitleMap = WikiSelectManager.getNameTitleMap(c); + // When rendering wikis, we want aliases to resolve to their titles as well + Map nameTitleMap = WikiSelectManager.getNameAndAliasTitleMap(c); //get formatter specified for this version WikiRenderer w = wikiversion.getRenderer(hrefPrefix, attachPrefix, nameTitleMap, wiki.getAttachments()); diff --git a/wiki/src/org/labkey/wiki/WikiSelectManager.java b/wiki/src/org/labkey/wiki/WikiSelectManager.java index 4f398a8167b..034bab750c0 100644 --- a/wiki/src/org/labkey/wiki/WikiSelectManager.java +++ b/wiki/src/org/labkey/wiki/WikiSelectManager.java @@ -76,6 +76,10 @@ public static Map getNameTitleMap(Container c) return getWikiCollections(c).getNameTitleMap(); } + public static Map getNameAndAliasTitleMap(Container c) + { + return getWikiCollections(c).getNameAndAliasTitleMap(); + } // Get a single wiki by rowId public static Wiki getWiki(Container c, int rowId) @@ -151,11 +155,11 @@ static Wiki getWikiFromDatabase(Container c, String name) if (null == wiki) { //Didn't find it with case-sensitive lookup, try case-sensitive (in case the - //underlying database is case sensitive) + //underlying database is case-sensitive) //Bug 2225 wiki = new TableSelector(CommSchema.getInstance().getTableInfoPages(), - SimpleFilter.createContainerFilter(c).addWhereClause("LOWER(name) = LOWER(?)", new Object[] { name }), - null).getObject(Wiki.class); + SimpleFilter.createContainerFilter(c).addWhereClause("LOWER(name) = LOWER(?)", new Object[] { name }), + null).getObject(Wiki.class); } return wiki; From a29c7d75068894b4d1b9194e97c908c69cc2e61d Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Tue, 17 May 2022 09:05:34 -0700 Subject: [PATCH 2/2] Reference issue in comment --- wiki/src/org/labkey/wiki/WikiManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wiki/src/org/labkey/wiki/WikiManager.java b/wiki/src/org/labkey/wiki/WikiManager.java index 13562d09aa6..5196ffcaff9 100644 --- a/wiki/src/org/labkey/wiki/WikiManager.java +++ b/wiki/src/org/labkey/wiki/WikiManager.java @@ -514,7 +514,7 @@ public FormattedHtml formatWiki(Container c, Wiki wiki, WikiVersion wikiversion) if (null != wiki.getEntityId()) attachPrefix = WikiController.getDownloadURL(wiki.lookupContainer(), wiki, "").getLocalURIString(); - // When rendering wikis, we want aliases to resolve to their titles as well + // When rendering wikis, we want aliases to resolve to their titles as well, Issue 45497 Map nameTitleMap = WikiSelectManager.getNameAndAliasTitleMap(c); //get formatter specified for this version