package org.tgdb.tags;
import org.apache.log4j.Logger;
import org.tgdb.frame.Navigator;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class NavigationTag extends BodyTagSupport {
private static Logger logger = Logger.getLogger(NavigationTag.class);
private String workflow;
private Navigator navigator;
private boolean showText;
private int viewed;
private int max;
private int threshold = 5;
private int item_multiplier = 10;
public NavigationTag() {
showText = false;
}
public void setNavigator(Navigator navigator) {
this.navigator = navigator;
}
public void setWorkflow(String workflow) {
this.workflow = workflow;
}
public void setShowText(boolean showText) {
this.showText = showText;
}
@Override
public int doStartTag() throws JspException {
String data = "";
try {
boolean isLast = false;
boolean isFirst = false;
boolean onePage = false;
navigator = (Navigator)pageContext.getSession().getAttribute("navigator");
int currentStart = 0;
int currentStop = 0;
int currentPage = 0;
int pagenumbers = 0;
int delta = 0;
if(navigator != null) {
max = navigator.getPageManager().getMax();
currentStart = navigator.getPageManager().getStart();
viewed = navigator.getPageManager().getViewed();
delta = navigator.getPageManager().getDelta();
pagenumbers = navigator.getPageManager().getPages();
currentPage = (currentStart + delta - 1)/delta;
if(max == 0)
currentStart = 0;
if(currentStart == 1)
isFirst = true;
currentStop = navigator.getPageManager().getStop();
if(currentStop >= max) {
currentStop = max;
isLast = true;
}
if(currentStop < navigator.getPageManager().getDelta())
onePage = true;
}
// Added style info in css, p.navtext
data += "<p class=\"navtext\">";
if(isFirst && !onePage) {
// data += "<img src=\"images/icons/navigate_beginning_disabled.png\" border=\"none\">\n";
// data += "<img src=\"images/icons/navigate_left_disabled.png\" border=\"none\">\n";
} else if(!onePage) {
// data += "<a href=\"Controller?workflow="+workflow+"&first\"><img src=\"images/icons/navigate_beginning.png\" border=\"none\" title=\"First\"></a>\n";
// data += "<a href=\"Controller?workflow="+workflow+"&prev\"><img src=\"images/icons/navigate_left.png\" border=\"none\" title=\"Previous\"></a>\n";
data += "<a href=\"Controller?workflow="+workflow+"&first\">Start</a>\n";
data += "<a href=\"Controller?workflow="+workflow+"&prev\">Previous</a>\n";
}
if(isLast && !onePage) {
// data += "<img src=\"images/icons/navigate_right_disabled.png\" border=\"none\">\n";
// data += "<img src=\"images/icons/navigate_last_disabled.png\" border=\"none\">\n";
} else if(!onePage){
// data += "<a href=\"Controller?workflow="+workflow+"&next\"><img src=\"images/icons/navigate_next.png\" border=\"none\" title=\"Next\"></a>\n";
// data += "<a href=\"Controller?workflow="+workflow+"&last\"><img src=\"images/icons/navigate_end.png\" border=\"none\" title=\"Last\"></a>\n";
data += "<a href=\"Controller?workflow="+workflow+"&next\">Next</a>\n";
data += "<a href=\"Controller?workflow="+workflow+"&last\">End</a>\n";
}
if(onePage) {
// data += "<img src=\"images/icons/navigate_beginning_disabled.png\" border=\"none\">\n";
// data += "<img src=\"images/icons/navigate_left_disabled.png\" border=\"none\">\n";
// data += "<img src=\"images/icons/navigate_right_disabled.png\" border=\"none\">\n";
// data += "<img src=\"images/icons/navigate_end_disabled.png\" border=\"none\">\n";
}
if (showText) {
data += " items <select name=\"delta\" style=\"\" onchange=\"this.form.submit()\">";
for(int j = 1; j < 11; j++) {
if(j*item_multiplier == delta) {
data += "<option value=\""+(j*item_multiplier)+"\" selected=\"selected\">"+(j*item_multiplier)+"</option>";
}
else {
data += "<option value=\""+(j*item_multiplier)+"\">"+(j*item_multiplier)+"</option>";
}
}
data += "</select>";
if(pagenumbers > 0 && pagenumbers > 11 && currentPage > threshold){
// data += "|";
data += " page <select name=\"page\" style=\"\" onchange=\"this.form.submit()\">";
if((currentPage+threshold) < pagenumbers+1){
for(int i=currentPage-threshold; i < currentPage+threshold+1; i++){
if(i==currentPage){
// data +="<b>"+i+"</b>|\n";
data += "<option value=\""+i+"\" selected=\"selected\">"+i+"</option>";
} else{
// data +="<a class=\"menu\" href=\"Controller?workflow="+workflow+"&page="+i+"\" title=\"go to page "+i+"\">"+i+"</a>|\n";
data += "<option value=\""+i+"\">"+i+"</option>";
}
}
} else {
//for(int i=1; i < 11+1; i++){
for(int i=pagenumbers+1-11; i < pagenumbers+1; i++){
if(i==currentPage){
// data +="<b>"+i+"</b>|\n";
data += "<option value=\""+i+"\" selected=\"selected\">"+i+"</option>";
} else{
// data +="<a class=\"menu\" href=\"Controller?workflow="+workflow+"&page="+i+"\" title=\"go to page "+i+"\">"+i+"</a>|\n";
data += "<option value=\""+i+"\">"+i+"</option>";
}
}
}
data += "</select>";
} else {
// data += "|";
data += " page <select name=\"page\" style=\"\" onchange=\"this.form.submit()\">";
if(pagenumbers > 11 && currentPage <= threshold){
pagenumbers = 11;
}
for(int i=1; i < pagenumbers+1; i++){
if(i==currentPage){
// data +="<b>"+i+"</b>|\n";
data += "<option value=\""+i+"\" selected=\"selected\">"+i+"</option>";
} else{
// data +="<a class=\"menu\" href=\"Controller?workflow="+workflow+"&page="+i+"\" title=\"go to page "+i+"\">"+i+"</a>|\n";
data += "<option value=\""+i+"\">"+i+"</option>";
}
}
data += "</select>";
}
data += " ";
// If only one page will be displayed, show a simpler version
if (onePage)
data += "displaying "+viewed+" out of "+max;
else
data += "displaying "+currentStart+"-"+currentStop+" out of "+max;
}
data += " ";
data += "</p>";
// Print the table on the page
pageContext.getOut().print(data);
} catch (Exception e) {
//throw new JspTagException(e.getMessage());
logger.error(e);
}
return SKIP_BODY;
}
}