Render freemail links as links
[Sone.git] / src / main / java / net / pterodactylus / sone / template / ParserFilter.java
index 7cf8c70..c12b36d 100644 (file)
@@ -29,8 +29,11 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import javax.annotation.Nonnull;
+
 import net.pterodactylus.sone.core.Core;
 import net.pterodactylus.sone.data.Sone;
+import net.pterodactylus.sone.text.FreemailPart;
 import net.pterodactylus.sone.text.FreenetLinkPart;
 import net.pterodactylus.sone.text.LinkPart;
 import net.pterodactylus.sone.text.Part;
@@ -45,6 +48,9 @@ import net.pterodactylus.util.template.TemplateContext;
 import net.pterodactylus.util.template.TemplateContextFactory;
 import net.pterodactylus.util.template.TemplateParser;
 
+import com.google.common.base.Function;
+import com.google.common.base.Optional;
+
 /**
  * Filter that filters a given text through a {@link SoneTextParser}.
  *
@@ -170,6 +176,8 @@ public class ParserFilter implements Filter {
                        render(writer, (SonePart) part);
                } else if (part instanceof PostPart) {
                        render(writer, (PostPart) part);
+               } else if (part instanceof FreemailPart) {
+                       render(writer, (FreemailPart) part);
                } else if (part instanceof Iterable<?>) {
                        render(writer, (Iterable<Part>) part);
                }
@@ -263,6 +271,22 @@ public class ParserFilter implements Filter {
                renderLink(writer, "viewPost.html?post=" + postPart.getPost().getId(), excerpt.toString(), SoneAccessor.getNiceName(postPart.getPost().getSone()), "in-sone");
        }
 
+       private void render(@Nonnull Writer writer, @Nonnull FreemailPart freemailPart) {
+               Optional<Sone> sone = core.getSone(freemailPart.getIdentityId());
+               String soneName = sone.transform(new Function<Sone, String>() {
+                       @Nonnull
+                       @Override
+                       public String apply(Sone input) {
+                               return SoneAccessor.getNiceName(input);
+                       }
+               }).or(freemailPart.getIdentityId());
+               renderLink(writer,
+                               "/Freemail/NewMessage?to=" + freemailPart.getIdentityId(),
+                               String.format("%s@%s.freemail", freemailPart.getEmailLocalPart(), soneName),
+                               String.format("%s", soneName),
+                               "in-sone");
+       }
+
        /**
         * Renders the given link.
         *