package com.aperture_software.glados_wiki.markdown;
import com.aperture_software.glados_wiki.entities.User;
import com.aperture_software.glados_wiki.services.TimeZoneService;
import com.google.common.base.Function;
import com.google.common.base.Optional;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Created by jhyun on 14. 2. 27.
* @author jhyun
*/
public class WikiSignatureExpandFunction implements Function<String, String> {
private SigFunction sigFunction = null;
private EscapableRegexReplaceFunction rrf = null;
public WikiSignatureExpandFunction(TimeZoneService timeZoneService, Optional<User> user) {
sigFunction = new SigFunction(timeZoneService, user);
rrf = new EscapableRegexReplaceFunction(Pattern.compile("@@@@"), sigFunction, false);
}
private static class SigFunction implements Function<Matcher, String> {
private SigFunction(TimeZoneService timeZoneService, Optional<User> user) {
this.timeZoneService = timeZoneService;
this.user = user;
//
sig = sig_();
}
private TimeZoneService timeZoneService;
private Optional<User> user;
private String sig = null;
private String sig_() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MMM/dd/EEE HH:mm:ss (z)");
TimeZone tz = timeZoneService.getDefaultTimeZone();
String username = "Anonymous";
if (user.isPresent()) {
username = user.get().getUsername();
tz = timeZoneService.getTimeZoneByUsername(username);
}
//
Date dt = Calendar.getInstance(tz).getTime();
//
return String.format(" -- %s, %s", username, sdf.format(dt));
}
@Override
public String apply(Matcher input) {
return sig;
}
}
@Override
public String apply(String input) {
return rrf.apply(input);
}
}