1 19 20 package com.sslexplorer.replacementproxy.actions; 21 22 import java.util.ArrayList ; 23 import java.util.Iterator ; 24 import java.util.List ; 25 26 import javax.servlet.http.HttpServletRequest ; 27 import javax.servlet.http.HttpServletResponse ; 28 29 import org.apache.commons.logging.Log; 30 import org.apache.commons.logging.LogFactory; 31 import org.apache.struts.Globals; 32 import org.apache.struts.action.ActionForm; 33 import org.apache.struts.action.ActionForward; 34 import org.apache.struts.action.ActionMapping; 35 import org.apache.struts.action.ActionMessage; 36 import org.apache.struts.action.ActionMessages; 37 38 import com.sslexplorer.core.CoreEvent; 39 import com.sslexplorer.core.CoreServlet; 40 import com.sslexplorer.core.CoreUtil; 41 import com.sslexplorer.core.actions.AuthenticatedDispatchAction; 42 import com.sslexplorer.policyframework.Permission; 43 import com.sslexplorer.policyframework.PolicyConstants; 44 import com.sslexplorer.replacementproxy.Replacement; 45 import com.sslexplorer.replacementproxy.ReplacementItem; 46 import com.sslexplorer.replacementproxy.forms.ReplacementsForm; 47 import com.sslexplorer.security.SessionInfo; 48 import com.sslexplorer.webforwards.WebForwardDatabase; 49 import com.sslexplorer.webforwards.WebForwardDatabaseFactory; 50 import com.sslexplorer.webforwards.WebForwardEventConstants; 51 52 public class ReplacementsDispatchAction extends AuthenticatedDispatchAction { 53 54 static Log log = LogFactory.getLog(ReplacementsDispatchAction.class); 55 static String ATTR_REPLACEMENT = "replacement"; 56 57 public ReplacementsDispatchAction() { 58 super(PolicyConstants.REPLACEMENTS_RESOURCE_TYPE, new Permission[] { PolicyConstants.PERM_CHANGE }); 59 } 60 61 public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, 62 HttpServletResponse response) throws Exception { 63 try { 64 CoreUtil.clearFlow(request); 65 66 WebForwardDatabase udb = WebForwardDatabaseFactory.getInstance(); 67 List replacements = udb.getReplacements(); 68 List replacementItems = new ArrayList (); 69 int idx = 0; 70 ReplacementItem item = null; 71 String lastMimeType = null; 72 String lastSite = null; 73 for (Iterator i = replacements.iterator(); i.hasNext();) { 74 Replacement r = (Replacement) i.next(); 75 if (lastSite == null || !lastSite.equals(r.getSitePattern())) { 76 lastSite = r.getSitePattern(); 77 } else { 78 if (lastMimeType == null || !lastMimeType.equals(r.getMimeType())) { 79 lastMimeType = r.getMimeType(); 80 } 81 } 82 ReplacementItem n = new ReplacementItem(idx, r); 83 n.setCanMoveUp(replacementItems.size() > 0); 84 n.setCanMoveDown(true); 85 item = n; 86 replacementItems.add(item); 87 idx++; 88 } 89 if (item != null) { 90 item.setCanMoveDown(false); 91 } 92 ((ReplacementsForm) form).initialize(replacementItems); 93 } catch (Exception ex) { 94 log.error("Failed to setup form.", ex); 95 } 96 return mapping.findForward("success"); 97 } 98 99 public ActionForward swap(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 100 throws Exception { 101 int idx1 = Integer.parseInt(request.getParameter("idx1")); 102 int idx2 = Integer.parseInt(request.getParameter("idx2")); 103 ReplacementsForm rf = (ReplacementsForm) form; 104 ReplacementItem item1 = (ReplacementItem) rf.getReplacementItems().get(idx1); 105 ReplacementItem item2 = (ReplacementItem) rf.getReplacementItems().get(idx2); 106 Replacement rep1 = item1.getReplacement(); 107 Replacement rep2 = item2.getReplacement(); 108 String mimeType1 = rep1.getMimeType(); 109 String sitePattern1 = rep1.getSitePattern(); 110 String matchPattern1 = rep1.getMatchPattern(); 111 String replacePattern1 = rep1.getReplacePattern(); 112 rep1.setMatchPattern(rep2.getMatchPattern()); 113 rep1.setMimeType(rep2.getMimeType()); 114 rep1.setSitePattern(rep2.getSitePattern()); 115 rep1.setReplacePattern(rep2.getReplacePattern()); 116 rep2.setMatchPattern(matchPattern1); 117 rep2.setMimeType(mimeType1); 118 rep2.setSitePattern(sitePattern1); 119 rep2.setReplacePattern(replacePattern1); 120 SessionInfo info = this.getSessionInfo(request); 121 try { 122 WebForwardDatabaseFactory.getInstance().updateReplacement(rep1); 123 CoreServlet.getServlet().fireCoreEvent( 124 new CoreEvent(this, WebForwardEventConstants.REPLACEMENT_PRECEDENCE_CHANGED, null, info, CoreEvent.STATE_SUCCESSFUL).addAttribute( 125 WebForwardEventConstants.EVENT_ATTR_REPLACEMENT_TYPE, String.valueOf(rep1.getReplaceType()))); 126 try { 127 WebForwardDatabaseFactory.getInstance().updateReplacement(rep2); 128 CoreServlet.getServlet().fireCoreEvent( 129 new CoreEvent(this, WebForwardEventConstants.REPLACEMENT_PRECEDENCE_CHANGED, null, info, CoreEvent.STATE_SUCCESSFUL) 130 .addAttribute(WebForwardEventConstants.EVENT_ATTR_REPLACEMENT_TYPE, String.valueOf(rep2 131 .getReplaceType()))); 132 return mapping.findForward("success"); 133 } catch (Exception e) { 134 CoreServlet.getServlet().fireCoreEvent( 135 new CoreEvent(this, WebForwardEventConstants.REPLACEMENT_PRECEDENCE_CHANGED, null, info, CoreEvent.STATE_UNSUCCESSFUL) 136 .addAttribute(WebForwardEventConstants.EVENT_ATTR_REPLACEMENT_TYPE, String.valueOf(rep2 137 .getReplaceType()))); 138 throw e; 139 } 140 } catch (Exception e) { 141 CoreServlet.getServlet().fireCoreEvent( 142 new CoreEvent(this, WebForwardEventConstants.REPLACEMENT_PRECEDENCE_CHANGED, null, info, CoreEvent.STATE_UNSUCCESSFUL).addAttribute( 143 WebForwardEventConstants.EVENT_ATTR_REPLACEMENT_TYPE, String.valueOf(rep1.getReplaceType()))); 144 throw e; 145 } 146 } 147 148 public ActionForward remove(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 149 throws Exception { 150 List sel = new ArrayList (); 151 ReplacementsForm rf = (ReplacementsForm) form; 152 int selectedSequence = Integer.parseInt((String ) request.getParameter("sequence")); 153 for (Iterator i = rf.getReplacementItems().iterator(); i.hasNext();) { 154 ReplacementItem item = (ReplacementItem) i.next(); 155 if (item.getReplacement().getSequence() == selectedSequence) { 156 sel.add(item.getReplacement()); 157 } 158 } 159 if (sel.size() == 0) { 160 ActionMessages errs = new ActionMessages(); 161 errs.add(Globals.ERROR_KEY, new ActionMessage("replacements.error.noReplacementsSelectedToDelete")); 162 saveErrors(request, errs); 163 } else { 164 SessionInfo info = this.getSessionInfo(request); 165 for (Iterator i = sel.iterator(); i.hasNext();) { 166 Replacement r = (Replacement) i.next(); 167 try { 168 WebForwardDatabaseFactory.getInstance().deleteReplacement(r.getSequence()); 169 CoreServlet.getServlet().fireCoreEvent( 170 new CoreEvent(this, WebForwardEventConstants.DELETE_REPLACEMENT, null, info, CoreEvent.STATE_SUCCESSFUL) 171 .addAttribute(WebForwardEventConstants.EVENT_ATTR_REPLACEMENT_SEQUENCE, String.valueOf(r 172 .getSequence()))); 173 ActionMessages msgs = new ActionMessages(); 174 msgs.add(Globals.ERROR_KEY, new ActionMessage("replacements.message.replacementsDeleted", String.valueOf(sel 175 .size()))); 176 saveMessages(request, msgs); 177 } catch (Exception e) { 178 CoreServlet.getServlet().fireCoreEvent( 179 new CoreEvent(this, WebForwardEventConstants.DELETE_REPLACEMENT, null, info, CoreEvent.STATE_UNSUCCESSFUL) 180 .addAttribute(WebForwardEventConstants.EVENT_ATTR_REPLACEMENT_SEQUENCE, String.valueOf(r 181 .getSequence()))); 182 } 183 } 184 } 185 ((ReplacementsForm) form).setReferer(CoreUtil.getReferer(request)); 187 return mapping.findForward("display"); 188 } 189 190 public ActionForward create(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 191 throws Exception { 192 return mapping.findForward("create"); 193 } 194 195 public ActionForward edit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 196 throws Exception { 197 ReplacementsForm rf = (ReplacementsForm) form; 198 int selectedSequence = Integer.parseInt((String ) request.getParameter("sequence")); 199 List sel = new ArrayList (); 200 for (Iterator i = rf.getReplacementItems().iterator(); i.hasNext();) { 201 ReplacementItem item = (ReplacementItem) i.next(); 202 if (item.getReplacement().getSequence() == selectedSequence) { 203 sel.add(item.getReplacement()); 204 } 205 } 206 if (sel.size() != 1) { 207 ActionMessages errs = new ActionMessages(); 208 errs.add(Globals.ERROR_KEY, new ActionMessage("replacements.error.invalidSelectionToEdit")); 209 saveErrors(request, errs); 210 } else { 211 Replacement replacement = (Replacement) sel.get(0); 212 request.setAttribute(ATTR_REPLACEMENT, replacement); 213 return mapping.findForward("edit"); 214 } 215 return mapping.findForward("success"); 216 } 217 218 public int getNavigationContext(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 219 return SessionInfo.MANAGEMENT_CONSOLE_CONTEXT | SessionInfo.USER_CONSOLE_CONTEXT; 220 } 221 222 } | Popular Tags |