package feedthistothat;
import java.util.Calendar;
import java.util.Collections;
import java.util.List;
import java.util.Vector;
import java.util.logging.Logger;
import feedthistothat.DataTypes.FeedParameters;
import feedthistothat.DataTypes.LinkEntry;
import feedthistothat.DataTypes.LinkSet;
import feedthistothat.Readers.ILinkSourceReader;
import feedthistothat.Readers.ReaderFactory;
import feedthistothat.Writers.IWriter;
import feedthistothat.Writers.WriterFactory;
public class Feeder {
public static String Feed(FeedParameters feedParameters) throws Exception{
Logger log = Logger.getLogger(Feeder.class.getName());
log.warning("Feeding: " + feedParameters.getSource().toString()+ "." + feedParameters.getSourceUserName() + " -> " +feedParameters.getDestination().toString() +"."+ feedParameters.getDestinationUserName());
ILinkSourceReader reader = ReaderFactory.GetReader(feedParameters.getSource(), feedParameters.getSourceUserName());
LinkSet links = reader.Read();
links = FilterLinksByDate(links, feedParameters.getLastUpdated(), feedParameters.getPostingTime());
String result;
if (links.size() == 0) {
result = "No entries found";
} else {
result = postLinks(feedParameters, links);
}
feedParameters.setResults(result);
feedParameters.setLastUpdated(feedParameters.getPostingTime().getTime());
if (feedParameters.isRepeats()) {
Calendar newPostingTime = feedParameters.getPostingTime();
newPostingTime.add(Calendar.DAY_OF_MONTH, feedParameters.getDaysToInclude());
feedParameters.setPostingTime(newPostingTime.getTime());
}
return result;
}
private static String postLinks(FeedParameters feedParameters, LinkSet links)
throws Exception {
String result;
Collections.sort(links);
String output = LinkPostFormatter.Format(links,feedParameters.getPostTemplate());
String header = LinkPostFormatter.FormatTitle(feedParameters.getPostingTime(), feedParameters.getSubjectTemplate());
IWriter writer = WriterFactory.GetWriter(feedParameters.getTimeZone(),feedParameters.getDestinationUserName(),feedParameters.getDestinationPassword(),feedParameters.getPostPrivately(),feedParameters.getUrl(),feedParameters.getDestination());
List<String> tagsForPosting;
if (feedParameters.getPostWithTags()) {
tagsForPosting = links.getTagNames();
String[] defaultTags = feedParameters.getDefaultTags().split(",");
for (int i = 0; i < defaultTags.length; i++) {
tagsForPosting.add(defaultTags[i]);
}
}
else{
tagsForPosting = new Vector<String>();
}
result = writer.Write(output, header, tagsForPosting);
return result;
}
private static LinkSet FilterLinksByDate(LinkSet links, Calendar startTime, Calendar endTime) {
LinkSet filteredList = new LinkSet();
for (LinkEntry linkEntry : links) {
if (linkEntry.PostedDate.before(endTime)
&& linkEntry.PostedDate.after(startTime)) {
filteredList.add(linkEntry);
}
}
return filteredList;
}
}