1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.jetspeed.page;
18
19
20 import java.util.ArrayList;
21 import java.util.Collection;
22 import java.util.Iterator;
23 import java.util.List;
24 import java.util.Locale;
25 import java.util.Map;
26
27 import junit.framework.Test;
28 import junit.framework.TestCase;
29 import junit.framework.TestSuite;
30
31 import org.apache.commons.collections.CollectionUtils;
32 import org.apache.jetspeed.JetspeedActions;
33 import org.apache.jetspeed.om.common.GenericMetadata;
34 import org.apache.jetspeed.om.common.SecurityConstraint;
35 import org.apache.jetspeed.om.common.SecurityConstraints;
36 import org.apache.jetspeed.om.folder.Folder;
37 import org.apache.jetspeed.om.folder.FolderNotFoundException;
38 import org.apache.jetspeed.om.folder.MenuDefinition;
39 import org.apache.jetspeed.om.folder.MenuExcludeDefinition;
40 import org.apache.jetspeed.om.folder.MenuIncludeDefinition;
41 import org.apache.jetspeed.om.folder.MenuOptionsDefinition;
42 import org.apache.jetspeed.om.folder.MenuSeparatorDefinition;
43 import org.apache.jetspeed.om.page.Document;
44 import org.apache.jetspeed.om.page.Fragment;
45 import org.apache.jetspeed.om.page.Link;
46 import org.apache.jetspeed.om.page.Page;
47 import org.apache.jetspeed.om.preference.FragmentPreference;
48 import org.apache.jetspeed.page.document.DocumentNotFoundException;
49 import org.apache.jetspeed.page.psml.CastorXmlPageManager;
50
51 /***
52 * TestCastorXmlPageManager
53 *
54 * @author <a href="raphael@apache.org">Rapha\u00ebl Luta</a>
55 * @author <a href="rwatler@apache.org">Randy Watler</a>
56 * @version $Id: TestCastorXmlPageManager.java 553584 2007-07-05 18:09:45Z taylor $
57 */
58 public class TestCastorXmlPageManager extends TestCase implements PageManagerTestShared
59 {
60 private String testPage002 = "/test002.psml";
61 private String testPage003 = "/test003.psml";
62 private String testPage004 = "/folder2/test004.psml";
63 private String testFolder2 = "/folder2";
64 private String testFolder3 = "/folder3";
65 private String testLink002 = "/test002.link";
66 private String testLink003 = "/test003.link";
67
68 protected CastorXmlPageManager pageManager;
69
70
71
72
73
74
75 protected void setUp() throws Exception
76 {
77 super.setUp();
78 pageManager = Shared.makeCastorXMLPageManager("pages", false, false);
79 }
80
81 /***
82 * <p>
83 * tearDown
84 * </p>
85 *
86 * @see junit.framework.TestCase#tearDown()
87 * @throws java.lang.Exception
88 */
89 protected void tearDown() throws Exception
90 {
91 super.tearDown();
92 }
93
94 /***
95 * Defines the testcase name for JUnit.
96 *
97 * @param name
98 * the testcase's name.
99 */
100 public TestCastorXmlPageManager( String name )
101 {
102 super(name);
103 }
104
105 /***
106 * Start the tests.
107 *
108 * @param args
109 * the arguments. Not used
110 */
111 public static void main( String args[] )
112 {
113 junit.awtui.TestRunner.main(new String[]{TestCastorXmlPageManager.class.getName()});
114 }
115
116 /***
117 * Creates the test suite.
118 *
119 * @return a test suite (<code>TestSuite</code>) that includes all
120 * methods starting with "test"
121 */
122 public static Test suite()
123 {
124
125 return new TestSuite(TestCastorXmlPageManager.class);
126 }
127
128 public void testNewPage()
129 {
130 Page testpage = pageManager.newPage(this.testPage003);
131 assertNotNull(testpage);
132 assertNotNull(testpage.getId());
133 assertNotNull(testpage.getPath());
134 assertEquals(testpage.getId(), testpage.getPath());
135 assertNotNull(testpage.getRootFragment());
136 assertNotNull(testpage.getRootFragment().getId());
137 }
138
139 public void testNewFragment()
140 {
141 Fragment f = pageManager.newFragment();
142 assertNotNull(f);
143 assertNotNull(f.getId());
144 assertTrue(f.getType().equals(Fragment.LAYOUT));
145 }
146
147 public void testNewFolder()
148 {
149 Folder testfolder = pageManager.newFolder(this.testFolder3);
150 assertNotNull(testfolder);
151 assertNotNull(testfolder.getId());
152 assertNotNull(testfolder.getPath());
153 assertEquals(testfolder.getId(), testfolder.getPath());
154 }
155
156 public void testNewLink()
157 {
158 Link testlink = pageManager.newLink(this.testLink003);
159 assertNotNull(testlink);
160 assertNotNull(testlink.getId());
161 assertNotNull(testlink.getPath());
162 assertEquals(testlink.getId(), testlink.getPath());
163 }
164
165 public void testGetPage() throws Exception
166 {
167 Page testpage = pageManager.getPage("/test001.psml");
168 assertNotNull(testpage);
169 assertTrue(testpage.getId().equals("/test001.psml"));
170 assertTrue(testpage.getTitle().equals("Test Page"));
171 assertTrue(testpage.getSkin().equals("test-skin"));
172 assertTrue(testpage.getEffectiveDefaultDecorator(Fragment.LAYOUT).equals("test-layout"));
173 assertTrue(testpage.getDefaultDecorator(Fragment.LAYOUT).equals("test-layout"));
174 assertTrue(testpage.getDefaultDecorator(Fragment.PORTLET).equals("test-portlet"));
175 assertTrue(testpage.getVersion().equals("2.77"));
176
177 GenericMetadata md = testpage.getMetadata();
178 Collection descriptions = md.getFields("description");
179 Collection subjects = md.getFields("subject");
180 assertEquals(2, descriptions.size());
181 assertEquals(1, subjects.size());
182
183 Fragment root = testpage.getRootFragment();
184 assertNotNull(root);
185 assertTrue(root.getId().equals("f001"));
186 assertTrue(root.getName().equals("TwoColumns"));
187 assertTrue(root.getType().equals(Fragment.LAYOUT));
188 assertNull(root.getDecorator());
189
190 List children = root.getFragments();
191 assertNotNull(children);
192 assertTrue(children.size() == 3);
193
194 Fragment f = (Fragment) children.get(0);
195 assertTrue(f.getId().equals("pe001"));
196 assertTrue(f.getName().equals("HelloPortlet"));
197 assertTrue(f.getType().equals(Fragment.PORTLET));
198
199 Map properties = f.getProperties();
200 assertNotNull(properties);
201 assertTrue(properties.size() == 7);
202 assertEquals("0", f.getProperty(Fragment.ROW_PROPERTY_NAME));
203 assertEquals(0, f.getIntProperty(Fragment.COLUMN_PROPERTY_NAME));
204 assertEquals(0, f.getLayoutRow());
205 assertEquals(0, f.getLayoutColumn());
206 assertNotNull(f.getProperty(Fragment.X_PROPERTY_NAME));
207 assertTrue(f.getProperty(Fragment.X_PROPERTY_NAME).startsWith("11.1"));
208 assertTrue((f.getLayoutX() > 11.0F) && (f.getLayoutX() < 12.0F));
209 assertTrue((f.getFloatProperty(Fragment.X_PROPERTY_NAME) > 11.0F) &&
210 (f.getFloatProperty(Fragment.X_PROPERTY_NAME) < 12.0F));
211 assertTrue((f.getLayoutY() > 22.0F) && (f.getLayoutY() < 23.0F));
212 assertTrue((f.getLayoutZ() > 33.0F) && (f.getLayoutZ() < 34.0F));
213 assertTrue((f.getLayoutWidth() > 44.0F) && (f.getLayoutWidth() < 45.0F));
214 assertTrue((f.getLayoutHeight() > 55.0F) && (f.getLayoutWidth() < 56.0F));
215
216 List preferences = f.getPreferences();
217 assertNotNull(preferences);
218 assertTrue(preferences.size() == 2);
219 assertEquals("pref0", ((FragmentPreference)preferences.get(0)).getName());
220 assertTrue(((FragmentPreference)preferences.get(0)).isReadOnly());
221 assertNotNull(((FragmentPreference)preferences.get(0)).getValueList());
222 assertEquals(2, ((FragmentPreference)preferences.get(0)).getValueList().size());
223 assertEquals("pref0-value0", (String)((FragmentPreference)preferences.get(0)).getValueList().get(0));
224 assertEquals("pref0-value1", (String)((FragmentPreference)preferences.get(0)).getValueList().get(1));
225 assertEquals("pref1", ((FragmentPreference)preferences.get(1)).getName());
226 assertFalse(((FragmentPreference)preferences.get(1)).isReadOnly());
227 assertNotNull(((FragmentPreference)preferences.get(1)).getValueList());
228 assertEquals(1, ((FragmentPreference)preferences.get(1)).getValueList().size());
229 assertEquals("pref1-value", (String)((FragmentPreference)preferences.get(1)).getValueList().get(0));
230
231 f = (Fragment) children.get(1);
232 assertTrue(f.getId().equals("pe002"));
233 assertTrue(f.getName().equals("JMXPortlet"));
234 assertTrue(f.getType().equals(Fragment.PORTLET));
235
236 properties = f.getProperties();
237 assertNotNull(properties);
238 assertTrue(properties.size() == 2);
239 assertEquals("0", f.getProperty(Fragment.ROW_PROPERTY_NAME));
240 assertEquals(1, f.getIntProperty(Fragment.COLUMN_PROPERTY_NAME));
241
242 f = testpage.getFragmentById("f002");
243 assertNotNull(f);
244 assertTrue(f.getId().equals("f002"));
245 assertTrue(f.getName().equals("Card"));
246 assertTrue(f.getType().equals(Fragment.LAYOUT));
247 assertTrue(f.getDecorator().equals("Tab"));
248 assertNotNull(f.getFragments());
249 assertTrue(f.getFragments().size() == 2);
250
251 List fragments = testpage.getFragmentsByName("JMXPortlet");
252 assertNotNull(fragments);
253 assertEquals(1, fragments.size());
254 assertTrue(((Fragment)fragments.get(0)).getId().equals("pe002"));
255 assertTrue(((Fragment)fragments.get(0)).getName().equals("JMXPortlet"));
256 assertTrue(((Fragment)fragments.get(0)).getType().equals(Fragment.PORTLET));
257 }
258
259 public void testCreatePage() throws Exception
260 {
261 Page page = pageManager.newPage(this.testPage002);
262 System.out.println("Retrieved test_id in create " + this.testPage002);
263 page.setSkin("myskin");
264 page.setTitle("Created Page");
265 GenericMetadata metadata = page.getMetadata();
266 metadata.addField(Locale.FRENCH, "title", "Created Page de PSML");
267 metadata.addField(Locale.JAPANESE, "title", "Created \u3078\u3088\u3046\u3053\u305d");
268
269 Fragment root = page.getRootFragment();
270 root.setName("TestLayout");
271 Fragment f = pageManager.newFragment();
272 f.setType(Fragment.PORTLET);
273 f.setName("TestPortlet");
274 Map properties = f.getProperties();
275 properties.put(Fragment.ROW_PROPERTY_NAME, "0");
276 properties.put(Fragment.COLUMN_PROPERTY_NAME, "0");
277 root.getFragments().add(f);
278
279 SecurityConstraints constraints = page.newSecurityConstraints();
280 constraints.setOwner("new-user");
281 List constraintsList = new ArrayList(1);
282 SecurityConstraint constraint = page.newSecurityConstraint();
283 constraint.setUsers(Shared.makeListFromCSV("user10,user11"));
284 constraint.setRoles(Shared.makeListFromCSV("*"));
285 constraint.setPermissions(Shared.makeListFromCSV(JetspeedActions.EDIT + "," + JetspeedActions.VIEW));
286 constraintsList.add(constraint);
287 constraints.setSecurityConstraints(constraintsList);
288 List constraintsRefsList = new ArrayList(1);
289 constraintsRefsList.add("public-view");
290 constraints.setSecurityConstraintsRefs(constraintsRefsList);
291 page.setSecurityConstraints(constraints);
292
293 try
294 {
295 pageManager.updatePage(page);
296 }
297 catch (Exception e)
298 {
299 String errmsg = "Exception in page update: " + e.toString();
300 e.printStackTrace();
301 System.err.println(errmsg);
302 assertNotNull(errmsg, null);
303 }
304
305 page = pageManager.getPage(this.testPage002);
306 assertNotNull(page);
307 assertTrue(page.getId().equals(this.testPage002));
308 assertEquals("Created Page", page.getTitle());
309 assertEquals("Created Page de PSML", page.getTitle(Locale.FRENCH));
310 assertEquals("Created \u3078\u3088\u3046\u3053\u305d", page.getTitle(Locale.JAPANESE));
311 assertNotNull(page.getRootFragment());
312 assertTrue(page.getRootFragment().getName().equals("TestLayout"));
313 assertTrue(page.getRootFragment().getFragments().size() == 1);
314
315 f = (Fragment) page.getRootFragment().getFragments().get(0);
316 assertNotNull(f.getProperties());
317 assertEquals(0, f.getIntProperty(Fragment.ROW_PROPERTY_NAME));
318 }
319
320 public void testCreateFolder() throws Exception
321 {
322 Folder folder = pageManager.newFolder(this.testFolder2);
323 System.out.println("Retrieved test_id in create " + this.testFolder2);
324 folder.setTitle("Created Folder");
325 folder.setSkin("test-skin");
326 folder.setDefaultDecorator("test-layout", Fragment.LAYOUT);
327 folder.setDefaultDecorator("test-portlet", Fragment.PORTLET);
328
329 try
330 {
331 pageManager.updateFolder(folder);
332 }
333 catch (Exception e)
334 {
335 String errmsg = "Exception in folder update: " + e.toString();
336 e.printStackTrace();
337 System.err.println(errmsg);
338 assertNotNull(errmsg, null);
339 }
340
341 folder = pageManager.getFolder(this.testFolder2);
342 assertNotNull(folder);
343 assertTrue(folder.getId().equals(this.testFolder2));
344 assertTrue(folder.getTitle().equals("Created Folder"));
345 assertTrue(folder.getSkin().equals("test-skin"));
346 assertTrue(folder.getEffectiveDefaultDecorator(Fragment.LAYOUT).equals("test-layout"));
347 assertTrue(folder.getDefaultDecorator(Fragment.LAYOUT).equals("test-layout"));
348 assertTrue(folder.getDefaultDecorator(Fragment.PORTLET).equals("test-portlet"));
349 }
350
351 public void testCreateLink() throws Exception
352 {
353 Link link = pageManager.newLink(this.testLink002);
354 System.out.println("Retrieved test_id in create " + this.testLink002);
355 link.setTitle("Created Link");
356 link.setSkin("test-skin");
357 link.setUrl("http://www.created.link.com/");
358
359 try
360 {
361 pageManager.updateLink(link);
362 }
363 catch (Exception e)
364 {
365 String errmsg = "Exception in link update: " + e.toString();
366 e.printStackTrace();
367 System.err.println(errmsg);
368 assertNotNull(errmsg, null);
369 }
370
371 link = pageManager.getLink(this.testLink002);
372 assertNotNull(link);
373 assertTrue(link.getId().equals(this.testLink002));
374 assertTrue(link.getTitle().equals("Created Link"));
375 assertTrue(link.getSkin().equals("test-skin"));
376 }
377
378 public void testUpdatePage() throws Exception
379 {
380 Page page = pageManager.getPage(this.testPage002);
381 page.setTitle("Updated Title");
382 Fragment root = page.getRootFragment();
383 assertNotNull(root);
384 assertNotNull(root.getFragments());
385 assertEquals(1, root.getFragments().size());
386 String testId = ((Fragment)root.getFragments().get(0)).getId();
387 assertNotNull(page.removeFragmentById(testId));
388
389 try
390 {
391 pageManager.updatePage(page);
392 }
393 catch (Exception e)
394 {
395 String errmsg = "Exception in page update: " + e.toString();
396 e.printStackTrace();
397 System.err.println(errmsg);
398 assertNotNull(errmsg, null);
399 }
400
401 page = pageManager.getPage(this.testPage002);
402 assertTrue(page.getTitle().equals("Updated Title"));
403 root = page.getRootFragment();
404 assertNotNull(root);
405 assertNotNull(root.getFragments());
406 assertTrue(root.getFragments().isEmpty());
407 }
408
409 public void testUpdateFolder() throws Exception
410 {
411 Folder folder = pageManager.getFolder(this.testFolder2);
412 folder.setTitle("Updated Title");
413
414 try
415 {
416 pageManager.updateFolder(folder);
417 }
418 catch (Exception e)
419 {
420 String errmsg = "Exception in folder update: " + e.toString();
421 e.printStackTrace();
422 System.err.println(errmsg);
423 assertNotNull(errmsg, null);
424 }
425
426 folder = pageManager.getFolder(this.testFolder2);
427 assertTrue(folder.getTitle().equals("Updated Title"));
428
429 Page page = pageManager.newPage(this.testPage004);
430 page.setTitle("Folder Page");
431
432 try
433 {
434 pageManager.updatePage(page);
435 }
436 catch (Exception e)
437 {
438 String errmsg = "Exception in page update: " + e.toString();
439 e.printStackTrace();
440 System.err.println(errmsg);
441 assertNotNull(errmsg, null);
442 }
443
444 assertEquals(1, folder.getPages().size());
445 assertEquals(1, pageManager.getPages(folder).size());
446 assertNotNull(folder.getPages().get(this.testPage004));
447
448 folder.setTitle("Updated Deep Title");
449 page.setTitle("Updated Deep Title");
450
451 try
452 {
453 pageManager.updateFolder(folder, true);
454 }
455 catch (Exception e)
456 {
457 String errmsg = "Exception in deep folder update: " + e.toString();
458 e.printStackTrace();
459 System.err.println(errmsg);
460 assertNotNull(errmsg, null);
461 }
462
463 folder = pageManager.getFolder(this.testFolder2);
464 assertTrue(folder.getTitle().equals("Updated Deep Title"));
465 page = pageManager.getPage(this.testPage004);
466 assertTrue(page.getTitle().equals("Updated Deep Title"));
467 }
468
469 public void testUpdateLink() throws Exception
470 {
471 Link link = pageManager.getLink(this.testLink002);
472 link.setTitle("Updated Title");
473
474 try
475 {
476 pageManager.updateLink(link);
477 }
478 catch (Exception e)
479 {
480 String errmsg = "Exception in link update: " + e.toString();
481 e.printStackTrace();
482 System.err.println(errmsg);
483 assertNotNull(errmsg, null);
484 }
485
486 link = pageManager.getLink(this.testLink002);
487 assertTrue(link.getTitle().equals("Updated Title"));
488 }
489
490 public void testGetFolders() throws Exception
491 {
492
493 Folder subsites = pageManager.getFolder("/subsites");
494 assertNotNull(subsites);
495
496 Iterator ssi = subsites.getFolders().iterator();
497 assertTrue(ssi.hasNext());
498 int count = 0;
499 while (ssi.hasNext())
500 {
501 Folder folder = (Folder)ssi.next();
502 System.out.println("folder = " + folder.getName());
503 count++;
504 }
505 assertEquals(4, count);
506 }
507
508 public void testFolders() throws Exception
509 {
510
511 Folder folder1 = pageManager.getFolder("/folder1");
512 assertNotNull(folder1);
513 assertTrue(folder1.getSkin().equals("test-skin"));
514 assertTrue(folder1.getEffectiveDefaultDecorator(Fragment.LAYOUT).equals("test-layout"));
515 assertTrue(folder1.getDefaultDecorator(Fragment.LAYOUT).equals("test-layout"));
516 assertTrue(folder1.getDefaultDecorator(Fragment.PORTLET).equals("test-portlet"));
517
518 assertEquals(2, folder1.getFolders().size());
519 assertEquals(2, pageManager.getFolders(folder1).size());
520 Iterator childItr = folder1.getFolders().iterator();
521
522 Folder folder2 = (Folder) childItr.next();
523 assertEquals("/folder1/folder2", folder2.getPath());
524 assertEquals("folder2", folder2.getName());
525 Folder folder3 = (Folder) childItr.next();
526 assertEquals("/folder1/folder3", folder3.getPath());
527 assertEquals("test001.psml", folder3.getDefaultPage());
528 assertEquals(1, folder2.getPages().size());
529 assertEquals(2, folder3.getPages().size());
530 assertEquals(2, pageManager.getPages(folder3).size());
531
532
533 Page page = (Page)folder3.getPages().get("test001.psml");
534 assertTrue(page.getEffectiveDefaultDecorator(Fragment.LAYOUT).equals("test-layout"));
535 assertTrue(page.getEffectiveDefaultDecorator(Fragment.PORTLET).equals("test-portlet"));
536
537
538 assertEquals(6, folder3.getAll().size());
539 assertEquals(6, pageManager.getAll(folder3).size());
540 Iterator linkItr = folder3.getAll().iterator();
541 assertEquals("Jetspeed2Wiki.link", ((Link)linkItr.next()).getName());
542 assertEquals("Jetspeed2.link", ((Link)linkItr.next()).getName());
543 assertEquals("apache_portals.link", ((Link)linkItr.next()).getName());
544 assertEquals("apache.link", ((Link)linkItr.next()).getName());
545 assertEquals("test001.psml", ((Page)linkItr.next()).getName());
546 assertEquals("default-page.psml", ((Page)linkItr.next()).getName());
547
548
549 assertNotNull(folder1.getFolders().get("/folder1/folder2"));
550 assertNotNull(folder1.getFolders().get("folder2"));
551 assertEquals(folder1.getFolders().get("/folder1/folder2"), folder1.getFolders().get("folder2"));
552
553
554 assertNotNull(folder3.getPages().get("/folder1/folder3/test001.psml"));
555 assertNotNull(folder3.getPages().get("test001.psml"));
556 assertEquals("test001.psml", folder3.getPages().get("/folder1/folder3/test001.psml").getName());
557
558 assertTrue(folder3.isHidden());
559 assertTrue(folder3.getPage("default-page.psml").isHidden());
560 assertTrue(folder3.getLinks().get("Jetspeed2.link").isHidden());
561 assertFalse(folder3.getLinks().get("apache.link").isHidden());
562
563 assertNotNull(folder3.getAll().get("Jetspeed2.link"));
564 assertNull(folder3.getAll().exclusiveSubset("Jetspeed2//.link").get("Jetspeed2.link"));
565 assertNull(folder3.getAll().inclusiveSubset("apache//.link").get("Jetspeed2.link"));
566 assertNotNull(folder3.getAll().inclusiveSubset("apache//.link").get("apache.link"));
567 }
568
569 public void testFolderMetaData() throws Exception
570 {
571 Folder folder1French = pageManager.getFolder("/folder1");
572
573 assertEquals("Titre francais pour la chemise 1", folder1French.getTitle(Locale.FRENCH));
574 assertEquals("Titre francais pour la chemise 1", folder1French.getTitle(Locale.FRANCE));
575
576 Folder folder1English = pageManager.getFolder("/folder1");
577
578 assertEquals("English Title for Folder 1", folder1English.getTitle(Locale.ENGLISH));
579
580
581 Folder folder1German = pageManager.getFolder("/folder1");
582
583 assertEquals("Default Title for Folder 1", folder1German.getTitle(Locale.GERMAN));
584
585
586 Folder rootFolder = pageManager.getFolder("/");
587 assertEquals(rootFolder.getTitle(), rootFolder.getTitle(Locale.FRENCH));
588 }
589
590 public void testDefaultTitles() throws Exception
591 {
592 Page defaultPage = pageManager.getPage("/folder1/folder2/default-page.psml");
593 assertNotNull(defaultPage);
594 assertEquals("Default Page", defaultPage.getTitle());
595
596 Folder rootFolder = pageManager.getFolder("/");
597 assertEquals("Top", rootFolder.getTitle());
598 }
599
600 public void testPageMetaData() throws Exception
601 {
602 Page page = pageManager.getPage("/default-page.psml");
603 assertNotNull(page);
604 String frenchTitle = page.getTitle(Locale.FRENCH);
605 assertNotNull(frenchTitle);
606 assertEquals("Ma Premiere Page de PSML", frenchTitle);
607 String japaneseTitle = page.getTitle(Locale.JAPANESE);
608 assertNotNull(japaneseTitle);
609 assertEquals("Jetspeed 2 \u3078\u3088\u3046\u3053\u305d", japaneseTitle);
610 String defaultTitle = page.getTitle(Locale.GERMAN);
611 assertNotNull(defaultTitle);
612 assertEquals("My First PSML Page", defaultTitle);
613 }
614
615 public void testLinks() throws Exception
616 {
617 Link link = pageManager.getLink("/apache_portals.link");
618 assertNotNull(link);
619 assertEquals("http://portals.apache.org", link.getUrl());
620 assertEquals("Apache Portals Website", link.getTitle());
621 assertEquals("Apache Software Foundation [french]", link.getTitle(Locale.FRENCH));
622 assertEquals("test-skin", link.getSkin());
623
624 Folder folder = pageManager.getFolder("/");
625 assertNotNull(folder);
626 assertNotNull(folder.getLinks());
627 assertEquals(2,folder.getLinks().size());
628 assertEquals(2,pageManager.getLinks(folder).size());
629 assertEquals("http://portals.apache.org", ((Document) folder.getLinks().get("/apache_portals.link")).getUrl());
630 }
631
632 public void testMenuDefinitions() throws Exception
633 {
634
635 Folder folder = pageManager.getFolder("/");
636 assertNotNull(folder);
637 List menus = folder.getMenuDefinitions();
638 assertNotNull(menus);
639 assertEquals(5, menus.size());
640
641 MenuDefinition simpleMenu = (MenuDefinition)menus.get(0);
642 assertNotNull(simpleMenu);
643 assertEquals("simple", simpleMenu.getName());
644 assertNotNull(simpleMenu.getMenuElements());
645 assertEquals(1, simpleMenu.getMenuElements().size());
646 assertTrue(simpleMenu.getMenuElements().get(0) instanceof MenuOptionsDefinition);
647 assertEquals("/test001.psml,/folder1/folder2", ((MenuOptionsDefinition)simpleMenu.getMenuElements().get(0)).getOptions());
648
649 MenuDefinition top2LevelsMenu = (MenuDefinition)menus.get(1);
650 assertNotNull(top2LevelsMenu);
651 assertEquals("top-2-levels", top2LevelsMenu.getName());
652 assertNull(top2LevelsMenu.getMenuElements());
653 assertEquals("/", top2LevelsMenu.getOptions());
654 assertEquals(2, top2LevelsMenu.getDepth());
655 assertEquals("dhtml-pull-down", top2LevelsMenu.getSkin());
656
657 MenuDefinition topRolePagesMenu = (MenuDefinition)menus.get(2);
658 assertNotNull(topRolePagesMenu);
659 assertEquals("top-role-pages", topRolePagesMenu.getName());
660 assertTrue(topRolePagesMenu.isRegexp());
661 assertEquals("roles", topRolePagesMenu.getProfile());
662 assertEquals("*.psml,*.link", topRolePagesMenu.getOrder());
663
664 MenuDefinition breadCrumbsMenu = (MenuDefinition)menus.get(3);
665 assertNotNull(breadCrumbsMenu);
666 assertEquals("bread-crumbs", breadCrumbsMenu.getName());
667 assertTrue(breadCrumbsMenu.isPaths());
668
669 MenuDefinition topCustomMenu = (MenuDefinition)menus.get(4);
670 assertNotNull(topCustomMenu);
671 assertEquals("top-custom", topCustomMenu.getName());
672 assertEquals("Top Menu", topCustomMenu.getTitle());
673 assertEquals("Top", topCustomMenu.getShortTitle());
674 assertEquals("Haut", topCustomMenu.getTitle(Locale.FRENCH));
675 assertEquals("H", topCustomMenu.getShortTitle(Locale.FRENCH));
676 assertNotNull(topCustomMenu.getMenuElements());
677 assertEquals(5, topCustomMenu.getMenuElements().size());
678 assertTrue(topCustomMenu.getMenuElements().get(0) instanceof MenuOptionsDefinition);
679 assertTrue(((MenuOptionsDefinition)topCustomMenu.getMenuElements().get(0)).isRegexp());
680 assertEquals("groups", ((MenuOptionsDefinition)topCustomMenu.getMenuElements().get(0)).getProfile());
681 assertTrue(topCustomMenu.getMenuElements().get(1) instanceof MenuDefinition);
682 assertTrue(topCustomMenu.getMenuElements().get(2) instanceof MenuExcludeDefinition);
683 assertEquals("top-role-pages", ((MenuExcludeDefinition)topCustomMenu.getMenuElements().get(2)).getName());
684 assertTrue(topCustomMenu.getMenuElements().get(3) instanceof MenuSeparatorDefinition);
685 assertEquals("More Top Pages", ((MenuSeparatorDefinition)topCustomMenu.getMenuElements().get(3)).getText());
686 assertTrue(topCustomMenu.getMenuElements().get(4) instanceof MenuIncludeDefinition);
687 assertEquals("simple", ((MenuIncludeDefinition)topCustomMenu.getMenuElements().get(4)).getName());
688 assertTrue(((MenuIncludeDefinition)topCustomMenu.getMenuElements().get(4)).isNest());
689
690 MenuDefinition topCustomNestedMenu = (MenuDefinition)topCustomMenu.getMenuElements().get(1);
691 assertEquals("/", topCustomNestedMenu.getOptions());
692 assertEquals("page", topCustomNestedMenu.getProfile());
693 assertEquals(5, topCustomNestedMenu.getMenuElements().size());
694 assertTrue(topCustomNestedMenu.getMenuElements().get(0) instanceof MenuSeparatorDefinition);
695 assertEquals("Top Pages", ((MenuSeparatorDefinition)topCustomNestedMenu.getMenuElements().get(0)).getText());
696 assertEquals("Ye Olde Top Pages", ((MenuSeparatorDefinition)topCustomNestedMenu.getMenuElements().get(0)).getText(Locale.ENGLISH));
697 assertEquals("Select from Top Pages menu...", ((MenuSeparatorDefinition)topCustomNestedMenu.getMenuElements().get(0)).getTitle());
698 assertEquals("Haut", ((MenuSeparatorDefinition)topCustomNestedMenu.getMenuElements().get(0)).getTitle(Locale.FRENCH));
699 assertTrue(topCustomNestedMenu.getMenuElements().get(1) instanceof MenuOptionsDefinition);
700 assertTrue(topCustomNestedMenu.getMenuElements().get(2) instanceof MenuSeparatorDefinition);
701 assertEquals("bold", ((MenuSeparatorDefinition)topCustomNestedMenu.getMenuElements().get(2)).getSkin());
702 assertEquals("Custom Pages", ((MenuSeparatorDefinition)topCustomNestedMenu.getMenuElements().get(2)).getTitle());
703 assertTrue(topCustomNestedMenu.getMenuElements().get(3) instanceof MenuOptionsDefinition);
704 assertEquals(1, ((MenuOptionsDefinition)topCustomNestedMenu.getMenuElements().get(3)).getDepth());
705 assertEquals("*.psml", ((MenuOptionsDefinition)topCustomNestedMenu.getMenuElements().get(3)).getOrder());
706 assertTrue(topCustomNestedMenu.getMenuElements().get(4) instanceof MenuOptionsDefinition);
707 assertTrue(((MenuOptionsDefinition)topCustomNestedMenu.getMenuElements().get(4)).isPaths());
708 assertEquals("*", ((MenuOptionsDefinition)topCustomNestedMenu.getMenuElements().get(4)).getProfile());
709 assertEquals("links", ((MenuOptionsDefinition)topCustomNestedMenu.getMenuElements().get(4)).getSkin());
710 assertEquals("@", ((MenuOptionsDefinition)topCustomNestedMenu.getMenuElements().get(4)).getOptions());
711
712
713 Page page = pageManager.getPage("/test001.psml");
714 assertNotNull(page);
715 menus = page.getMenuDefinitions();
716 assertNotNull(menus);
717 assertEquals(1, menus.size());
718
719 simpleMenu = (MenuDefinition)menus.get(0);
720 assertNotNull(simpleMenu);
721 assertEquals("simple", simpleMenu.getName());
722 assertNotNull(simpleMenu.getMenuElements());
723 assertEquals(2, simpleMenu.getMenuElements().size());
724
725
726 page = pageManager.getPage(this.testPage002);
727 page.setMenuDefinitions(new ArrayList());
728 MenuDefinition newMenu = page.newMenuDefinition();
729 newMenu.setName("updated-menu");
730 newMenu.setSkin("tabs");
731 newMenu.setMenuElements(new ArrayList());
732 MenuSeparatorDefinition newSeparator = page.newMenuSeparatorDefinition();
733 newSeparator.setText("-- Updated Menu --");
734 newMenu.getMenuElements().add(newSeparator);
735 MenuOptionsDefinition newOptions0 = page.newMenuOptionsDefinition();
736 newOptions0.setOptions("/*.psml");
737 newOptions0.setRegexp(true);
738 newMenu.getMenuElements().add(newOptions0);
739 MenuOptionsDefinition newOptions1 = page.newMenuOptionsDefinition();
740 newOptions1.setOptions("/folder0");
741 newMenu.getMenuElements().add(newOptions1);
742 MenuDefinition newNestedMenu = page.newMenuDefinition();
743 newNestedMenu.setOptions("/*/");
744 newNestedMenu.setRegexp(true);
745 newMenu.getMenuElements().add(newNestedMenu);
746 MenuExcludeDefinition newExcludeMenu = page.newMenuExcludeDefinition();
747 newExcludeMenu.setName("exclude-menu");
748 newMenu.getMenuElements().add(newExcludeMenu);
749 MenuIncludeDefinition newIncludeMenu = page.newMenuIncludeDefinition();
750 newIncludeMenu.setName("include-menu");
751 newIncludeMenu.setNest(true);
752 newMenu.getMenuElements().add(newIncludeMenu);
753 page.getMenuDefinitions().add(newMenu);
754 try
755 {
756 pageManager.updatePage(page);
757 }
758 catch (Exception e)
759 {
760 String errmsg = "Exception in page update: " + e.toString();
761 e.printStackTrace();
762 System.err.println(errmsg);
763 assertNotNull(errmsg, null);
764 }
765 page = pageManager.getPage(this.testPage002);
766 assertNotNull(page.getMenuDefinitions());
767 assertEquals(1, page.getMenuDefinitions().size());
768 assertNotNull(((MenuDefinition)page.getMenuDefinitions().get(0)).getMenuElements());
769 assertEquals(6,((MenuDefinition)page.getMenuDefinitions().get(0)).getMenuElements().size());
770 assertTrue(((MenuDefinition)page.getMenuDefinitions().get(0)).getMenuElements().get(0) instanceof MenuSeparatorDefinition);
771 assertTrue(((MenuDefinition)page.getMenuDefinitions().get(0)).getMenuElements().get(1) instanceof MenuOptionsDefinition);
772 assertTrue(((MenuDefinition)page.getMenuDefinitions().get(0)).getMenuElements().get(2) instanceof MenuOptionsDefinition);
773 assertTrue(((MenuDefinition)page.getMenuDefinitions().get(0)).getMenuElements().get(3) instanceof MenuDefinition);
774 assertTrue(((MenuDefinition)page.getMenuDefinitions().get(0)).getMenuElements().get(4) instanceof MenuExcludeDefinition);
775 assertTrue(((MenuDefinition)page.getMenuDefinitions().get(0)).getMenuElements().get(5) instanceof MenuIncludeDefinition);
776
777
778 folder = pageManager.getFolder(this.testFolder2);
779 folder.setMenuDefinitions(new ArrayList());
780 newMenu = folder.newMenuDefinition();
781 newMenu.setName("updated-menu");
782 newMenu.setSkin("bread-crumbs");
783 newMenu.setOptions("./");
784 newMenu.setPaths(true);
785 folder.getMenuDefinitions().add(newMenu);
786 try
787 {
788 pageManager.updateFolder(folder);
789 }
790 catch (Exception e)
791 {
792 String errmsg = "Exception in folder update: " + e.toString();
793 e.printStackTrace();
794 System.err.println(errmsg);
795 assertNotNull(errmsg, null);
796 }
797 folder = pageManager.getFolder(this.testFolder2);
798 assertNotNull(folder.getMenuDefinitions());
799 assertEquals(1, folder.getMenuDefinitions().size());
800 assertEquals("updated-menu", ((MenuDefinition)folder.getMenuDefinitions().get(0)).getName());
801 assertEquals("bread-crumbs", ((MenuDefinition)folder.getMenuDefinitions().get(0)).getSkin());
802 assertEquals("./", ((MenuDefinition)folder.getMenuDefinitions().get(0)).getOptions());
803 }
804
805 public void testRemovePage() throws Exception
806 {
807 Page page = pageManager.getPage(this.testPage002);
808
809 try
810 {
811 pageManager.removePage(page);
812 }
813 catch (Exception e)
814 {
815 String errmsg = "Exception in page remove: " + e.toString();
816 e.printStackTrace();
817 System.err.println(errmsg);
818 assertNotNull(errmsg, null);
819 }
820
821 boolean exceptionFound = false;
822 try
823 {
824 page = pageManager.getPage(this.testPage002);
825 }
826 catch (DocumentNotFoundException dnfe)
827 {
828 exceptionFound = true;
829 }
830 assertTrue(exceptionFound);
831 }
832
833 public void testRemoveFolder() throws Exception
834 {
835 Folder folder = pageManager.getFolder(this.testFolder2);
836
837 try
838 {
839 pageManager.removeFolder(folder);
840 }
841 catch (Exception e)
842 {
843 String errmsg = "Exception in folder remove: " + e.toString();
844 e.printStackTrace();
845 System.err.println(errmsg);
846 assertNotNull(errmsg, null);
847 }
848
849 boolean exceptionFound = false;
850 try
851 {
852 folder = pageManager.getFolder(this.testFolder2);
853 }
854 catch (FolderNotFoundException fnfe)
855 {
856 exceptionFound = true;
857 }
858 assertTrue(exceptionFound);
859 }
860
861 public void testRemoveLink() throws Exception
862 {
863 Link link = pageManager.getLink(this.testLink002);
864
865 try
866 {
867 pageManager.removeLink(link);
868 }
869 catch (Exception e)
870 {
871 String errmsg = "Exception in link remove: " + e.toString();
872 e.printStackTrace();
873 System.err.println(errmsg);
874 assertNotNull(errmsg, null);
875 }
876
877 boolean exceptionFound = false;
878 try
879 {
880 link = pageManager.getLink(this.testLink002);
881 }
882 catch (DocumentNotFoundException dnfe)
883 {
884 exceptionFound = true;
885 }
886 assertTrue(exceptionFound);
887 }
888
889 public void testClonePage() throws Exception
890 {
891 Page testpage = pageManager.getPage("/clonetest.psml");
892 assertNotNull(testpage);
893 Page clone = pageManager.copyPage(testpage, "/cloned.psml");
894 assertNotNull(clone);
895
896 assertTrue(clone.getId().equals("/cloned.psml"));
897 assertTrue(clone.getName().equals("cloned.psml"));
898 assertTrue(clone.getTitle().equals("Test Page"));
899 assertTrue(clone.getSkin().equals("test-skin"));
900 assertTrue(clone.getEffectiveDefaultDecorator(Fragment.LAYOUT).equals("test-layout"));
901 assertTrue(clone.getDefaultDecorator(Fragment.LAYOUT).equals("test-layout"));
902 assertTrue(clone.getDefaultDecorator(Fragment.PORTLET).equals("test-portlet"));
903
904
905 Fragment root = testpage.getRootFragment();
906 Fragment cloneRoot = clone.getRootFragment();
907
908 assertNotNull(cloneRoot);
909 assertNotNull(cloneRoot.getId());
910 assertFalse(cloneRoot.getId().equals(root.getId()));
911 assertTrue(cloneRoot.getName().equals("TwoColumns"));
912 assertTrue(cloneRoot.getType().equals(Fragment.LAYOUT));
913 assertNull(cloneRoot.getDecorator());
914
915 List children = root.getFragments();
916 List cloneChildren = cloneRoot.getFragments();
917 assertNotNull(cloneChildren);
918 assertTrue(cloneChildren.size() == 3);
919
920 Fragment f = (Fragment) children.get(0);
921 Fragment cf = (Fragment) cloneChildren.get(0);
922 assertNotNull(cf.getId());
923 assertFalse(cf.getId().equals(f.getId()));
924 assertTrue(cf.getName().equals("HelloPortlet"));
925 assertTrue(cf.getType().equals(Fragment.PORTLET));
926
927 Map properties = f.getProperties();
928 Map cloneProperties = cf.getProperties();
929
930 assertNotNull(cloneProperties);
931 assertTrue(cloneProperties.size() == 2);
932 assertEquals("0", cf.getProperty(Fragment.ROW_PROPERTY_NAME));
933 assertEquals(0, cf.getIntProperty(Fragment.COLUMN_PROPERTY_NAME));
934
935 cf = (Fragment) cloneChildren.get(1);
936 f = (Fragment) children.get(1);
937 assertNotNull(cf.getId());
938 assertFalse(cf.getId().equals(f.getId()));
939 assertTrue(cf.getName().equals("JMXPortlet"));
940 assertTrue(cf.getType().equals(Fragment.PORTLET));
941
942 properties = cf.getProperties();
943 assertNotNull(properties);
944 assertTrue(properties.size() == 2);
945 assertEquals("0", cf.getProperty(Fragment.ROW_PROPERTY_NAME));
946 assertEquals(1, cf.getIntProperty(Fragment.COLUMN_PROPERTY_NAME));
947
948 f = testpage.getFragmentById("f002");
949 cf = (Fragment) cloneChildren.get(2);
950 String id = cf.getId();
951 cf = clone.getFragmentById(id);
952
953 assertNotNull(cf);
954 assertNotNull(cf.getId());
955 assertFalse(cf.getId().equals(f.getId()));
956 assertTrue(cf.getName().equals("Card"));
957 assertTrue(cf.getType().equals(Fragment.LAYOUT));
958 assertTrue(cf.getDecorator().equals("Tab"));
959 assertNotNull(cf.getFragments());
960 assertTrue(cf.getFragments().size() == 2);
961
962
963 SecurityConstraints constraints = clone.getSecurityConstraints();
964 assertNotNull(constraints);
965 assertTrue(constraints.getOwner().equals("new-user"));
966 List secs = constraints.getSecurityConstraints();
967 assertNotNull(secs);
968 assertTrue(secs.size() == 1);
969 SecurityConstraint constraint = (SecurityConstraint)secs.get(0);
970 assertNotNull(constraint);
971 assertTrue(constraint.getUsers() != null);
972 assertTrue(constraint.getUsers().size() == 2);
973 assertTrue(Shared.makeCSVFromList(constraint.getUsers()).equals("user10,user11"));
974 assertTrue(constraint.getRoles() != null);
975 assertTrue(constraint.getRoles().size() == 1);
976 assertTrue(Shared.makeCSVFromList(constraint.getRoles()).equals("*"));
977 assertTrue(constraint.getPermissions() != null);
978 assertTrue(constraint.getPermissions().size() == 2);
979 assertTrue(Shared.makeCSVFromList(constraint.getPermissions()).equals("edit,view"));
980 List refs = constraints.getSecurityConstraintsRefs();
981 assertNotNull(refs);
982 assertTrue(refs.size() == 1);
983 String ref = (String)refs.get(0);
984 assertNotNull(ref);
985 assertTrue(ref.equals("public-view"));
986
987
988 }
989
990 public Collection collectIds(Folder f) throws Exception {
991 Collection result = new ArrayList();
992
993 for (Iterator iter = f.getAll().iterator(); iter.hasNext();)
994 {
995 Object obj = iter.next();
996
997 if (obj instanceof Page){
998 Page thisPage = (Page) obj;
999 if (thisPage.getRootFragment()!=null){
1000 result.addAll(collectIds(thisPage.getRootFragment()));
1001 }
1002 } else
1003 if (obj instanceof Folder){
1004 Folder thisFolder = (Folder)obj;
1005 result.addAll(collectIds((Folder)obj));
1006 }
1007 }
1008
1009 return result;
1010 }
1011
1012 public Collection collectIds(Fragment f){
1013 Collection result = new ArrayList();
1014
1015
1016 result.add(f.getId());
1017 if (f.getFragments().size() > 0){
1018 for (Iterator iter = f.getFragments().iterator(); iter.hasNext();) {
1019 Fragment child = (Fragment) iter.next();
1020 result.addAll(collectIds(child));
1021 }
1022 }
1023 return result;
1024 }
1025
1026 private int countFragments(Fragment f){
1027 int result = 1;
1028 for (Iterator iter = f.getFragments().iterator(); iter.hasNext();)
1029 {
1030 result+=countFragments((Fragment)iter.next());
1031 }
1032
1033 return result;
1034 }
1035
1036 private void compareFolders(Folder folder1, Folder folder2) throws Exception {
1037 for (Iterator iter = folder1.getAll().iterator(); iter.hasNext();)
1038 {
1039 Object obj = iter.next();
1040
1041 if (obj instanceof Page){
1042 Page thisPage = (Page) obj;
1043 Page otherPage = folder2.getPage(thisPage.getName());
1044 assertEquals(thisPage.getRootFragment()!=null,otherPage.getRootFragment() != null);
1045 if (thisPage.getRootFragment() != null){
1046 Fragment thisRootFragment = thisPage.getRootFragment();
1047 Fragment otherRootFragment = otherPage.getRootFragment();
1048 assertEquals(thisRootFragment.getFragments().size(),otherRootFragment.getFragments().size());
1049 assertEquals(countFragments(thisRootFragment),countFragments(otherRootFragment));
1050 }
1051 } else
1052 if (obj instanceof Folder){
1053 Folder thisFolder = (Folder)obj;
1054 compareFolders(thisFolder, folder2.getFolder(thisFolder.getName()));
1055 }
1056
1057 }
1058 }
1059
1060 public void testIdGeneration() throws Exception{
1061 Folder webappIds = pageManager.getFolder("/webapp-ids");
1062 Folder webappNoIds = pageManager.getFolder("/webapp-no-ids");
1063
1064 compareFolders(webappIds,webappNoIds);
1065
1066 Collection allIds = collectIds(webappNoIds);
1067 for (Iterator iter = allIds.iterator(); iter.hasNext();) {
1068 String id = (String) iter.next();
1069 assertNotNull(id);
1070 assertEquals(true,id.length() > 0);
1071 if (CollectionUtils.cardinality(id, allIds) > 1){
1072 System.out.println("Fragment with id "+id+" has duplicates");
1073 }
1074 assertEquals(1, CollectionUtils.cardinality(id, allIds));
1075 }
1076 }
1077
1078 }