1
22
23 package com.liferay.portlet.wiki;
24
25 import com.liferay.portal.kernel.portlet.BaseFriendlyURLMapper;
26 import com.liferay.portal.kernel.portlet.LiferayPortletURL;
27 import com.liferay.portal.kernel.util.GetterUtil;
28 import com.liferay.portal.kernel.util.HttpUtil;
29 import com.liferay.portal.kernel.util.StringPool;
30 import com.liferay.portal.kernel.util.StringUtil;
31 import com.liferay.portal.kernel.util.Validator;
32 import com.liferay.portal.util.PortletKeys;
33
34 import java.util.Map;
35
36 import javax.portlet.PortletMode;
37 import javax.portlet.WindowState;
38
39
44 public class WikiFriendlyURLMapper extends BaseFriendlyURLMapper {
45
46 public String buildPath(LiferayPortletURL portletURL) {
47 String friendlyURLPath = null;
48
49 String strutsAction = GetterUtil.getString(
50 portletURL.getParameter("struts_action"));
51
52 if (strutsAction.equals("/wiki/view") ||
53 strutsAction.equals("/wiki/view_all_pages") ||
54 strutsAction.equals("/wiki/view_orphan_pages") ||
55 strutsAction.equals("/wiki/view_recent_changes")) {
56
57 String nodeId = portletURL.getParameter("nodeId");
58 String nodeName = portletURL.getParameter("nodeName");
59
60 if (Validator.isNotNull(nodeId) || Validator.isNotNull(nodeName)) {
61 StringBuilder sb = new StringBuilder();
62
63 sb.append(StringPool.SLASH);
64 sb.append(_MAPPING);
65 sb.append(StringPool.SLASH);
66
67 if (Validator.isNotNull(nodeId)) {
68 sb.append(nodeId);
69
70 portletURL.addParameterIncludedInPath("nodeId");
71 }
72 else if (Validator.isNotNull(nodeName)) {
73 sb.append(nodeName);
74
75 portletURL.addParameterIncludedInPath("nodeName");
76 }
77
78 if (strutsAction.equals("/wiki/view")) {
79 String title = portletURL.getParameter("title");
80
81 if (Validator.isNotNull(title)) {
82 sb.append(StringPool.SLASH);
83 sb.append(HttpUtil.encodeURL(title));
84
85 portletURL.addParameterIncludedInPath("title");
86
87 WindowState windowState = portletURL.getWindowState();
88
89 if (!windowState.equals(WindowState.NORMAL)) {
90 sb.append(StringPool.SLASH);
91 sb.append(windowState);
92 }
93 }
94 }
95 else {
96 sb.append(StringPool.SLASH);
97 sb.append(strutsAction.substring(11));
98 }
99
100 friendlyURLPath = sb.toString();
101 }
102 }
103 else if (strutsAction.equals("/wiki/view_tagged_pages")) {
104 String tag = portletURL.getParameter("tag");
105
106 StringBuilder sb = new StringBuilder();
107
108 if (Validator.isNotNull(tag)) {
109 sb.append(StringPool.SLASH);
110 sb.append(_MAPPING);
111 sb.append(StringPool.SLASH);
112 sb.append("tag");
113 sb.append(StringPool.SLASH);
114
115 sb.append(HttpUtil.encodeURL(tag));
116
117 portletURL.addParameterIncludedInPath("nodeId");
118 portletURL.addParameterIncludedInPath("nodeName");
119 portletURL.addParameterIncludedInPath("tag");
120 }
121
122 friendlyURLPath = sb.toString();
123 }
124
125 if (Validator.isNotNull(friendlyURLPath)) {
126 portletURL.addParameterIncludedInPath("p_p_id");
127
128 portletURL.addParameterIncludedInPath("struts_action");
129 }
130
131 return friendlyURLPath;
132 }
133
134 public String getMapping() {
135 return _MAPPING;
136 }
137
138 public String getPortletId() {
139 return _PORTLET_ID;
140 }
141
142 public void populateParams(
143 String friendlyURLPath, Map<String, String[]> params) {
144
145 addParam(params, "p_p_id", _PORTLET_ID);
146 addParam(params, "p_p_lifecycle", "0");
147 addParam(params, "p_p_mode", PortletMode.VIEW);
148
149 addParam(params, "struts_action", "/wiki/view");
150
151 int x = friendlyURLPath.indexOf(StringPool.SLASH, 1);
152
153 String[] urlFragments = StringUtil.split(
154 friendlyURLPath.substring(x + 1), StringPool.SLASH);
155
156 if (urlFragments.length >= 1) {
157 String urlFragment0 = urlFragments[0];
158
159 if (urlFragment0.equals("tag")) {
160 if (urlFragments.length >= 2) {
161 addParam(
162 params, "struts_action", "/wiki/view_tagged_pages");
163
164 String tag = HttpUtil.decodeURL(urlFragments[1]);
165
166 addParam(params, "tag", tag);
167 }
168 }
169 else {
170 if (Validator.isNumber(urlFragment0)) {
171 addParam(params, "nodeId", urlFragment0);
172 }
173 else {
174 addParam(params, "nodeName", urlFragment0);
175 }
176
177 if (urlFragments.length >= 2) {
178 String urlFragments1 = HttpUtil.decodeURL(urlFragments[1]);
179
180 if (urlFragments1.equals("all_pages") ||
181 urlFragments1.equals("orphan_pages") ||
182 urlFragments1.equals("recent_changes")) {
183
184 addParam(
185 params, "struts_action",
186 "/wiki/view_" + urlFragments1);
187 }
188 else {
189 addParam(params, "title", urlFragments1);
190
191 if (urlFragments.length >= 3) {
192 String windowState = urlFragments[2];
193
194 addParam(params, "p_p_state", windowState);
195 }
196 }
197 }
198 }
199 }
200 }
201
202 private static final String _MAPPING = "wiki";
203
204 private static final String _PORTLET_ID = PortletKeys.WIKI;
205
206 }