1
22
23 package com.liferay.portal.model;
24
25 import java.io.Serializable;
26
27 import java.util.Collection;
28 import java.util.Collections;
29 import java.util.HashMap;
30 import java.util.HashSet;
31 import java.util.Iterator;
32 import java.util.Map;
33 import java.util.Set;
34
35
41 public class PortletCategory implements Serializable {
42
43 public PortletCategory() {
44 this("root");
45 }
46
47 public PortletCategory(String name) {
48 _name = name;
49 _categories = new HashMap<String, PortletCategory>();
50 _portletIds = new HashSet<String>();
51 }
52
53 public String getName() {
54 return _name;
55 }
56
57 public Collection<PortletCategory> getCategories() {
58 return Collections.unmodifiableCollection(_categories.values());
59 }
60
61 public void addCategory(PortletCategory portletCategory) {
62 _categories.put(portletCategory.getName(), portletCategory);
63 }
64
65 public PortletCategory getCategory(String name) {
66 return _categories.get(name);
67 }
68
69 public Set<String> getPortletIds() {
70 return _portletIds;
71 }
72
73 public void merge(PortletCategory newPortletCategory) {
74 _merge(this, newPortletCategory);
75 }
76
77 public void separate(Set<String> portletIds) {
78 Iterator<PortletCategory> categoriesItr =
79 _categories.values().iterator();
80
81 while (categoriesItr.hasNext()) {
82 PortletCategory category = categoriesItr.next();
83
84 category.separate(portletIds);
85 }
86
87 Iterator<String>portletIdsItr = _portletIds.iterator();
88
89 while (portletIdsItr.hasNext()) {
90 String portletId = portletIdsItr.next();
91
92 if (portletIds.contains(portletId)) {
93 portletIdsItr.remove();
94 }
95 }
96 }
97
98 private void _merge(
99 PortletCategory portletCategory1, PortletCategory portletCategory2) {
100
101 Iterator<PortletCategory> itr =
102 portletCategory2.getCategories().iterator();
103
104 while (itr.hasNext()) {
105 PortletCategory curCategory2 = itr.next();
106
107 PortletCategory curCategory1 =
108 portletCategory1.getCategory(curCategory2.getName());
109
110 if (curCategory1 != null) {
111 _merge(curCategory1, curCategory2);
112 }
113 else {
114 portletCategory1.addCategory(curCategory2);
115 }
116 }
117
118 Set<String> portletIds1 = portletCategory1.getPortletIds();
119 Set<String> portletIds2 = portletCategory2.getPortletIds();
120
121 portletIds1.addAll(portletIds2);
122 }
123
124 private String _name;
125 private Map<String, PortletCategory> _categories;
126 private Set<String> _portletIds;
127
128 }