1 23 24 package org.infoglue.cms.applications.mydesktoptool.actions; 25 26 import java.io.IOException ; 27 import java.io.UnsupportedEncodingException ; 28 import java.net.URLEncoder ; 29 import java.util.ArrayList ; 30 import java.util.Iterator ; 31 import java.util.List ; 32 33 import org.apache.log4j.Logger; 34 import org.infoglue.cms.applications.common.actions.InfoGlueAbstractAction; 35 import org.infoglue.cms.applications.managementtool.actions.WYSIWYGPropertiesAction; 36 import org.infoglue.cms.controllers.kernel.impl.simple.ShortcutController; 37 import org.infoglue.cms.controllers.kernel.impl.simple.WorkflowController; 38 import org.infoglue.cms.entities.mydesktop.WorkflowActionVO; 39 import org.infoglue.cms.entities.mydesktop.WorkflowVO; 40 import org.infoglue.cms.exception.SystemException; 41 import org.infoglue.cms.util.CmsPropertyHandler; 42 import org.infoglue.cms.util.workflow.StepFilter; 43 44 import webwork.action.ActionContext; 45 46 import com.opensymphony.workflow.InvalidActionException; 47 import com.opensymphony.workflow.WorkflowException; 48 49 54 public class ViewMyDesktopToolStartPageAction extends InfoGlueAbstractAction 55 { 56 private final static Logger logger = Logger.getLogger(ViewMyDesktopToolStartPageAction.class.getName()); 57 58 private static final long serialVersionUID = 6543209932597662088L; 59 60 protected static final String INVALID_ACTION = "invalidAction"; 61 62 private static final WorkflowController controller = WorkflowController.getController(); 63 private static final ShortcutController shortcutController = ShortcutController.getController(); 64 65 private List availableWorkflowVOList; 66 private List workflowVOList; 67 private List availableShortcutVOList; 68 69 private WorkflowVO workflow = new WorkflowVO(); 70 private int actionId; 71 private String finalReturnAddress = ""; 72 73 public List getWorkflowVOList() 74 { 75 return workflowVOList; 76 } 77 78 public List getAvailableWorkflowVOList() 79 { 80 return availableWorkflowVOList; 81 } 82 83 public List getAvailableShortcutVOList() 84 { 85 return availableShortcutVOList; 86 } 87 88 public List getWorkflowActionVOList() 89 { 90 return getAvailableActions(null); 91 } 92 93 public List getWorkflowActionVOList(StepFilter filter) 94 { 95 return getAvailableActions(filter); 96 } 97 98 102 WorkflowVO getWorkflow() 103 { 104 return workflow; 105 } 106 107 111 public void setWorkflowName(String name) 112 { 113 workflow.setName(name); 114 } 115 116 private String getWorkflowName() 117 { 118 return workflow.getName(); 119 } 120 121 125 public void setActionId(int actionId) 126 { 127 this.actionId = actionId; 128 } 129 130 134 public void setWorkflowId(long workflowId) 135 { 136 workflow.setWorkflowId(new Long (workflowId)); 137 } 138 139 private long getWorkflowId() 140 { 141 return workflow.getIdAsPrimitive(); 142 } 143 144 149 public String doExecute() throws SystemException 150 { 151 populateLists(); 152 return SUCCESS; 153 } 154 155 164 public String doStartWorkflow() throws SystemException 165 { 166 workflow = controller.initializeWorkflow(getInfoGluePrincipal(), getWorkflowName(), actionId, WorkflowController.createWorkflowParameters(ActionContext.getRequest())); 167 return redirectToView(); 168 } 169 170 182 public String doInvoke() throws SystemException 183 { 184 logger.info("****************************************"); 185 logger.info("workflowId:" + getWorkflowId()); 186 logger.info("actionId:" + actionId); 187 logger.info("****************************************"); 188 189 try 190 { 191 workflow = controller.invokeAction(getInfoGluePrincipal(), getWorkflowId(), actionId, WorkflowController.createWorkflowParameters(ActionContext.getRequest())); 192 return redirectToView(); 193 } 194 catch (InvalidActionException e) 195 { 196 return INVALID_ACTION; 197 } 198 catch (WorkflowException e) 199 { 200 throw new SystemException(e); 201 } 202 } 203 204 216 private String redirectToView() throws SystemException 217 { 218 for (Iterator i = workflow.getAvailableActions().iterator(); i.hasNext();) 219 { 220 String url = getViewUrl((WorkflowActionVO)i.next()); 221 if (url.length() > 0) 222 return redirect(url); 223 } 224 225 if(this.finalReturnAddress != null && !this.finalReturnAddress.equals("")) 226 return redirect(finalReturnAddress); 227 228 logger.info("No action view, coming back to mydesktop..."); 229 return doExecute(); 230 } 231 232 236 private void populateLists() throws SystemException 237 { 238 availableWorkflowVOList = controller.getAvailableWorkflowVOList(getInfoGluePrincipal()); 239 final String showAllWorkflows = CmsPropertyHandler.getShowAllWorkflows(); 240 if(showAllWorkflows == null || showAllWorkflows.equalsIgnoreCase("true")) 241 { 242 workflowVOList = controller.getCurrentWorkflowVOList(getInfoGluePrincipal()); 243 } 244 else 245 { 246 workflowVOList = controller.getMyCurrentWorkflowVOList(getInfoGluePrincipal()); 247 } 248 249 availableShortcutVOList = shortcutController.getAvailableShortcutVOList(getInfoGluePrincipal()); 250 } 251 252 258 private List getAvailableActions(StepFilter filter) 259 { 260 List actions = new ArrayList (); 261 for (Iterator workflows = workflowVOList.iterator(); workflows.hasNext();) 262 actions.addAll(((WorkflowVO)workflows.next()).getAvailableActions(filter)); 263 264 return actions; 265 } 266 267 273 private String getViewUrl(WorkflowActionVO action) throws SystemException 274 { 275 if (!action.hasView()) 276 return ""; 277 278 StringBuffer buffer = new StringBuffer (action.getView()); 279 if (containsQuestionMark(action.getView())) 280 buffer.append('&'); 281 else 282 buffer.append('?'); 283 284 return buffer.append("workflowId=").append(getWorkflowId()).append("&actionId=").append(action.getId()) 285 .append("&returnAddress=").append(getReturnAddress()).append("&finalReturnAddress=").append(getFinalReturnAddress()).append('&') 286 .append(getRequest().getQueryString()).toString(); 287 } 288 289 private static boolean containsQuestionMark(String s) 290 { 291 return s.indexOf("?") >= 0; 292 } 293 294 299 private String getReturnAddress() throws SystemException 300 { 301 try 302 { 303 String cmsFullBaseUrl = CmsPropertyHandler.getCmsFullBaseUrl(); 304 logger.info("cmsFullBaseUrl:" + cmsFullBaseUrl); 305 if(cmsFullBaseUrl != null && !cmsFullBaseUrl.equals("")) 306 return URLEncoder.encode(cmsFullBaseUrl + "/ViewMyDesktopToolStartPage!invoke.action", "UTF-8"); 307 else 308 return URLEncoder.encode(getURLBase() + "/ViewMyDesktopToolStartPage!invoke.action", "UTF-8"); 309 } 310 catch (UnsupportedEncodingException e) 311 { 312 throw new SystemException(e); 313 } 314 } 315 316 private String redirect(String url) throws SystemException 317 { 318 try 319 { 320 logger.info("Url in doInvoke:" + url); 321 getResponse().sendRedirect(url); 322 return NONE; 323 } 324 catch (IOException e) 325 { 326 throw new SystemException(e); 327 } 328 } 329 330 335 private String getFinalReturnAddress() throws SystemException 336 { 337 try 338 { 339 return URLEncoder.encode(this.finalReturnAddress, "UTF-8"); 340 } 341 catch (UnsupportedEncodingException e) 342 { 343 throw new SystemException(e); 344 } 345 } 346 347 public void setFinalReturnAddress(String finalReturnAddress) 348 { 349 if(finalReturnAddress != null && !finalReturnAddress.equals("null")) 350 this.finalReturnAddress = finalReturnAddress; 351 } 352 } 353 | Popular Tags |