package de.flower.rmt.ui.app; import de.flower.common.ui.util.SessionUtils; import de.flower.common.util.Collections; import org.apache.commons.lang3.StringUtils; import org.apache.wicket.Component; import org.apache.wicket.markup.html.link.AbstractLink; import org.apache.wicket.markup.html.link.ExternalLink; import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.protocol.http.WebApplication; import javax.mail.internet.InternetAddress; import java.net.URLEncoder; import java.util.List; /** * @author flowerrrr */ public class Links { /** * @return /das-tool */ public static AbstractLink contextRoot(final String id) { return new ExternalLink(id, WebApplication.get().getServletContext().getContextPath()); } public static ExternalLink mailLink(String id, String emailAddress, boolean label) { ExternalLink link = mailLink(id, emailAddress, label ? emailAddress : null); return link; } public static ExternalLink mailLink(final String id, String emailAddress, final String label) { if (label == null) { return new ExternalLink(id, "mailto:" + emailAddress); } else { return new ExternalLink(id, "mailto:" + emailAddress, label); } } public static ExternalLink mailLink(final String id, final IModel<List<InternetAddress>> listModel) { IModel<String> hrefModel = new AbstractReadOnlyModel<String>() { @Override public String getObject() { List<InternetAddress> emailAddresses = listModel.getObject(); List<String> stringList = Collections.convert(emailAddresses, new Collections.IElementConverter<InternetAddress, String>() { @Override public String convert(final InternetAddress ia) { // fix for RMT-614 (umlaute pose problems in mailto-links) return ia.getAddress(); // return ia.toString(); } }); String href = StringUtils.join(stringList, getAddressDelimiter()); return "mailTo:" + URLEncoder.encode(href); } }; return new ExternalLink(id, hrefModel); } private static String getAddressDelimiter() { // outlook likes ';', iphone mail client prefers ','. but according to most sources ';' is correct when used in mailto. // could try to detect user agent String userAgent = SessionUtils.getUserAgent(); String DEFAULT = ";"; String MAC = ","; if (userAgent.toLowerCase().contains("windows")) { return DEFAULT; } else if (userAgent.toLowerCase().contains("mac")) { return MAC; } else { return DEFAULT; } } public static Component logoutLink(final String id) { return new ExternalLink(id, "/j_spring_security_logout").setContextRelative(true); } }