<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.Map"%> <%@ page import="java.util.HashMap"%> <%@ page import="java.util.List"%> <%@ page import="java.util.ArrayList"%> <%@ page import="java.util.Set"%> <%@ page import="java.util.HashSet"%> <%@ page import="java.util.Collections"%> <%@ page import="java.util.Comparator"%> <%@ page import="com.stephenschafer.email.Logger"%> <%@ page import="com.stephenschafer.email.Mapping"%> <%@ page import="com.stephenschafer.email.Util"%> <%@ page import="com.stephenschafer.email.User"%> <% final User user = Util.identify(session); if (user == null) { session.setAttribute("return-servlet-path", request.getServletPath()); session.setAttribute("return-query-string", request.getQueryString()); response.sendRedirect("login.jsp"); return; } String domainString = request.getParameter("domain"); if(domainString == null) { domainString = (String)session.getAttribute("domain-filter"); } else { session.setAttribute("domain-filter", domainString); } String targetString = request.getParameter("target"); if(targetString == null) { targetString = (String)session.getAttribute("target-filter"); } else { session.setAttribute("target-filter", targetString); } String hideDisabledString = request.getParameter("hide-disabled"); /* if(hideDisabledString == null) { hideDisabledString = (String) session.getAttribute("hide-disabled-filter"); } else { session.setAttribute("hide-disabled-filter", hideDisabledString); } */ final boolean hideDisabled = "hide".equals(hideDisabledString); Util.updateSession(session); @SuppressWarnings("unchecked") final List targetList = (List) session.getAttribute("target-list"); @SuppressWarnings("unchecked") final List domainList = (List) session.getAttribute("domain-list"); final List mappings = Util.getMappings(); Logger.log(String.format("got %d mappings", Integer.valueOf(mappings.size()))); final List domainOptions = new ArrayList<>(); boolean domainFound = false; for(final String domain : domainList) { final String selected; if(domain.equals(domainString)) { domainFound = true; selected = " selected"; } else { selected = ""; } domainOptions.add(String.format("", domain, selected, domain)); } if(!domainFound) { domainString = null; session.removeAttribute("domain-filter"); } final List targetOptions = new ArrayList<>(); boolean targetFound = false; for(final String target : targetList) { final String selected; if(target.equals(targetString)) { targetFound = true; selected = " selected"; } else { selected = ""; } targetOptions.add(String.format("", target, selected, target)); } if(!targetFound) { targetString = null; session.removeAttribute("target-filter"); } final Map> names = new HashMap<>(); %> Virtual Addresses

Virtual Addresses

<% final String hideDisabledChecked = hideDisabled ? " checked" : ""; %>
<% for(final Mapping mapping : mappings) { if(!mapping.qualifies(user)) { continue; } if(domainString != null && domainString.trim().length() > 0 && !domainString.equals(mapping.getDomain())) { continue; } if(targetString != null && targetString.trim().length() > 0 && !targetString.equals(mapping.getTarget())) { continue; } if(hideDisabled && mapping.isDisabled()) { continue; } final String disabledClass = mapping.isDisabled() ? " disabled" : ""; %> <% if(!mapping.isDisabled()) { String mappingDomain = mapping.getDomain(); if(mappingDomain == null) { mappingDomain = ""; } Set namesForDomain = names.get(mappingDomain); if(namesForDomain == null) { namesForDomain = new HashSet<>(); names.put(mappingDomain, namesForDomain); } namesForDomain.add(mapping.getName()); } } %>
<%=mapping.getAddress()%> <%=mapping.getTarget()%> <%=mapping.getDisplayDescription()%> <%=mapping.isDisabled() ? "disabled" : "" %> <%=mapping.getFormattedDate() %>
<% final List domains = new ArrayList<>(names.keySet()); Collections.sort(domains); for(String mappingDomain : domains) { List namesForDomain = new ArrayList<>(names.get(mappingDomain)); Collections.sort(namesForDomain); %>

Names for <%=mappingDomain %>

<% String sep = ""; for(final String name : namesForDomain) { out.print(sep); sep = ", "; out.println(name); } %>
<% } %>