/*
* Created on Feb 19, 2005
*
*/
package net.sf.thingamablog.generator;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import net.sf.thingamablog.blog.ArchiveRange;
import net.sf.thingamablog.blog.BlogEntry;
import net.sf.thingamablog.blog.TBWeblog;
/**
* @author BT
*
*/
public class NextPreviousContainer implements TemplateContainer
{
public static final int NEXT = -1;
public static final int PREV = -2;
private int dir = NEXT;
private long entryID = -1;
private ArchiveRange arc = null;
private String cat = null;
private TBWeblog blog = null;
private boolean exists = true;
private HyperTextTag pageTitleTag = new HyperTextTag("PageName");
private TextTag pageLinkTag = new TextTag("PageLink");
private String pageTitle;
private String pageLink;
public NextPreviousContainer(int dir)
{
this.dir = dir;
}
public NextPreviousContainer(TBWeblog blog, String cat, int dir)
{
this(dir);
this.cat = cat;
this.blog = blog;
}
public NextPreviousContainer(TBWeblog blog, ArchiveRange arc, int dir)
{
this(dir);
this.arc = arc;
this.blog = blog;
}
public NextPreviousContainer(TBWeblog blog, long id, int dir)
{
this(dir);
this.entryID = id;
this.blog = blog;
}
public List getContainers()
{
ArrayList list = new ArrayList(2);
list.add(new IfPageExists());
list.add(new IfNoPageExists());
return list;
}
public List getTags()
{
//return tags;
return null;
}
public Hashtable getDefaultAttributes()
{
return null;
}
/* (non-Javadoc)
* @see net.sf.thingamablog.generator1.TemplateContainer#processAgain()
*/
public boolean processAgain()
{
return false;
}
/* (non-Javadoc)
* @see net.sf.thingamablog.generator1.TemplateContainer#prefix()
*/
public String prefix()
{
return null;
}
/* (non-Javadoc)
* @see net.sf.thingamablog.generator1.TemplateContainer#postfix()
*/
public String postfix()
{
return null;
}
public void initialize(Hashtable attribs)
{
if(blog == null)
{
exists = false;
return;
}
if(cat != null)
{
try
{
String cats[] = blog.getCategories();
Object o = getNextOrPrev(cat, cats);
if(o != null)
{
String c = o.toString();
pageTitle = c;
pageLink = blog.getArchiveUrl() + blog.getCategoryFileName(c);
exists = true;
}
else
exists = false;
}
catch(Exception ex)
{
exists = false;
}
}
else if(arc != null)
{
try
{
ArchiveRange arcs[] = blog.getArchives();
Object o = getNextOrPrev(arc, arcs);
if(o != null)
{
ArchiveRange a = (ArchiveRange)o;
pageTitle = a.getFormattedRange();
pageLink = blog.getArchiveUrl() + blog.getArchiveFileName(a);
exists = true;
}
else
exists = false;
}
catch(Exception ex)
{
exists = false;
}
}
else if(entryID > -1)
{
try
{
BlogEntry be = blog.getEntry(entryID);
if(dir == NEXT)
be = blog.getEntryAfter(be.getDate());
else
be = blog.getEntryBefore(be.getDate());
if(be != null)
{
pageTitle = be.getTitle();
pageLink = blog.getUrlForEntry(be);
}
else
exists = false;
}
catch(Exception ex)
{
exists = false;
}
}
}
private Object getNextOrPrev(Object o, Object ar[])
{
if(ar.length == 0)
return null;
int i;
for(i = 0; i < ar.length; i++)
{
if(ar[i].equals(o))
break;
}
if(dir == NEXT)
{
if(i < ar.length - 1)
return ar[i + 1];
}
else
{
if(i > 0)
return ar[i - 1];
}
return null;
}
public String getName()
{
if(dir == NEXT)
return "NextPage";
return "PreviousPage";
}
public boolean isVisible()
{
return true;
}
public Object getValueForTag(TemplateTag tag)
{
return "";
}
private class IfPageExists extends BasicContainer
{
public IfPageExists()
{
super("IfPageExists");
registerTag(pageTitleTag);
registerTag(pageLinkTag);
}
public boolean isVisible()
{
return exists;
}
public Object getValueForTag(TemplateTag tag)
{
if(tag == pageLinkTag)
return pageLink;
if(tag == pageTitleTag)
return pageTitle;
return "";
}
}
private class IfNoPageExists extends BasicContainer
{
public IfNoPageExists()
{
super("IfNoPageExists");
}
public boolean isVisible()
{
return !exists;
}
public Object getValueForTag(TemplateTag tag)
{
return "";
}
}
}