/* * * * Copyright (c) 2016. David Sowerby * * * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * * the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * * specific language governing permissions and limitations under the License. * */ package fixture; import com.google.common.collect.Lists; import com.google.inject.Inject; import fixture.testviews2.*; import uk.q3c.krail.core.eventbus.SessionBusProvider; import uk.q3c.krail.core.i18n.I18NKey; import uk.q3c.krail.core.i18n.LabelKey; import uk.q3c.krail.core.i18n.Translate; import uk.q3c.krail.core.navigate.URIFragmentHandler; import uk.q3c.krail.core.navigate.sitemap.DefaultUserSitemap; import uk.q3c.krail.core.navigate.sitemap.MasterSitemapNode; import uk.q3c.krail.core.navigate.sitemap.StandardPageKey; import uk.q3c.krail.core.navigate.sitemap.UserSitemapNode; import uk.q3c.krail.core.shiro.PageAccessControl; import uk.q3c.krail.core.view.KrailView; import uk.q3c.krail.testutil.i18n.TestLabelKey; import java.text.CollationKey; import java.text.Collator; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; /** * Provides a user sitemap with page layout: * <p> * -Public<br> * --Logout<br> * --ViewA<br> * ---ViewA1<br> * ----ViewA11<br> * -----ViewA111<br> excluded * --Login<br> * --Public Home * <p> * -Private<br> * --Private Home<br> * --ViewB<br> * ---ViewB1<br> * ----ViewB11<br> excluded * ----ViewB12<br> * -----ViewB121<br> * -----ViewB122<br> excluded * <br> * Insertion order ascending is set to be the same as UK alpha ascending <br> * <br> * Position index is set to be the reverse of alphabetic order * * @author dsowerby */ @SuppressWarnings("ALL") public class ReferenceUserSitemap extends DefaultUserSitemap { public String aURI = "public/a"; public Class<? extends KrailView> aViewClass = ViewA.class; public String a1URI = "public/a/a1"; public Class<? extends KrailView> a1ViewClass = ViewA1.class; public String a11URI = "public/a/a1/a11"; public Class<? extends KrailView> a11ViewClass = ViewA11.class; public String a111URI = "public/a/a1/a11/a111"; public Class<? extends KrailView> a111ViewClass = ViewA111.class; // excluded public String bURI = "private/b"; public Class<? extends KrailView> bViewClass = ViewB.class; public String b1URI = "private/b/b1"; public Class<? extends KrailView> b1ViewClass = ViewB1.class; public String b11URI = "private/b/b1/b11"; public Class<? extends KrailView> b11ViewClass = ViewB11.class; // excluded public String b12URI = "private/b/b1/b12"; public Class<? extends KrailView> b12ViewClass = ViewB12.class; public String b121URI = "private/b/b1/b12/b121"; public Class<? extends KrailView> b121ViewClass = ViewB121.class; public String b122URI = "private/b/b1/b12/b122"; public Class<? extends KrailView> b122ViewClass = ViewB122.class; // excluded public String loginURI = "public/login"; public String logoutURI = "public/logout"; public String privateURI = "private"; public String publicURI = "public"; public String privateHomeURI = "private/home"; public String publicHomeURI = "public/home"; public Class<? extends KrailView> loginViewClass = TestLoginView.class; public Class<? extends KrailView> logoutViewClass = TestLogoutView.class; public Class<? extends KrailView> privateHomeViewClass = TestPrivateHomeView.class; public Class<? extends KrailView> publicHomeViewClass = TestPublicHomeView.class; LinkedList<String> insertionOrder; Map<String, Integer> positionIndexes; private UserSitemapNode a11Node; private UserSitemapNode a111Node; private UserSitemapNode a1Node; private UserSitemapNode aNode; private UserSitemapNode b11Node; private UserSitemapNode b12Node; private UserSitemapNode b121Node; private UserSitemapNode b122Node; private UserSitemapNode b1Node; private UserSitemapNode bNode; private UserSitemapNode loginNode; private UserSitemapNode logoutNode; private UserSitemapNode privateHomeNode; private UserSitemapNode privateNode; private UserSitemapNode publicHomeNode; private UserSitemapNode publicNode; /** * Insertion order ascending is set to be the same as UK alpha ascending <br> * <br> * Position index is set to be the reverse of alphabetic order */ @Inject public ReferenceUserSitemap(Translate translate, URIFragmentHandler uriHandler, SessionBusProvider sessionBusProvider) { super(translate, uriHandler, sessionBusProvider); insertionOrder = new LinkedList<>(); positionIndexes = new HashMap<>(); insertionOrder.add(privateURI); positionIndexes.put(privateURI, 4); insertionOrder.add(publicURI); positionIndexes.put(publicURI, 2); insertionOrder.add(loginURI); positionIndexes.put(loginURI, 8); insertionOrder.add(logoutURI); positionIndexes.put(logoutURI, 7); insertionOrder.add(publicHomeURI); positionIndexes.put(publicHomeURI, 6); insertionOrder.add(bURI); positionIndexes.put(bURI, 3); insertionOrder.add(b1URI); positionIndexes.put(b1URI, 3); insertionOrder.add(b11URI); positionIndexes.put(b11URI, -1); //This one should not be in nav components insertionOrder.add(b12URI); positionIndexes.put(b12URI, 2); insertionOrder.add(b121URI); positionIndexes.put(b121URI, 1); insertionOrder.add(b122URI); positionIndexes.put(b122URI, -1);//This one should not be in nav components insertionOrder.add(aURI); positionIndexes.put(aURI, 5); insertionOrder.add(a1URI); positionIndexes.put(a1URI, 5); insertionOrder.add(a11URI); positionIndexes.put(a11URI, 5); insertionOrder.add(a111URI); positionIndexes.put(a111URI, -1);//This one should not be in nav components insertionOrder.add(privateHomeURI); positionIndexes.put(privateHomeURI, 13); } public void populate() { createStandardPages(); createPages(); } /** * Creates the nodes and pages for standard pages, including intermediate (public and private) pages. */ private void createStandardPages() { loginNode = createNode(loginURI, "login", loginViewClass, StandardPageKey.Log_In, PageAccessControl.PUBLIC); logoutNode = createNode(logoutURI, "logout", logoutViewClass, StandardPageKey.Log_Out, PageAccessControl.PUBLIC); privateHomeNode = createNode(privateHomeURI, "home", privateHomeViewClass, StandardPageKey.Private_Home, PageAccessControl.PUBLIC); publicHomeNode = createNode(publicHomeURI, "home", publicHomeViewClass, StandardPageKey.Public_Home, PageAccessControl.PUBLIC); publicNode = createNode(publicURI, "public", null, LabelKey.Public, PageAccessControl.PUBLIC); privateNode = createNode(privateURI, "private", null, LabelKey.Private, PageAccessControl.PERMISSION); addChild(publicNode, publicHomeNode); addChild(publicNode, loginNode); addChild(publicNode, logoutNode); addChild(privateNode, privateHomeNode); // addStandardPage(StandardPageKey.Log_In, loginNode); // addStandardPage(StandardPageKey.Log_Out, logoutNode); // addStandardPage(StandardPageKey.Public_Home, publicHomeNode); // addStandardPage(StandardPageKey.Private_Home, privateHomeNode); } public UserSitemapNode createNode(String fullURI, String uriSegment, Class<? extends KrailView> viewClass, I18NKey labelKey, PageAccessControl pageAccessControl, String... roles) { Collator collator = Collator.getInstance(); List<String> r = null; if (roles != null) { r = Lists.newArrayList(roles); } Integer id = insertionOrder.indexOf(fullURI); final Integer positionIndex = positionIndexes.get(fullURI); MasterSitemapNode masterNode = new MasterSitemapNode(id, uriSegment, viewClass, labelKey, positionIndex, pageAccessControl, r); UserSitemapNode node = new UserSitemapNode(masterNode); node.setLabel(getTranslate().from(labelKey)); CollationKey collationKey = collator.getCollationKey(node.getLabel()); node.setCollationKey(collationKey); return node; } private void createPages() { aNode = createNode(aURI, "a", aViewClass, TestLabelKey.ViewA, PageAccessControl.PUBLIC); a1Node = createNode(a1URI, "a1", a1ViewClass, TestLabelKey.ViewA1, PageAccessControl.PUBLIC); a11Node = createNode(a11URI, "a11", a11ViewClass, TestLabelKey.ViewA11, PageAccessControl.PUBLIC); a111Node = createNode(a111URI, "a111", a11ViewClass, TestLabelKey.ViewA111, PageAccessControl.PUBLIC); addChild(publicNode, aNode); addChild(aNode, a1Node); addChild(a1Node, a11Node); addChild(a11Node, a111Node); bNode = createNode(bURI, "b", bViewClass, TestLabelKey.ViewB, PageAccessControl.PERMISSION); b1Node = createNode(b1URI, "b1", b1ViewClass, TestLabelKey.ViewB1, PageAccessControl.PERMISSION); b11Node = createNode(b11URI, "b11", b1ViewClass, TestLabelKey.ViewB11, PageAccessControl.PERMISSION); b12Node = createNode(b12URI, "b12", b12ViewClass, TestLabelKey.ViewB12, PageAccessControl.PERMISSION); b121Node = createNode(b121URI, "b121", b121ViewClass, TestLabelKey.ViewB121, PageAccessControl.PERMISSION); b122Node = createNode(b122URI, "b122", b122ViewClass, TestLabelKey.ViewB122, PageAccessControl.PERMISSION); addChild(privateNode, bNode); addChild(bNode, b1Node); addChild(b1Node, b11Node); addChild(b1Node, b12Node); addChild(b12Node, b121Node); addChild(b12Node, b122Node); } public List<UserSitemapNode> publicSortedAlphaAscending() { List<UserSitemapNode> list = new LinkedList<>(); list.add(loginNode()); list.add(publicHomeNode()); list.add(aNode()); return list; } public UserSitemapNode loginNode() { return nodeFor(loginURI); } public UserSitemapNode publicHomeNode() { return nodeFor(publicHomeURI); } public UserSitemapNode aNode() { return nodeFor(aURI); } public List<UserSitemapNode> publicSortedAlphaDescending() { List<UserSitemapNode> list = new LinkedList<>(); list.add(aNode()); list.add(publicHomeNode()); list.add(loginNode()); return list; } public List<UserSitemapNode> publicSortedInsertionAscending() { List<UserSitemapNode> list = new LinkedList<>(); list.add(loginNode()); list.add(publicHomeNode()); list.add(aNode()); return list; } public List<UserSitemapNode> publicSortedInsertionDescending() { List<UserSitemapNode> list = new LinkedList<>(); list.add(aNode()); list.add(publicHomeNode()); list.add(loginNode()); return list; } public List<UserSitemapNode> publicSortedPositionAscending() { List<UserSitemapNode> list = new LinkedList<>(); list.add(aNode()); list.add(publicHomeNode()); list.add(loginNode()); return list; } public List<UserSitemapNode> publicSortedPositionDescending() { List<UserSitemapNode> list = new LinkedList<>(); list.add(loginNode()); list.add(publicHomeNode()); list.add(aNode()); return list; } public UserSitemapNode logoutNode() { return nodeFor(logoutURI); } public UserSitemapNode privateHomeNode() { return nodeFor(privateHomeURI); } public UserSitemapNode publicNode() { return nodeFor(publicURI); } public UserSitemapNode privateNode() { return nodeFor(privateURI); } public UserSitemapNode a1Node() { return nodeFor(a1URI); } public UserSitemapNode a11Node() { return nodeFor(a11URI); } public UserSitemapNode bNode() { return nodeFor(bURI); } public UserSitemapNode b1Node() { return nodeFor(b1URI); } public UserSitemapNode b11Node() { return nodeFor(b11URI); } public UserSitemapNode b121Node() { return nodeFor(b121URI); } public UserSitemapNode b122Node() { return nodeFor(b122URI); } public UserSitemapNode a111Node() { return nodeFor(a111URI); } public void setA1Node(UserSitemapNode a1Node) { this.a1Node = a1Node; } public UserSitemapNode b12Node() { return nodeFor(b12URI); } }