1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.jetspeed.portalsite;
18
19 import java.lang.reflect.Proxy;
20 import java.util.HashMap;
21 import java.util.Iterator;
22 import java.util.List;
23 import java.util.Locale;
24 import java.util.Map;
25 import java.util.Set;
26
27 import junit.framework.Test;
28 import junit.framework.TestSuite;
29
30 import org.apache.jetspeed.components.test.AbstractSpringTestCase;
31 import org.apache.jetspeed.om.folder.Folder;
32 import org.apache.jetspeed.om.folder.MenuDefinition;
33 import org.apache.jetspeed.om.page.Link;
34 import org.apache.jetspeed.om.page.Page;
35 import org.apache.jetspeed.page.PageManager;
36 import org.apache.jetspeed.page.document.NodeSet;
37 import org.apache.jetspeed.page.document.proxy.NodeProxy;
38 import org.apache.jetspeed.portalsite.impl.MenuImpl;
39 import org.apache.jetspeed.portalsite.view.SiteView;
40 import org.apache.jetspeed.profiler.ProfileLocator;
41 import org.apache.jetspeed.profiler.impl.JetspeedProfileLocator;
42
43 /***
44 * TestPortalSite
45 *
46 * @author <a href="mailto:rwatler@apache.org">Randy Watler</a>
47 * @version $Id: TestPortalSite.java 598577 2007-11-27 09:55:10Z woonsan $
48 */
49 public class TestPortalSite extends AbstractSpringTestCase
50 {
51 /***
52 * pageManager - PageManager component
53 */
54 private PageManager pageManager;
55
56 /***
57 * portalSite - PortalSite component
58 */
59 private PortalSite portalSite;
60
61 /***
62 * default locale
63 */
64 private Locale defaultLocale;
65
66
67
68
69 protected void setUp() throws Exception
70 {
71 super.setUp();
72 this.pageManager = (PageManager) ctx.getBean("pageManager");
73 this.portalSite = (PortalSite) ctx.getBean("portalSite");
74 this.defaultLocale = Locale.getDefault();
75 Locale.setDefault(Locale.ENGLISH);
76 }
77
78
79
80
81 protected void tearDown() throws Exception
82 {
83 super.tearDown();
84 Locale.setDefault(this.defaultLocale);
85 }
86
87 /***
88 * Start the tests.
89 *
90 * @param args the arguments. Not used
91 */
92 public static void main(String args[])
93 {
94 junit.awtui.TestRunner.main(new String[] {TestPortalSite.class.getName()});
95 }
96
97 /***
98 * Define test suite.
99 *
100 * @return the test suite
101 */
102 public static Test suite()
103 {
104
105 return new TestSuite(TestPortalSite.class);
106 }
107
108 /***
109 * Define configuration paths.
110 *
111 * @return array of paths.
112 */
113 protected String[] getConfigurations()
114 {
115 return new String[] {"/JETSPEED-INF/spring/test-spring.xml"};
116 }
117
118 /***
119 * testPageManagerSetup - Test PageManager test configuration
120 *
121 * @throws Exception
122 */
123 public void testPageManagerSetup() throws Exception
124 {
125 assertNotNull(pageManager);
126 Folder rootFolder = pageManager.getFolder("/");
127 assertNotNull(rootFolder);
128 Page rootPage0 = pageManager.getPage("/page0.psml");
129 assertNotNull(rootPage0);
130 assertEquals(rootFolder.getPage("page0.psml"), rootPage0);
131 Link rootLink0 = pageManager.getLink("/link0.link");
132 assertNotNull(rootLink0);
133 assertEquals(rootFolder.getLink("link0.link"), rootLink0);
134 }
135
136 public void testRelativeNavigations() throws Exception
137 {
138 JetspeedProfileLocator locator = new JetspeedProfileLocator();
139
140 locator.init(null, "/");
141 locator.add("hostname", true, false, "dash");
142 locator.add("user", true, false, "joe");
143 locator.add("page", false, false, "home");
144 SiteView profileView = new SiteView(pageManager, locator);
145 assertEquals("/_hostname/dash/_user/joe,/_hostname/dash,/", profileView.getSearchPathsString());
146
147 locator = new JetspeedProfileLocator();
148 locator.init(null, "/");
149 locator.add("hostname", true, false, "dash");
150 locator.add("user", true, false, "joe");
151 locator.add("navigation", false, true, "/");
152 locator.add("hostname", true, false, "dash");
153 locator.add("role", true, false, "user");
154 locator.add("page", false, false, "home");
155 profileView = new SiteView(pageManager, locator);
156 assertEquals("/_hostname/dash/_user/joe,/_hostname/dash/_role/user,/_hostname/dash,/", profileView.getSearchPathsString());
157
158 locator = new JetspeedProfileLocator();
159
160 locator.init(null, "/");
161 locator.add("navigation", false, true, "subsite-root");
162 locator.add("hostname", true, false, "localhost");
163 locator.add("user", true, false, "sublocal");
164 locator.add("navigation", false, true, "subsite-root");
165 locator.add("hostname", true, false, "localhost");
166 locator.add("role", true, false, "somerole");
167 locator.add("path", false, false, "home");
168 profileView = new SiteView(pageManager, locator);
169 assertEquals("/__subsite-root/_hostname/localhost/_user/sublocal,/__subsite-root/_hostname/localhost/_role/somerole,/__subsite-root/_hostname/localhost,/__subsite-root", profileView.getSearchPathsString());
170 }
171
172 /***
173 * testSiteView - Test SiteView operation
174 *
175 * @throws Exception
176 */
177 public void testSiteView() throws Exception
178 {
179
180 SiteView baseView = new SiteView(pageManager);
181 assertEquals("/", baseView.getSearchPathsString());
182 Folder rootFolderProxy = baseView.getRootFolderProxy();
183 assertNotNull(rootFolderProxy);
184 assertEquals("/", rootFolderProxy.getName());
185 assertEquals("root", rootFolderProxy.getTitle());
186 assertEquals("/", extractFileSystemPathFromId(rootFolderProxy.getId()));
187 assertEquals(4, rootFolderProxy.getFolders().size());
188 Iterator foldersIter = rootFolderProxy.getFolders().iterator();
189 assertEquals("folder0", ((Folder)foldersIter.next()).getName());
190 assertEquals("folder1", ((Folder)foldersIter.next()).getName());
191 assertEquals("folder2", ((Folder)foldersIter.next()).getName());
192 assertEquals("folder3", ((Folder)foldersIter.next()).getName());
193 assertEquals(4, rootFolderProxy.getPages().size());
194 Iterator pagesIter = rootFolderProxy.getPages().iterator();
195 assertEquals("page2.psml", ((Page)pagesIter.next()).getName());
196 assertEquals("page1.psml", ((Page)pagesIter.next()).getName());
197 assertEquals("page0.psml", ((Page)pagesIter.next()).getName());
198 assertEquals("hidden.psml", ((Page)pagesIter.next()).getName());
199 assertEquals(2, rootFolderProxy.getLinks().size());
200 Iterator linksIter = rootFolderProxy.getLinks().iterator();
201 assertEquals("link1.link", ((Link)linksIter.next()).getName());
202 assertEquals("link0.link", ((Link)linksIter.next()).getName());
203 Page rootPage0Proxy = rootFolderProxy.getPage("page0.psml");
204 assertNotNull(rootPage0Proxy);
205 assertEquals(rootFolderProxy, rootPage0Proxy.getParent());
206 assertEquals("page0.psml", rootPage0Proxy.getName());
207 assertEquals("/page0.psml", extractFileSystemPathFromId(rootPage0Proxy.getId()));
208 Page rootHiddenProxy = rootFolderProxy.getPage("hidden.psml");
209 assertNotNull(rootHiddenProxy);
210 assertEquals("hidden.psml", rootHiddenProxy.getName());
211 assertTrue(rootHiddenProxy.isHidden());
212 Link rootLink0Proxy = rootFolderProxy.getLink("link0.link");
213 assertNotNull(rootLink0Proxy);
214 assertEquals(rootFolderProxy, rootLink0Proxy.getParent());
215 assertEquals("link0.link", rootLink0Proxy.getName());
216 assertEquals("/link0.link", extractFileSystemPathFromId(rootLink0Proxy.getId()));
217 Folder rootFolder0Proxy = rootFolderProxy.getFolder("folder0");
218 assertNotNull(rootFolder0Proxy);
219 assertEquals(rootFolderProxy, rootFolder0Proxy.getParent());
220 assertEquals(1, rootFolder0Proxy.getPages().size());
221 assertEquals(null, rootFolder0Proxy.getLinks());
222 assertEquals("folder0", rootFolder0Proxy.getName());
223 assertEquals("/folder0", extractFileSystemPathFromId(rootFolder0Proxy.getId()));
224 Page folder0Page0Proxy = rootFolder0Proxy.getPage("page0.psml");
225 assertNotNull(folder0Page0Proxy);
226 assertEquals(rootFolder0Proxy, folder0Page0Proxy.getParent());
227 assertEquals("page0.psml", folder0Page0Proxy.getName());
228 assertEquals("/folder0/page0.psml", extractFileSystemPathFromId(folder0Page0Proxy.getId()));
229
230
231 Folder rootFolderProxyByPath = (Folder)baseView.getNodeProxy("/", null, false, false);
232 assertNotNull(rootFolderProxyByPath);
233 assertEquals(rootFolderProxy, rootFolderProxyByPath);
234 Folder rootFolder0ProxyByPath = (Folder)baseView.getNodeProxy("/folder0/", null, false, false);
235 assertNotNull(rootFolder0ProxyByPath);
236 assertEquals(rootFolder0Proxy, rootFolder0ProxyByPath);
237 Page folder0Page0ProxyByPath = (Page)baseView.getNodeProxy("/folder0/page0.psml", null, false, false);
238 assertNotNull(folder0Page0ProxyByPath);
239 assertEquals(folder0Page0Proxy, folder0Page0ProxyByPath);
240 folder0Page0ProxyByPath = (Page)baseView.getNodeProxy("page0.psml", rootFolder0Proxy, false, false);
241 assertNotNull(folder0Page0ProxyByPath);
242 assertEquals(folder0Page0Proxy, folder0Page0ProxyByPath);
243 List rootPageProxiesByPath = baseView.getNodeProxies("/page?.psml", null, false, false);
244 assertNotNull(rootPageProxiesByPath);
245 assertEquals(3,rootPageProxiesByPath.size());
246 assertTrue(rootPageProxiesByPath.contains(rootPage0Proxy));
247 List rootFolderProxiesByPath = baseView.getNodeProxies("/*/", null, false, false);
248 assertNotNull(rootFolderProxiesByPath);
249 assertEquals(4,rootFolderProxiesByPath.size());
250 assertTrue(rootFolderProxiesByPath.contains(rootFolder0Proxy));
251 List folderPageProxiesByPath = baseView.getNodeProxies("*/p*[0-9].psml", rootFolderProxy, false, false);
252 assertNotNull(folderPageProxiesByPath);
253 assertEquals(2,folderPageProxiesByPath.size());
254 assertTrue(folderPageProxiesByPath.contains(folder0Page0Proxy));
255
256
257 SiteView aggregateView = new SiteView(pageManager, "/_user/user,/_role/role0,/_group/group,/");
258 assertEquals("/_user/user,/_role/role0,/_group/group,/", aggregateView.getSearchPathsString());
259 rootFolderProxy = aggregateView.getRootFolderProxy();
260 assertNotNull(rootFolderProxy);
261 assertEquals("/", rootFolderProxy.getName());
262 assertEquals("user root", rootFolderProxy.getTitle());
263 assertEquals("/_user/user", extractFileSystemPathFromId(rootFolderProxy.getId()));
264 assertEquals(4, rootFolderProxy.getFolders().size());
265 assertEquals(4, rootFolderProxy.getPages().size());
266 assertEquals(2, rootFolderProxy.getLinks().size());
267 rootPage0Proxy = rootFolderProxy.getPage("page0.psml");
268 assertNotNull(rootPage0Proxy);
269 assertEquals(rootFolderProxy, rootPage0Proxy.getParent());
270 assertEquals("page0.psml", rootPage0Proxy.getName());
271 assertEquals("/page0.psml", extractFileSystemPathFromId(rootPage0Proxy.getId()));
272 List rootPage0ProxyMenus = rootPage0Proxy.getMenuDefinitions();
273 assertNotNull(rootPage0ProxyMenus);
274 assertEquals(2 + aggregateView.getStandardMenuNames().size(), rootPage0ProxyMenus.size());
275 Iterator menusIter = rootPage0ProxyMenus.iterator();
276 MenuDefinition rootPage0ProxyTopMenu = (MenuDefinition)menusIter.next();
277 assertEquals("top", rootPage0ProxyTopMenu.getName());
278 assertEquals("/", rootPage0ProxyTopMenu.getOptions());
279 assertEquals(2, rootPage0ProxyTopMenu.getDepth());
280 assertEquals("dhtml-pull-down", rootPage0ProxyTopMenu.getSkin());
281 MenuDefinition rootPage0ProxyBreadCrumbMenu = (MenuDefinition)menusIter.next();
282 assertEquals("bread-crumbs", rootPage0ProxyBreadCrumbMenu.getName());
283 assertEquals("./", rootPage0ProxyBreadCrumbMenu.getOptions());
284 assertEquals(true, rootPage0ProxyBreadCrumbMenu.isPaths());
285 for (int i = 0; (i < aggregateView.getStandardMenuNames().size()); i++)
286 {
287 assertTrue(aggregateView.getStandardMenuNames().contains(((MenuDefinition)menusIter.next()).getName()));
288 }
289 Page rootPage2Proxy = rootFolderProxy.getPage("page2.psml");
290 assertNotNull(rootPage2Proxy);
291 assertEquals(rootFolderProxy, rootPage2Proxy.getParent());
292 assertEquals("page2.psml", rootPage2Proxy.getName());
293 assertEquals("/_user/user/page2.psml", extractFileSystemPathFromId(rootPage2Proxy.getId()));
294 List rootPage2ProxyMenus = rootPage2Proxy.getMenuDefinitions();
295 assertNotNull(rootPage2ProxyMenus);
296 assertEquals(2 + aggregateView.getStandardMenuNames().size(), rootPage2ProxyMenus.size());
297 menusIter = rootPage2ProxyMenus.iterator();
298 MenuDefinition rootPage2ProxyTopMenu = (MenuDefinition)menusIter.next();
299 assertEquals("top", rootPage2ProxyTopMenu.getName());
300 assertEquals("/", rootPage2ProxyTopMenu.getOptions());
301 assertEquals(1, rootPage2ProxyTopMenu.getDepth());
302 MenuDefinition rootPage2ProxyBreadCrumbMenu = (MenuDefinition)menusIter.next();
303 assertEquals("bread-crumbs", rootPage2ProxyBreadCrumbMenu.getName());
304 for (int i = 0; (i < aggregateView.getStandardMenuNames().size()); i++)
305 {
306 assertTrue(aggregateView.getStandardMenuNames().contains(((MenuDefinition)menusIter.next()).getName()));
307 }
308 rootLink0Proxy = rootFolderProxy.getLink("link0.link");
309 assertNotNull(rootLink0Proxy);
310 assertEquals(rootFolderProxy, rootLink0Proxy.getParent());
311 assertEquals("link0.link", rootLink0Proxy.getName());
312 assertEquals("/_group/group/link0.link", extractFileSystemPathFromId(rootLink0Proxy.getId()));
313 rootFolder0Proxy = rootFolderProxy.getFolder("folder0");
314 assertNotNull(rootFolder0Proxy);
315 assertEquals(rootFolderProxy, rootFolder0Proxy.getParent());
316 assertEquals(1, rootFolder0Proxy.getPages().size());
317 assertEquals(null, rootFolder0Proxy.getLinks());
318 assertEquals(null, rootFolder0Proxy.getFolders());
319 assertEquals("folder0", rootFolder0Proxy.getName());
320 assertEquals("folder0", rootFolder0Proxy.getTitle());
321 assertEquals("/folder0", extractFileSystemPathFromId(rootFolder0Proxy.getId()));
322 folder0Page0Proxy = rootFolder0Proxy.getPage("page0.psml");
323 assertNotNull(folder0Page0Proxy);
324 assertEquals(rootFolder0Proxy, folder0Page0Proxy.getParent());
325 assertEquals("page0.psml", folder0Page0Proxy.getName());
326 assertEquals("/folder0/page0.psml", extractFileSystemPathFromId(folder0Page0Proxy.getId()));
327 Folder rootFolder1Proxy = rootFolderProxy.getFolder("folder1");
328 assertNotNull(rootFolder1Proxy);
329 assertEquals(rootFolderProxy, rootFolder1Proxy.getParent());
330 assertEquals(2, rootFolder1Proxy.getPages().size());
331 assertEquals(null, rootFolder1Proxy.getLinks());
332 assertEquals(null, rootFolder1Proxy.getFolders());
333 assertEquals("folder1", rootFolder1Proxy.getName());
334 assertEquals("group folder1", rootFolder1Proxy.getTitle());
335 assertEquals("/_user/user/folder1", extractFileSystemPathFromId(rootFolder1Proxy.getId()));
336
337
338 aggregateView = new SiteView(pageManager, "/__subsite-root");
339 assertEquals("/__subsite-root", aggregateView.getSearchPathsString());
340 rootFolderProxy = aggregateView.getRootFolderProxy();
341 assertNotNull(rootFolderProxy);
342 assertEquals("/", rootFolderProxy.getName());
343 assertEquals("subsite root", rootFolderProxy.getTitle());
344 assertEquals("/__subsite-root", extractFileSystemPathFromId(rootFolderProxy.getId()));
345 assertEquals(null, rootFolderProxy.getFolders());
346 assertEquals(1, rootFolderProxy.getPages().size());
347 assertEquals(1, rootFolderProxy.getLinks().size());
348
349
350 JetspeedProfileLocator locator = new JetspeedProfileLocator();
351 locator.init(null, "/");
352 SiteView profileView = new SiteView(pageManager, locator);
353 assertEquals("/", profileView.getSearchPathsString());
354 locator = new JetspeedProfileLocator();
355 locator.init(null, "/");
356 locator.add("user", true, false, "user");
357 locator.add("page", false, false, "default-page");
358 profileView = new SiteView(pageManager, locator);
359 assertEquals("/_user/user,/", profileView.getSearchPathsString());
360 locator = new JetspeedProfileLocator();
361 locator.init(null, "/");
362 locator.add("page", false, false, "default-page");
363 locator.add("user", true, false, "user");
364 locator.add("mediatype", true, false, "html");
365 locator.add("language", true, false, "en");
366 locator.add("country", true, false, "US");
367 profileView = new SiteView(pageManager, locator);
368 assertEquals("/_user/user/_mediatype/html,/_user/user,/", profileView.getSearchPathsString());
369 locator = new JetspeedProfileLocator();
370 locator.init(null, "/");
371 locator.add("page", false, false, "default-page");
372 locator.add("role", true, false, "role0");
373 locator.add("role", true, false, "role1");
374 profileView = new SiteView(pageManager, locator);
375 assertEquals("/_role/role0,/_role/role1,/", profileView.getSearchPathsString());
376 locator = new JetspeedProfileLocator();
377 locator.init(null, "/");
378 locator.add("user", true, false, "user");
379 locator.add("navigation", false, true, "/");
380 locator.add("role", true, false, "role0");
381 locator.add("navigation", false, true, "/");
382 locator.add("group", true, false, "group");
383 locator.add("page", false, false, "default-page");
384 profileView = new SiteView(pageManager, locator);
385 assertEquals("/_user/user,/_role/role0,/_group/group,/", profileView.getSearchPathsString());
386
387 locator = new JetspeedProfileLocator();
388 locator.init(null, "/");
389 locator.add("hostname", true, false, "dash");
390 locator.add("user", true, false, "joe");
391 locator.add("page", false, false, "home");
392 profileView = new SiteView(pageManager, locator);
393 assertEquals("/_hostname/dash/_user/joe,/_hostname/dash,/", profileView.getSearchPathsString());
394
395 locator = new JetspeedProfileLocator();
396 locator.init(null, "/");
397 locator.add("navigation", false, true, "subsite-root");
398 profileView = new SiteView(pageManager, locator);
399 assertEquals("/__subsite-root", profileView.getSearchPathsString());
400 Map locators = new HashMap();
401 locator = new JetspeedProfileLocator();
402 locator.init(null, "/");
403 locator.add("role", true, false, "role0");
404 locator.add("role", true, false, "role1");
405 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
406 locator = new JetspeedProfileLocator();
407 locator.init(null, "/");
408 locator.add("user", true, false, "user");
409 locator.add("navigation", false, true, "/");
410 locator.add("group", true, false, "group");
411 locators.put("alternate-locator-name", locator);
412 profileView = new SiteView(pageManager, locators);
413 assertEquals("/_role/role0,/_role/role1,/_user/user,/_group/group,/", profileView.getSearchPathsString());
414 rootFolderProxy = profileView.getRootFolderProxy();
415 assertNotNull(rootFolderProxy);
416 assertEquals("/", rootFolderProxy.getName());
417 assertEquals("user root", rootFolderProxy.getTitle());
418 assertEquals("/_role/role0", extractFileSystemPathFromId(rootFolderProxy.getId()));
419 assertEquals(ProfileLocator.PAGE_LOCATOR, extractLocatorNameFromProxy(rootFolderProxy));
420 rootPage2Proxy = rootFolderProxy.getPage("page2.psml");
421 assertNotNull(rootPage2Proxy);
422 assertEquals("page2.psml", rootPage2Proxy.getName());
423 assertEquals("/_role/role0/page2.psml", extractFileSystemPathFromId(rootPage2Proxy.getId()));
424 assertEquals(ProfileLocator.PAGE_LOCATOR, extractLocatorNameFromProxy(rootPage2Proxy));
425 rootFolder1Proxy = rootFolderProxy.getFolder("folder1");
426 assertNotNull(rootFolder1Proxy);
427 assertEquals("folder1", rootFolder1Proxy.getName());
428 assertEquals("group folder1", rootFolder1Proxy.getTitle());
429 assertEquals("/_user/user/folder1", extractFileSystemPathFromId(rootFolder1Proxy.getId()));
430 assertEquals("alternate-locator-name", extractLocatorNameFromProxy(rootFolder1Proxy));
431 Page folder1Page1Proxy = rootFolder1Proxy.getPage("page1.psml");
432 assertNotNull(folder1Page1Proxy);
433 assertEquals("page1.psml", folder1Page1Proxy.getName());
434 assertEquals("/_group/group/folder1/page1.psml", extractFileSystemPathFromId(folder1Page1Proxy.getId()));
435 assertEquals("alternate-locator-name", extractLocatorNameFromProxy(folder1Page1Proxy));
436 }
437
438 /***
439 * testPortalSiteSetup - Test PortalSite test configuration
440 *
441 * @throws Exception
442 */
443 public void testPotalSiteSetup() throws Exception
444 {
445 assertNotNull(portalSite);
446 PortalSiteSessionContext sessionContext = portalSite.newSessionContext();
447 assertNotNull(sessionContext);
448 JetspeedProfileLocator locator = new JetspeedProfileLocator();
449 locator.init(null, "/");
450 locator.add("user", true, false, "user");
451 locator.add("navigation", false, true, "/");
452 locator.add("role", true, false, "role0");
453 locator.add("role", true, false, "role1");
454 locator.add("navigation", false, true, "/");
455 locator.add("group", true, false, "group");
456 Map locators = new HashMap();
457 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
458 PortalSiteRequestContext requestContext = sessionContext.newRequestContext(locators);
459 assertNotNull(requestContext);
460 Page requestPageProxy = requestContext.getPage();
461 assertNotNull(requestPageProxy);
462 assertEquals("page2.psml", requestPageProxy.getName());
463 assertEquals("/_user/user/page2.psml", extractFileSystemPathFromId(requestPageProxy.getId()));
464 Folder requestFolderProxy = requestContext.getFolder();
465 assertNotNull(requestFolderProxy);
466 assertEquals("/", requestFolderProxy.getName());
467 assertEquals("/_user/user", extractFileSystemPathFromId(requestFolderProxy.getId()));
468 NodeSet requestSiblingPageProxies = requestContext.getSiblingPages();
469 assertNotNull(requestSiblingPageProxies);
470 assertEquals(3, requestSiblingPageProxies.size());
471 assertNotNull(requestSiblingPageProxies.get("page0.psml"));
472 assertEquals("/page0.psml", extractFileSystemPathFromId(requestSiblingPageProxies.get("page0.psml").getId()));
473 assertNotNull(requestSiblingPageProxies.get("page1.psml"));
474 assertEquals("/page1.psml", extractFileSystemPathFromId(requestSiblingPageProxies.get("page1.psml").getId()));
475 assertNotNull(requestSiblingPageProxies.get("page2.psml"));
476 assertEquals("/_user/user/page2.psml", extractFileSystemPathFromId(requestSiblingPageProxies.get("page2.psml").getId()));
477 Folder requestParentFolderProxy = requestContext.getParentFolder();
478 assertNull(requestParentFolderProxy);
479 NodeSet requestSiblingFolderProxies = requestContext.getSiblingFolders();
480 assertNotNull(requestSiblingFolderProxies);
481 assertEquals(3, requestSiblingFolderProxies.size());
482 assertNotNull(requestSiblingFolderProxies.get("folder0"));
483 assertEquals("/folder0", extractFileSystemPathFromId(requestSiblingFolderProxies.get("folder0").getId()));
484 assertNotNull(requestSiblingFolderProxies.get("folder1"));
485 assertEquals("/_user/user/folder1", extractFileSystemPathFromId(requestSiblingFolderProxies.get("folder1").getId()));
486 assertNotNull(requestSiblingFolderProxies.get("folder2"));
487 assertEquals("/folder2", extractFileSystemPathFromId(requestSiblingFolderProxies.get("folder2").getId()));
488 Folder requestRootFolderProxy = requestContext.getRootFolder();
489 assertNotNull(requestRootFolderProxy);
490 assertEquals("/", requestRootFolderProxy.getName());
491 assertEquals("/_user/user", extractFileSystemPathFromId(requestRootFolderProxy.getId()));
492 NodeSet requestRootLinkProxies = requestContext.getRootLinks();
493 assertNotNull(requestRootLinkProxies);
494 assertEquals(2, requestRootLinkProxies.size());
495 assertNotNull(requestRootLinkProxies.get("link0.link"));
496 assertEquals("/_group/group/link0.link", extractFileSystemPathFromId(requestRootLinkProxies.get("link0.link").getId()));
497 assertNotNull(requestRootLinkProxies.get("link1.link"));
498 assertEquals("/link1.link", extractFileSystemPathFromId(requestRootLinkProxies.get("link1.link").getId()));
499 }
500
501 /***
502 * testPortalSiteRequests - Test PortalSite request path logic
503 *
504 * @throws Exception
505 */
506 public void testPotalSiteRequests() throws Exception
507 {
508 assertNotNull(portalSite);
509 PortalSiteSessionContext sessionContext = portalSite.newSessionContext();
510 assertNotNull(sessionContext);
511 JetspeedProfileLocator locator = new JetspeedProfileLocator();
512 locator.init(null, "/");
513 locator.add("page", false, false, "default-page");
514 locator.add("user", true, false, "user");
515 Map locators = new HashMap();
516 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
517 PortalSiteRequestContext requestContext = sessionContext.newRequestContext(locators);
518 assertNotNull(requestContext);
519 Page requestPageProxy = requestContext.getPage();
520 assertNotNull(requestPageProxy);
521 assertEquals("page2.psml", requestPageProxy.getName());
522 assertEquals("/_user/user/page2.psml", extractFileSystemPathFromId(requestPageProxy.getId()));
523
524 locator = new JetspeedProfileLocator();
525 locator.init(null, "/");
526 locator.add("page", false, false, null);
527 locator.add("user", true, false, "user");
528 locators = new HashMap();
529 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
530 requestContext = sessionContext.newRequestContext(locators);
531 assertNotNull(requestContext);
532 requestPageProxy = requestContext.getPage();
533 assertNotNull(requestPageProxy);
534 assertEquals("page2.psml", requestPageProxy.getName());
535 assertEquals("/_user/user/page2.psml", extractFileSystemPathFromId(requestPageProxy.getId()));
536
537 locator = new JetspeedProfileLocator();
538 locator.init(null, "/");
539 locator.add("page", false, false, "page1");
540 locator.add("user", true, false, "user");
541 locators = new HashMap();
542 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
543 requestContext = sessionContext.newRequestContext(locators);
544 assertNotNull(requestContext);
545 requestPageProxy = requestContext.getPage();
546 assertNotNull(requestPageProxy);
547 assertEquals("page1.psml", requestPageProxy.getName());
548 assertEquals("/page1.psml", extractFileSystemPathFromId(requestPageProxy.getId()));
549
550 locator = new JetspeedProfileLocator();
551 locator.init(null, "/");
552 locator.add("page", false, false, "folder1/");
553 locator.add("user", true, false, "user");
554 locators = new HashMap();
555 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
556 requestContext = sessionContext.newRequestContext(locators);
557 assertNotNull(requestContext);
558 requestPageProxy = requestContext.getPage();
559 assertNotNull(requestPageProxy);
560 assertEquals("page0.psml", requestPageProxy.getName());
561 assertEquals("/_user/user/folder1/page0.psml", extractFileSystemPathFromId(requestPageProxy.getId()));
562
563 locator = new JetspeedProfileLocator();
564 locator.init(null, "/");
565 locator.add("page", false, false, "/folder0/");
566 locator.add("user", true, false, "user");
567 locators = new HashMap();
568 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
569 requestContext = sessionContext.newRequestContext(locators);
570 assertNotNull(requestContext);
571 requestPageProxy = requestContext.getPage();
572 assertNotNull(requestPageProxy);
573 assertEquals("page0.psml", requestPageProxy.getName());
574 assertEquals("/folder0/page0.psml", extractFileSystemPathFromId(requestPageProxy.getId()));
575
576 locator = new JetspeedProfileLocator();
577 locator.init(null, "/");
578 locator.add("page", false, false, "/folder3/default-folder0/");
579 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
580 requestContext = sessionContext.newRequestContext(locators);
581 assertNotNull(requestContext);
582 requestPageProxy = requestContext.getPage();
583 assertNotNull(requestPageProxy);
584 assertEquals("page1.psml", requestPageProxy.getName());
585 assertEquals("/folder3/default-folder1/page1.psml", extractFileSystemPathFromId(requestPageProxy.getId()));
586 }
587
588 /***
589 * testPortalSiteMenus - Test PortalSite menu generation
590 *
591 * @throws Exception
592 */
593 public void testPotalSiteMenus() throws Exception
594 {
595 assertNotNull(portalSite);
596 PortalSiteSessionContext sessionContext = portalSite.newSessionContext();
597 assertNotNull(sessionContext);
598
599
600 JetspeedProfileLocator locator = new JetspeedProfileLocator();
601 locator.init(null, "/");
602 locator.add("user", true, false, "user");
603 locator.add("mediatype", true, false, "html");
604 Map locators = new HashMap();
605 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
606 locator = new JetspeedProfileLocator();
607 locator.init(null, "/");
608 locator.add("role", true, false, "role0");
609 locators.put("role", locator);
610 locator = new JetspeedProfileLocator();
611 locator.init(null, "/");
612 locator.add("group", true, false, "group");
613 locators.put("group", locator);
614 PortalSiteRequestContext requestContext = sessionContext.newRequestContext(locators);
615 assertNotNull(requestContext);
616 Set customMenuNames = requestContext.getCustomMenuNames();
617 assertNotNull(customMenuNames);
618 assertEquals(2, customMenuNames.size());
619 assertTrue(customMenuNames.contains("top"));
620 assertTrue(customMenuNames.contains("bread-crumbs"));
621 Menu topMenu = requestContext.getMenu("top");
622 assertNotNull(topMenu);
623 assertEquals(MenuElement.MENU_ELEMENT_TYPE, topMenu.getElementType());
624 assertNull(topMenu.getParentMenu());
625 assertEquals("user root", topMenu.getTitle());
626 assertEquals("user", topMenu.getShortTitle());
627 assertEquals("dhtml-pull-down", topMenu.getSkin());
628 assertEquals("top", topMenu.getName());
629 assertEquals("/", topMenu.getUrl());
630 assertFalse(topMenu.isEmpty());
631 List topMenuElements = topMenu.getElements();
632 assertNotNull(topMenuElements);
633 assertEquals(7, topMenuElements.size());
634 Iterator menuElementsIter = topMenuElements.iterator();
635 while (menuElementsIter.hasNext())
636 {
637 MenuElement element = (MenuElement)menuElementsIter.next();
638 if (element.getElementType().equals(MenuElement.MENU_ELEMENT_TYPE) && element.getTitle().equals("folder0"))
639 {
640 assertTrue(element instanceof Menu);
641 assertEquals("/folder0", ((Menu)element).getUrl());
642 assertTrue(((Menu)element).getParentMenu() == topMenu);
643 assertFalse(((Menu)element).isEmpty());
644 List elements = ((Menu)element).getElements();
645 assertNotNull(elements);
646 assertEquals(1, elements.size());
647 assertTrue(elements.get(0) instanceof MenuOption);
648 assertEquals("/folder0/page0.psml", ((MenuOption)elements.get(0)).getUrl());
649 assertEquals("dhtml-pull-down", element.getSkin());
650 }
651 else if (element.getElementType().equals(MenuElement.MENU_ELEMENT_TYPE) && element.getTitle().equals("group folder1"))
652 {
653 assertTrue(element instanceof Menu);
654 assertEquals("/folder1", ((Menu)element).getUrl());
655 assertTrue(((Menu)element).getParentMenu() == topMenu);
656 assertFalse(((Menu)element).isEmpty());
657 List elements = ((Menu)element).getElements();
658 assertNotNull(elements);
659 assertEquals(2, elements.size());
660 assertTrue(elements.get(0) instanceof MenuOption);
661 assertEquals("/folder1/page0.psml", ((MenuOption)elements.get(0)).getTitle());
662 assertTrue(elements.get(1) instanceof MenuOption);
663 assertEquals("/folder1/page1.psml", ((MenuOption)elements.get(1)).getTitle());
664 }
665 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/page2.psml"))
666 {
667 assertTrue(element instanceof MenuOption);
668 assertEquals("/page2.psml", ((MenuOption)element).getUrl());
669 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)element).getType());
670 }
671 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/page1.psml"))
672 {
673 assertTrue(element instanceof MenuOption);
674 assertEquals("/page1.psml", ((MenuOption)element).getUrl());
675 }
676 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/page0.psml"))
677 {
678 assertTrue(element instanceof MenuOption);
679 assertEquals("/page0.psml", ((MenuOption)element).getUrl());
680 }
681 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/link1.link"))
682 {
683 assertTrue(element instanceof MenuOption);
684 assertEquals("http://link1", ((MenuOption)element).getUrl());
685 assertEquals("top", ((MenuOption)element).getTarget());
686 assertEquals(MenuOption.LINK_OPTION_TYPE, ((MenuOption)element).getType());
687 }
688 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/link0.link"))
689 {
690 assertTrue(element instanceof MenuOption);
691 assertEquals("http://link0", ((MenuOption)element).getUrl());
692 assertNull(((MenuOption)element).getTarget());
693 assertEquals("dhtml-pull-down", element.getSkin());
694 }
695 else
696 {
697 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
698 }
699 }
700 assertTrue(topMenu.isSelected(requestContext));
701 MenuElement selected = topMenu.getSelectedElement(requestContext);
702 assertNotNull(selected);
703 assertEquals(MenuElement.OPTION_ELEMENT_TYPE, selected.getElementType());
704 assertTrue(selected instanceof MenuOption);
705 assertEquals("/page2.psml", ((MenuOption)selected).getUrl());
706 assertEquals("/page2.psml", selected.getTitle());
707 assertEquals("dhtml-pull-down", selected.getSkin());
708 assertFalse(((MenuImpl)topMenu).isElementRelative());
709 Menu breadCrumbsMenu = requestContext.getMenu("bread-crumbs");
710 assertNotNull(breadCrumbsMenu);
711 assertEquals("bread-crumbs", breadCrumbsMenu.getName());
712 assertEquals("/", breadCrumbsMenu.getUrl());
713 assertFalse(breadCrumbsMenu.isEmpty());
714 List breadCrumbsElements = breadCrumbsMenu.getElements();
715 assertNotNull(breadCrumbsElements);
716 assertEquals(1, breadCrumbsElements.size());
717 assertTrue(breadCrumbsElements.get(0) instanceof MenuOption);
718 assertEquals("/", ((MenuOption)breadCrumbsElements.get(0)).getUrl());
719 assertEquals(MenuOption.FOLDER_OPTION_TYPE, ((MenuOption)breadCrumbsElements.get(0)).getType());
720 assertTrue(((MenuImpl)breadCrumbsMenu).isElementRelative());
721
722
723 locator = new JetspeedProfileLocator();
724 locator.init(null, "/folder0");
725 locator.add("user", true, false, "user");
726 locator.add("mediatype", true, false, "html");
727 locators = new HashMap();
728 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
729 locator = new JetspeedProfileLocator();
730 locator.init(null, "/folder0");
731 locator.add("role", true, false, "role0");
732 locators.put("role", locator);
733 locator = new JetspeedProfileLocator();
734 locator.init(null, "/folder0");
735 locator.add("group", true, false, "group");
736 locators.put("group", locator);
737 requestContext = sessionContext.newRequestContext(locators);
738 assertNotNull(requestContext);
739 Menu topMenu2 = requestContext.getMenu("top");
740 assertNotNull(topMenu2);
741 assertTrue(topMenu == topMenu2);
742 Menu breadCrumbsMenu2 = requestContext.getMenu("bread-crumbs");
743 assertNotNull(breadCrumbsMenu2);
744 assertTrue(breadCrumbsMenu != breadCrumbsMenu2);
745 assertEquals("bread-crumbs", breadCrumbsMenu2.getName());
746 assertEquals("/folder0", breadCrumbsMenu2.getUrl());
747 assertFalse(breadCrumbsMenu2.isEmpty());
748 breadCrumbsElements = breadCrumbsMenu2.getElements();
749 assertNotNull(breadCrumbsElements);
750 assertEquals(2, breadCrumbsElements.size());
751 assertTrue(breadCrumbsElements.get(0) instanceof MenuOption);
752 assertEquals("/", ((MenuOption)breadCrumbsElements.get(0)).getUrl());
753 assertEquals(MenuOption.FOLDER_OPTION_TYPE, ((MenuOption)breadCrumbsElements.get(0)).getType());
754 assertEquals("/folder0", ((MenuOption)breadCrumbsElements.get(1)).getUrl());
755 assertEquals(MenuOption.FOLDER_OPTION_TYPE, ((MenuOption)breadCrumbsElements.get(1)).getType());
756 assertTrue(((MenuImpl)breadCrumbsMenu2).isElementRelative());
757 Menu hiddenMenu = requestContext.getMenu("override-hidden");
758 assertNotNull(hiddenMenu);
759 assertTrue(hiddenMenu.isEmpty());
760 Menu navigationsMenu = requestContext.getMenu("navigations");
761 assertNotNull(navigationsMenu);
762 assertTrue(navigationsMenu.isEmpty());
763
764
765 locator = new JetspeedProfileLocator();
766 locator.init(null, "/page1.psml");
767 locator.add("user", true, false, "user");
768 locator.add("mediatype", true, false, "html");
769 locators = new HashMap();
770 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
771 locator = new JetspeedProfileLocator();
772 locator.init(null, "/page1.psml");
773 locator.add("role", true, false, "role0");
774 locators.put("role", locator);
775 locator = new JetspeedProfileLocator();
776 locator.init(null, "/page1.psml");
777 locator.add("group", true, false, "group");
778 locators.put("group", locator);
779 requestContext = sessionContext.newRequestContext(locators);
780 assertNotNull(requestContext);
781 assertNull(requestContext.getMenu("no-such-menu"));
782 Menu topMenu3 = requestContext.getMenu("top");
783 assertNotNull(topMenu3);
784 assertTrue(topMenu == topMenu3);
785 Menu backMenu = requestContext.getMenu("back");
786 assertNotNull(backMenu);
787 assertTrue(backMenu.isEmpty());
788 assertNull(backMenu.getElements());
789 assertTrue(((MenuImpl)backMenu).isElementRelative());
790 assertEquals("back", backMenu.getName());
791 assertEquals("Back to", backMenu.getTitle());
792 assertEquals("Back to", backMenu.getShortTitle());
793 assertEquals("\u00bb", backMenu.getTitle(Locale.JAPANESE));
794 assertEquals("\u00bb", backMenu.getShortTitle(Locale.JAPANESE));
795 assertEquals("Back to", backMenu.getTitle(new Locale("xx")));
796 assertEquals("Back to", backMenu.getShortTitle(new Locale("xx")));
797 Menu breadcrumbsMenu = requestContext.getMenu("breadcrumbs");
798 assertNotNull(breadcrumbsMenu);
799 assertFalse(breadcrumbsMenu.isEmpty());
800 assertEquals("You are here:", breadcrumbsMenu.getTitle());
801 assertEquals("\u73fe\u5728\u30d1\u30b9\uff1a", breadcrumbsMenu.getTitle(Locale.JAPANESE));
802 navigationsMenu = requestContext.getMenu("navigations");
803 assertNotNull(navigationsMenu);
804 assertFalse(navigationsMenu.isEmpty());
805 List navigationsElements = navigationsMenu.getElements();
806 assertNotNull(navigationsElements);
807 assertEquals(6, navigationsElements.size());
808 menuElementsIter = navigationsElements.iterator();
809 while (menuElementsIter.hasNext())
810 {
811 MenuElement element = (MenuElement)menuElementsIter.next();
812 if (element.getElementType().equals(MenuElement.SEPARATOR_ELEMENT_TYPE) &&
813 (element instanceof MenuSeparator) &&
814 ((MenuSeparator)element).getText().equals("Folders"))
815 {
816 }
817 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("folder0"))
818 {
819 assertTrue(element instanceof MenuOption);
820 assertEquals(MenuOption.FOLDER_OPTION_TYPE, ((MenuOption)element).getType());
821 }
822 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("group folder1"))
823 {
824 assertTrue(element instanceof MenuOption);
825 assertEquals(MenuOption.FOLDER_OPTION_TYPE, ((MenuOption)element).getType());
826 }
827 else if (element.getElementType().equals(MenuElement.SEPARATOR_ELEMENT_TYPE) &&
828 (element instanceof MenuSeparator) &&
829 ((MenuSeparator)element).getText().equals("Additional Links"))
830 {
831 }
832 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/link1.link"))
833 {
834 assertTrue(element instanceof MenuOption);
835 assertEquals(MenuOption.LINK_OPTION_TYPE, ((MenuOption)element).getType());
836 }
837 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/link0.link"))
838 {
839 assertTrue(element instanceof MenuOption);
840 assertEquals(MenuOption.LINK_OPTION_TYPE, ((MenuOption)element).getType());
841 assertEquals("left-navigations", element.getSkin());
842 }
843 else
844 {
845 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
846 }
847 }
848 assertEquals("left-navigations", navigationsMenu.getSkin());
849 assertTrue(((MenuImpl)navigationsMenu).isElementRelative());
850 Menu pagesMenu = requestContext.getMenu("pages");
851 assertNotNull(pagesMenu);
852 assertFalse(pagesMenu.isEmpty());
853 List pagesElements = pagesMenu.getElements();
854 assertNotNull(pagesElements);
855 assertEquals(3, pagesElements.size());
856 menuElementsIter = pagesElements.iterator();
857 while (menuElementsIter.hasNext())
858 {
859 MenuElement element = (MenuElement)menuElementsIter.next();
860 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/page2.psml"))
861 {
862 assertTrue(element instanceof MenuOption);
863 assertEquals("/page2.psml", ((MenuOption)element).getUrl());
864 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)element).getType());
865 }
866 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/page1.psml"))
867 {
868 assertTrue(element instanceof MenuOption);
869 assertEquals("/page1.psml", ((MenuOption)element).getUrl());
870 }
871 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/page0.psml"))
872 {
873 assertTrue(element instanceof MenuOption);
874 assertEquals("/page0.psml", ((MenuOption)element).getUrl());
875 assertEquals("tabs", element.getSkin());
876 }
877 else
878 {
879 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
880 }
881 }
882 assertEquals("tabs", pagesMenu.getSkin());
883 assertTrue(((MenuImpl)pagesMenu).isElementRelative());
884
885
886 locator = new JetspeedProfileLocator();
887 locator.init(null, "/folder1");
888 locator.add("user", true, false, "user");
889 locator.add("mediatype", true, false, "html");
890 locators = new HashMap();
891 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
892 locator = new JetspeedProfileLocator();
893 locator.init(null, "/folder1");
894 locator.add("group", true, false, "group");
895 locators.put("group", locator);
896 requestContext = sessionContext.newRequestContext(locators);
897 assertNotNull(requestContext);
898 Menu backMenu2 = requestContext.getMenu("back");
899 assertNotNull(backMenu2);
900 assertFalse(backMenu2.isEmpty());
901 Menu topMenu4 = requestContext.getMenu("top");
902 assertNotNull(topMenu4);
903 assertTrue(topMenu != topMenu4);
904 Menu customMenu = requestContext.getMenu("custom");
905 assertNotNull(customMenu);
906 assertFalse(customMenu.isEmpty());
907 List customElements = customMenu.getElements();
908 assertNotNull(customElements);
909 assertEquals(12, customElements.size());
910 assertEquals("custom", customMenu.getName());
911 assertEquals("Top Menu", customMenu.getTitle());
912 assertEquals("Haut", customMenu.getTitle(Locale.FRENCH));
913 menuElementsIter = customElements.iterator();
914 for (int i = 0; ((i < 2) && menuElementsIter.hasNext()); i++)
915 {
916 MenuElement element = (MenuElement)menuElementsIter.next();
917 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/link0.link"))
918 {
919 assertTrue(element instanceof MenuOption);
920 assertEquals("http://link0", ((MenuOption)element).getUrl());
921 assertEquals(MenuOption.LINK_OPTION_TYPE, ((MenuOption)element).getType());
922 }
923 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/folder1/page1.psml"))
924 {
925 assertTrue(element instanceof MenuOption);
926 assertEquals("/folder1/page1.psml", ((MenuOption)element).getUrl());
927 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)element).getType());
928 }
929 else
930 {
931 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
932 }
933 }
934 if (menuElementsIter.hasNext())
935 {
936 MenuElement element = (MenuElement)menuElementsIter.next();
937 if (element.getElementType().equals(MenuElement.MENU_ELEMENT_TYPE) && element.getTitle().equals("user root"))
938 {
939 assertFalse(((Menu)element).isEmpty());
940 List nestedElements = ((Menu)element).getElements();
941 assertEquals(6, nestedElements.size());
942 Iterator nestedElementsIter = nestedElements.iterator();
943 if (nestedElementsIter.hasNext())
944 {
945 MenuElement nestedElement = (MenuElement)nestedElementsIter.next();
946 if (nestedElement.getElementType().equals(MenuElement.SEPARATOR_ELEMENT_TYPE) &&
947 (nestedElement instanceof MenuSeparator) &&
948 ((MenuSeparator)nestedElement).getText().equals("=== Current Page ==="))
949 {
950 }
951 else
952 {
953 fail("Unexpected nested menu element type/title: "+nestedElement.getElementType()+"/"+nestedElement.getTitle());
954 }
955 }
956 if (nestedElementsIter.hasNext())
957 {
958 MenuElement nestedElement = (MenuElement)nestedElementsIter.next();
959 if (nestedElement.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) &&
960 nestedElement.getTitle().equals("/folder1/page1.psml"))
961 {
962 assertTrue(nestedElement instanceof MenuOption);
963 assertEquals("/folder1/page1.psml", ((MenuOption)nestedElement).getUrl());
964 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)nestedElement).getType());
965 }
966 else
967 {
968 fail("Unexpected nested menu element type/title: "+nestedElement.getElementType()+"/"+nestedElement.getTitle());
969 }
970 }
971 if (nestedElementsIter.hasNext())
972 {
973 MenuElement nestedElement = (MenuElement)nestedElementsIter.next();
974 if (nestedElement.getElementType().equals(MenuElement.SEPARATOR_ELEMENT_TYPE) &&
975 (nestedElement instanceof MenuSeparator) &&
976 ((MenuSeparator)nestedElement).getText().equals("=== Top Pages ==="))
977 {
978 assertEquals("Top Pages", nestedElement.getTitle());
979 }
980 else
981 {
982 fail("Unexpected nested menu element type/title: "+nestedElement.getElementType()+"/"+nestedElement.getTitle());
983 }
984 }
985 for (int i = 0; ((i < 3) && nestedElementsIter.hasNext()); i++)
986 {
987 MenuElement nestedElement = (MenuElement)nestedElementsIter.next();
988 if (nestedElement.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) &&
989 nestedElement.getTitle().equals("/page2.psml"))
990 {
991 assertTrue(nestedElement instanceof MenuOption);
992 assertEquals("/page2.psml", ((MenuOption)nestedElement).getUrl());
993 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)nestedElement).getType());
994 }
995 else if (nestedElement.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) &&
996 nestedElement.getTitle().equals("/page1.psml"))
997 {
998 assertTrue(nestedElement instanceof MenuOption);
999 assertEquals("/page1.psml", ((MenuOption)nestedElement).getUrl());
1000 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)nestedElement).getType());
1001 }
1002 else if (nestedElement.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) &&
1003 nestedElement.getTitle().equals("/page0.psml"))
1004 {
1005 assertTrue(nestedElement instanceof MenuOption);
1006 assertEquals("/page0.psml", ((MenuOption)nestedElement).getUrl());
1007 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)nestedElement).getType());
1008 }
1009 else
1010 {
1011 fail("Unexpected nested menu element type/title: "+nestedElement.getElementType()+"/"+nestedElement.getTitle());
1012 }
1013 }
1014 }
1015 else
1016 {
1017 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
1018 }
1019 }
1020 if (menuElementsIter.hasNext())
1021 {
1022 MenuElement element = (MenuElement)menuElementsIter.next();
1023 if (element.getElementType().equals(MenuElement.SEPARATOR_ELEMENT_TYPE) &&
1024 (element instanceof MenuSeparator) &&
1025 ((MenuSeparator)element).getText().equals("=== More Options ==="))
1026 {
1027 }
1028 else
1029 {
1030 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
1031 }
1032 }
1033 for (int i = 0; ((i < 4) && menuElementsIter.hasNext()); i++)
1034 {
1035 MenuElement element = (MenuElement)menuElementsIter.next();
1036 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/link1.link"))
1037 {
1038 assertTrue(element instanceof MenuOption);
1039 assertEquals("http://link1", ((MenuOption)element).getUrl());
1040 assertEquals(MenuOption.LINK_OPTION_TYPE, ((MenuOption)element).getType());
1041 }
1042 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/page2.psml"))
1043 {
1044 assertTrue(element instanceof MenuOption);
1045 assertEquals("/page2.psml", ((MenuOption)element).getUrl());
1046 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)element).getType());
1047 }
1048 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/page1.psml"))
1049 {
1050 assertTrue(element instanceof MenuOption);
1051 assertEquals("/page1.psml", ((MenuOption)element).getUrl());
1052 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)element).getType());
1053 }
1054 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/folder1/page1.psml"))
1055 {
1056 assertTrue(element instanceof MenuOption);
1057 assertEquals("/folder1/page1.psml", ((MenuOption)element).getUrl());
1058 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)element).getType());
1059 }
1060 else
1061 {
1062 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
1063 }
1064 }
1065 if (menuElementsIter.hasNext())
1066 {
1067 MenuElement element = (MenuElement)menuElementsIter.next();
1068 if (element.getElementType().equals(MenuElement.SEPARATOR_ELEMENT_TYPE) &&
1069 (element instanceof MenuSeparator) &&
1070 ((MenuSeparator)element).getText().equals("=== Standard Menus ==="))
1071 {
1072 }
1073 else
1074 {
1075 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
1076 }
1077 }
1078 if (menuElementsIter.hasNext())
1079 {
1080 MenuElement element = (MenuElement)menuElementsIter.next();
1081 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("user root"))
1082 {
1083 assertTrue(element instanceof MenuOption);
1084 assertEquals("/", ((MenuOption)element).getUrl());
1085 assertEquals(MenuOption.FOLDER_OPTION_TYPE, ((MenuOption)element).getType());
1086 }
1087 else
1088 {
1089 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
1090 }
1091 }
1092 if (menuElementsIter.hasNext())
1093 {
1094 MenuElement element = (MenuElement)menuElementsIter.next();
1095 if (element.getElementType().equals(MenuElement.MENU_ELEMENT_TYPE) && element.getTitle().equals("navigations"))
1096 {
1097 assertTrue(element instanceof Menu);
1098 assertEquals("navigations", ((Menu)element).getName());
1099 }
1100 else
1101 {
1102 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
1103 }
1104 }
1105 if (menuElementsIter.hasNext())
1106 {
1107 MenuElement element = (MenuElement)menuElementsIter.next();
1108 if (element.getElementType().equals(MenuElement.MENU_ELEMENT_TYPE) && element.getTitle().equals("pages"))
1109 {
1110 assertTrue(element instanceof Menu);
1111 assertEquals("pages", ((Menu)element).getName());
1112 }
1113 else
1114 {
1115 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
1116 }
1117 }
1118 }
1119
1120 /***
1121 * testPortalSiteHiddenPageMenus - Test PortalSite menu generation for hidden pages
1122 *
1123 * @throws Exception
1124 */
1125 public void testPotalSiteHiddenPageMenus() throws Exception
1126 {
1127 assertNotNull(portalSite);
1128 PortalSiteSessionContext sessionContext = portalSite.newSessionContext();
1129 assertNotNull(sessionContext);
1130
1131
1132 JetspeedProfileLocator locator = new JetspeedProfileLocator();
1133 locator.init(null, "/");
1134 locator.add("user", true, false, "user");
1135 Map locators = new HashMap();
1136 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
1137 PortalSiteRequestContext requestContext = sessionContext.newRequestContext(locators);
1138 assertNotNull(requestContext);
1139 Menu topMenu = requestContext.getMenu("top");
1140 assertNotNull(topMenu);
1141 assertFalse(topMenu.isEmpty());
1142 List topMenuElements = topMenu.getElements();
1143 assertNotNull(topMenuElements);
1144 Iterator menuElementsIter = topMenuElements.iterator();
1145 boolean hiddenElement = false;
1146 while (menuElementsIter.hasNext())
1147 {
1148 MenuElement element = (MenuElement)menuElementsIter.next();
1149 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/hidden.psml"))
1150 {
1151 hiddenElement = true;
1152 }
1153 }
1154 assertFalse(hiddenElement);
1155 Menu pagesMenu = requestContext.getMenu("pages");
1156 assertNotNull(pagesMenu);
1157 assertFalse(pagesMenu.isEmpty());
1158 List pagesElements = pagesMenu.getElements();
1159 assertNotNull(pagesElements);
1160 menuElementsIter = pagesElements.iterator();
1161 hiddenElement = false;
1162 while (menuElementsIter.hasNext())
1163 {
1164 MenuElement element = (MenuElement)menuElementsIter.next();
1165 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/hidden.psml"))
1166 {
1167 hiddenElement = true;
1168 }
1169 }
1170 assertFalse(hiddenElement);
1171
1172
1173 locator = new JetspeedProfileLocator();
1174 locator.init(null, "/hidden.psml");
1175 locator.add("user", true, false, "user");
1176 locators = new HashMap();
1177 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
1178 requestContext = sessionContext.newRequestContext(locators);
1179 assertNotNull(requestContext);
1180 topMenu = requestContext.getMenu("top");
1181 assertNotNull(topMenu);
1182 assertFalse(topMenu.isEmpty());
1183 topMenuElements = topMenu.getElements();
1184 assertNotNull(topMenuElements);
1185 menuElementsIter = topMenuElements.iterator();
1186 hiddenElement = false;
1187 while (menuElementsIter.hasNext())
1188 {
1189 MenuElement element = (MenuElement)menuElementsIter.next();
1190 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/hidden.psml"))
1191 {
1192 hiddenElement = true;
1193 }
1194 }
1195 assertTrue(hiddenElement);
1196 pagesMenu = requestContext.getMenu("pages");
1197 assertNotNull(pagesMenu);
1198 assertFalse(pagesMenu.isEmpty());
1199 pagesElements = pagesMenu.getElements();
1200 assertNotNull(pagesElements);
1201 menuElementsIter = pagesElements.iterator();
1202 hiddenElement = false;
1203 while (menuElementsIter.hasNext())
1204 {
1205 MenuElement element = (MenuElement)menuElementsIter.next();
1206 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/hidden.psml"))
1207 {
1208 hiddenElement = true;
1209 }
1210 }
1211 assertTrue(hiddenElement);
1212
1213
1214 locator = new JetspeedProfileLocator();
1215 locator.init(null, "/");
1216 locator.add("user", true, false, "user");
1217 locators = new HashMap();
1218 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
1219 requestContext = sessionContext.newRequestContext(locators);
1220 assertNotNull(requestContext);
1221 topMenu = requestContext.getMenu("top");
1222 assertNotNull(topMenu);
1223 assertFalse(topMenu.isEmpty());
1224 topMenuElements = topMenu.getElements();
1225 assertNotNull(topMenuElements);
1226 menuElementsIter = topMenuElements.iterator();
1227 hiddenElement = false;
1228 while (menuElementsIter.hasNext())
1229 {
1230 MenuElement element = (MenuElement)menuElementsIter.next();
1231 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/hidden.psml"))
1232 {
1233 hiddenElement = true;
1234 }
1235 }
1236 assertFalse(hiddenElement);
1237 pagesMenu = requestContext.getMenu("pages");
1238 assertNotNull(pagesMenu);
1239 assertFalse(pagesMenu.isEmpty());
1240 pagesElements = pagesMenu.getElements();
1241 assertNotNull(pagesElements);
1242 menuElementsIter = pagesElements.iterator();
1243 hiddenElement = false;
1244 while (menuElementsIter.hasNext())
1245 {
1246 MenuElement element = (MenuElement)menuElementsIter.next();
1247 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/hidden.psml"))
1248 {
1249 hiddenElement = true;
1250 }
1251 }
1252 assertFalse(hiddenElement);
1253 }
1254
1255 /***
1256 * extractFileSystemPathFromId - utility to convert proxy ids to file system paths
1257 *
1258 * @param id proxy node id
1259 * @return files system path
1260 */
1261 private String extractFileSystemPathFromId(String id)
1262 {
1263 if ((id != null) && !id.equals(Folder.PATH_SEPARATOR) && id.endsWith(Folder.PATH_SEPARATOR))
1264 {
1265 return id.substring(0, id.length() - 1);
1266 }
1267 return id;
1268 }
1269
1270 /***
1271 * extractLocatorNameFromProxy - utility to access profile locator name from proxy
1272 *
1273 * @param proxy site view node proxy
1274 * @return locator name
1275 */
1276 private String extractLocatorNameFromProxy(Object proxy) throws Exception
1277 {
1278 return ((NodeProxy)Proxy.getInvocationHandler(proxy)).getLocatorName();
1279 }
1280 }