1
22
23 package com.liferay.portlet.blogs;
24
25 import com.liferay.portal.kernel.portlet.BaseFriendlyURLMapper;
26 import com.liferay.portal.kernel.portlet.LiferayPortletURL;
27 import com.liferay.portal.kernel.portlet.LiferayWindowState;
28 import com.liferay.portal.kernel.util.GetterUtil;
29 import com.liferay.portal.kernel.util.StringPool;
30 import com.liferay.portal.kernel.util.Validator;
31 import com.liferay.portal.util.PortletKeys;
32
33 import java.util.Map;
34
35 import javax.portlet.PortletMode;
36 import javax.portlet.WindowState;
37
38
44 public class BlogsFriendlyURLMapper 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("/blogs/rss")) {
53 friendlyURLPath = "/blogs/rss";
54 }
55 else if (strutsAction.equals("/blogs/view_entry")) {
56 String entryId = portletURL.getParameter("entryId");
57
58 String urlTitle = portletURL.getParameter("urlTitle");
59
60 if (Validator.isNotNull(entryId)) {
61 friendlyURLPath = "/blogs/" + entryId;
62
63 portletURL.addParameterIncludedInPath("entryId");
64 }
65 else if (Validator.isNotNull(urlTitle)) {
66 friendlyURLPath = "/blogs/" + urlTitle;
67
68 portletURL.addParameterIncludedInPath("urlTitle");
69 }
70 }
71
72 if (Validator.isNotNull(friendlyURLPath)) {
73 portletURL.addParameterIncludedInPath("p_p_id");
74
75 portletURL.addParameterIncludedInPath("struts_action");
76
77 WindowState windowState = portletURL.getWindowState();
78
79 if (windowState.equals(WindowState.MAXIMIZED)) {
80 friendlyURLPath += StringPool.SLASH + windowState;
81 }
82 }
83
84 return friendlyURLPath;
85 }
86
87 public String getMapping() {
88 return _MAPPING;
89 }
90
91 public String getPortletId() {
92 return _PORTLET_ID;
93 }
94
95 public void populateParams(
96 String friendlyURLPath, Map<String, String[]> params) {
97
98 addParam(params, "p_p_id", _PORTLET_ID);
99 addParam(params, "p_p_lifecycle", "0");
100 addParam(params, "p_p_mode", PortletMode.VIEW);
101
102 int x = friendlyURLPath.indexOf("/", 1);
103 int y = friendlyURLPath.indexOf("/", x + 1);
104
105 if (y == -1) {
106 y = friendlyURLPath.length();
107 }
108
109 if ((x + 1) == friendlyURLPath.length()) {
110 addParam(params, "struts_action", "/blogs/view");
111
112 return;
113 }
114
115 String type = friendlyURLPath.substring(x + 1, y);
116
117 if (type.equals("rss")) {
118 addParam(params, "p_p_lifecycle", "1");
119 addParam(params, "p_p_state", LiferayWindowState.EXCLUSIVE);
120
121 addParam(params, "struts_action", "/blogs/rss");
122 }
123 else if (type.equals("trackback")) {
124 addParam(params, "p_p_lifecycle", "1");
125 addParam(params, "p_p_state", LiferayWindowState.EXCLUSIVE);
126
127 addParam(params, "struts_action", "/blogs/trackback");
128
129 type = friendlyURLPath.substring(y + 1);
130
131 addParam(params, getEntryIdParam(type), type);
132 }
133 else {
134 addParam(params, "struts_action", "/blogs/view_entry");
135
136 addParam(params, getEntryIdParam(type), type);
137 }
138
139 if (friendlyURLPath.indexOf("maximized", x) != -1) {
140 addParam(params, "p_p_state", WindowState.MAXIMIZED);
141 }
142 }
143
144 protected String getEntryIdParam(String type) {
145 if (Validator.isNumber(type)) {
146 return "entryId";
147 }
148 else {
149 return "urlTitle";
150 }
151 }
152
153 private static final String _MAPPING = "blogs";
154
155 private static final String _PORTLET_ID = PortletKeys.BLOGS;
156
157 }