1 | package edu.iu.uis.sit.portal.portlet.publishing.web; |
2 | |
3 | import java.sql.Timestamp; |
4 | import java.text.NumberFormat; |
5 | import java.util.ArrayList; |
6 | import java.util.Iterator; |
7 | import java.util.List; |
8 | |
9 | import javax.portlet.ActionRequest; |
10 | import javax.portlet.ActionResponse; |
11 | import javax.portlet.PortletRequest; |
12 | import javax.portlet.RenderRequest; |
13 | import javax.portlet.RenderResponse; |
14 | |
15 | import org.springframework.beans.propertyeditors.CustomNumberEditor; |
16 | import org.springframework.beans.propertyeditors.StringTrimmerEditor; |
17 | import org.springframework.validation.BindException; |
18 | import org.springframework.validation.Errors; |
19 | import org.springframework.web.portlet.ModelAndView; |
20 | import org.springframework.web.portlet.bind.PortletRequestDataBinder; |
21 | import org.springframework.web.portlet.mvc.AbstractWizardFormController; |
22 | |
23 | import edu.iu.uis.sit.portal.portlet.publishing.domain.Acl; |
24 | import edu.iu.uis.sit.portal.portlet.publishing.domain.Fragment; |
25 | import edu.iu.uis.sit.portal.portlet.publishing.services.PublishingService; |
26 | import edu.iu.uis.sit.portal.portlet.security.expression.Expression; |
27 | import edu.iu.uis.sit.portal.portlet.utility.Constants; |
28 | |
29 | public class FragmentWizardController extends AbstractWizardFormController { |
30 | |
31 | private PublishingService publishingService; |
32 | |
33 | public void afterPropertiesSet() throws Exception { |
34 | if (getPublishingService() == null) { |
35 | throw new IllegalArgumentException("A PublishingService is required"); |
36 | } |
37 | } |
38 | |
39 | protected void handleActionRequestInternal(ActionRequest request, ActionResponse response) throws Exception { |
40 | WebFragment webFragment = (WebFragment) getCommand(request); |
41 | webFragment.setAddPublishGroup(request.getParameter("addPublishGroup") != null); |
42 | webFragment.setAddViewGroup(request.getParameter("addViewGroup") != null); |
43 | webFragment.setAddViewRole(request.getParameter("addViewRole") != null); |
44 | |
45 | if (request.getParameter("removeAclValue") != null && !"".equals(request.getParameter("removeAclValue"))) { |
46 | for (Iterator iter = webFragment.getFragment().getAcls().iterator(); iter.hasNext();) { |
47 | Acl acl = (Acl) iter.next(); |
48 | if (acl.getKey().equals(request.getParameter("removeAclKey")) && acl.getType().equals(request.getParameter("removeAclType")) && acl.getValue().equals(request.getParameter("removeAclValue"))) { |
49 | iter.remove(); |
50 | break; |
51 | } |
52 | } |
53 | } |
54 | String attributeName = getFormSessionAttributeName(); |
55 | request.getPortletSession().setAttribute(attributeName, (Object) webFragment); |
56 | super.handleActionRequestInternal(request, response); |
57 | } |
58 | |
59 | protected ModelAndView handleRenderRequestInternal(RenderRequest request, RenderResponse response) throws Exception { |
60 | ModelAndView modelAndView = super.handleRenderRequestInternal(request, response); |
61 | try { |
62 | WebFragment webFragment = (WebFragment) getRenderCommand(request); |
63 | List groupViews = new ArrayList(); |
64 | List roleViews = new ArrayList(); |
65 | List groupPublishs = new ArrayList(); |
66 | for (Iterator iter = webFragment.getFragment().getAcls().iterator(); iter.hasNext();) { |
67 | Acl acl = (Acl) iter.next(); |
68 | if (Constants.GROUP_PUBLISH.equals(acl.getType())) { |
69 | groupPublishs.add(acl); |
70 | } else if (Constants.GROUP_VIEW.equals(acl.getType())) { |
71 | groupViews.add(acl); |
72 | } else if (Constants.ROLE_VIEW.equals(acl.getType())) { |
73 | roleViews.add(acl); |
74 | } |
75 | } |
76 | modelAndView.addObject("roleViews", roleViews); |
77 | modelAndView.addObject("groupPublishs", groupPublishs); |
78 | modelAndView.addObject("groupViews", groupViews); |
79 | } catch (Exception e) { |
80 | |
81 | } |
82 | if (request.getParameter("updateFragment") != null) { |
83 | modelAndView.addObject("page",5); |
84 | modelAndView.setViewName("fragmentPage5"); |
85 | } |
86 | return modelAndView; |
87 | } |
88 | |
89 | protected void processFinish(ActionRequest request, ActionResponse response, Object command, BindException errors) throws Exception { |
90 | Timestamp now = new Timestamp(System.currentTimeMillis()); |
91 | WebFragment webFragment = (WebFragment) command; |
92 | Fragment fragment = webFragment.getFragment(); |
93 | fragment.setLastUpdateDate(now); |
94 | if (fragment.getFragmentId() == null) { |
95 | fragment.setCreateDate(now); |
96 | } |
97 | if (Constants.XML_TYPE.equals(fragment.getType())) { |
98 | fragment.getFragmentText().setFragment(fragment); |
99 | } else { |
100 | fragment.setFragmentText(null); |
101 | } |
102 | if (fragment.getFragmentId() == null) { |
103 | response.setRenderParameter("new", "new"); |
104 | } |
105 | Expression expression = createExpression(webFragment); |
106 | getPublishingService().saveFragment(fragment); |
107 | } |
108 | |
109 | protected void processCancel(ActionRequest request, ActionResponse response, Object command, BindException errors) throws Exception { |
110 | response.setRenderParameter("action", "addFragment"); |
111 | } |
112 | |
113 | protected void validatePage(Object command, Errors errors, int page, boolean finish) { |
114 | if (finish) { |
115 | this.getValidator().validate(command, errors); |
116 | return; |
117 | } |
118 | WebFragment webFragment = (WebFragment) command; |
119 | FragmentValidator fragmentValidator = (FragmentValidator) getValidator(); |
120 | switch (page) { |
121 | case 0: |
122 | if (Constants.RSS_TYPE.equals(webFragment.getFragment().getType())) { |
123 | fragmentValidator.validateRSSPage1(webFragment, errors); |
124 | } else if (Constants.XML_TYPE.equals(webFragment.getFragment().getType())) { |
125 | fragmentValidator.validateXMLPage1(webFragment, errors); |
126 | } else if (Constants.URL_TYPE.equals(webFragment.getFragment().getType())) { |
127 | fragmentValidator.validateURLPage1(webFragment, errors); |
128 | } |
129 | break; |
130 | case 1: |
131 | fragmentValidator.validatePage2(webFragment, errors); |
132 | break; |
133 | case 2: |
134 | fragmentValidator.validatePage3(webFragment, errors); |
135 | break; |
136 | case 3: |
137 | fragmentValidator.validatePage4(webFragment, errors); |
138 | break; |
139 | } |
140 | } |
141 | |
142 | protected void initBinder(PortletRequest request, PortletRequestDataBinder binder) throws Exception { |
143 | NumberFormat nf = NumberFormat.getInstance(); |
144 | binder.registerCustomEditor(Integer.class, new CustomNumberEditor(Integer.class, nf, true)); |
145 | binder.registerCustomEditor(Long.class, new CustomNumberEditor(Long.class, nf, true)); |
146 | binder.registerCustomEditor(String.class, new StringTrimmerEditor(true)); |
147 | } |
148 | |
149 | protected ModelAndView renderCancel(RenderRequest request, RenderResponse response, Object command, BindException errors) throws Exception { |
150 | ModelAndView modelAndView = new ModelAndView("start"); |
151 | return modelAndView; |
152 | } |
153 | |
154 | protected ModelAndView renderFinish(RenderRequest request, RenderResponse response, Object command, BindException errors) throws Exception { |
155 | if (request.getParameter("new") != null) { |
156 | ModelAndView modelAndView = new ModelAndView("message"); |
157 | modelAndView.addObject("message", "Saved successfully"); |
158 | return modelAndView; |
159 | } |
160 | ModelAndView modelAndView = new ModelAndView("fragmentPage5"); |
161 | modelAndView.addObject("webFragment",((WebFragment)command)); |
162 | modelAndView.addObject("page",5); |
163 | String attributeName = getFormSessionAttributeName(); |
164 | |
165 | request.getPortletSession().setAttribute(attributeName, command); |
166 | return modelAndView; |
167 | } |
168 | |
169 | protected int getInitialPage(PortletRequest request, Object command) { |
170 | WebFragment webFragment = (WebFragment) command; |
171 | |
172 | if (request.getParameter("fragmentId") != null) { |
173 | Fragment found = getPublishingService().findFragmentById(new Long(request.getParameter("fragmentId"))); |
174 | if (found != null) { |
175 | webFragment.setFragment(found); |
176 | } |
177 | } else { |
178 | webFragment.getFragment().setType(new Long(request.getParameter("fragmentType"))); |
179 | webFragment.getFragment().getAclExpression().setAclExpressionType(Constants.OR); |
180 | } |
181 | return super.getInitialPage(request, webFragment); |
182 | } |
183 | |
184 | protected ModelAndView renderInvalidSubmit(RenderRequest request, RenderResponse response) throws Exception { |
185 | return null; |
186 | } |
187 | |
188 | protected void handleInvalidSubmit(ActionRequest request, ActionResponse response) throws Exception { |
189 | response.setRenderParameter("action", "addFragment"); |
190 | } |
191 | |
192 | public PublishingService getPublishingService() { |
193 | return publishingService; |
194 | } |
195 | |
196 | public void setPublishingService(PublishingService publishingService) { |
197 | this.publishingService = publishingService; |
198 | } |
199 | |
200 | |
201 | private Expression createExpression(WebFragment webFragment) { |
202 | String xml = parseExpressionHtml(webFragment); |
203 | |
204 | return null; |
205 | } |
206 | |
207 | private String parseExpressionHtml(WebFragment webFragment) { |
208 | if (webFragment.getWebAclExpression() == null) { |
209 | return ""; |
210 | } |
211 | String xml = webFragment.getWebAclExpression(); |
212 | xml = xml.replaceAll(">", ">\n"); |
213 | xml = xml.replaceAll(".*<script.*", ""); |
214 | xml = xml.replaceAll(".*</script.*", ""); |
215 | xml = xml.replaceAll("<input.*type=\"radio\">", ""); |
216 | xml = xml.replaceAll(" <a href=.*", ""); |
217 | xml = xml.replaceAll("remove</a>", ""); |
218 | xml = xml.replaceAll("\n", ""); |
219 | xml = xml.replaceAll("<li>Root</li>", ""); |
220 | xml = xml.replaceAll(" ", ""); |
221 | xml = xml.replaceAll("\r", ""); |
222 | return xml; |
223 | } |
224 | } |