1 package fr.improve.struts.taglib.layout.tab; 2 3 import java.util.Comparator ; 4 import java.util.Map ; 5 import java.util.TreeMap ; 6 7 import javax.servlet.jsp.JspException ; 8 9 import fr.improve.struts.taglib.layout.BodyLayoutTagSupport; 10 import fr.improve.struts.taglib.layout.event.EndLayoutEvent; 11 import fr.improve.struts.taglib.layout.event.ErrorEvent; 12 import fr.improve.struts.taglib.layout.event.ErrorEventListener; 13 import fr.improve.struts.taglib.layout.event.StartLayoutEvent; 14 import fr.improve.struts.taglib.layout.util.LayoutUtils; 15 import fr.improve.struts.taglib.layout.util.TabsInterface; 16 import fr.improve.struts.taglib.layout.util.TagUtils; 17 18 26 public class TabsTag extends BodyLayoutTagSupport implements ErrorEventListener { 27 34 private class TabComparator implements Comparator { 35 public int compare(Object o1, Object o2) { 36 String s1 = (String ) o1; 37 String s2 = (String ) o2; 38 int l1 = s1.length(); 39 int l2 = s2.length(); 40 if (l1 == l2) { 41 return s1.compareTo(s2); 42 } else { 43 return l1 - l2; 44 } 45 } 46 } 47 48 51 private Map tabs = new TreeMap (new TabComparator()); 52 53 56 private String LAST_TAB_KEY = "fr.improve.struts.taglib.layout.tab.TabsTag.KEY"; 57 58 61 private String currentId; 62 63 66 private int currentTab = -1; 67 68 71 private TabsInterface tabsRenderer; 72 73 76 private String styleClass; 77 78 81 private String width; 82 83 86 private String selectedTabKeyName; 87 88 89 92 private String selectedTabKey; 93 94 97 private boolean tabAlreadySelected = false; 98 99 104 public String addTab(String in_titleKey, String in_title, String in_href, String in_reqCode, String in_width, boolean in_selected) { 105 currentTab++; 106 StringBuffer lc_id = new StringBuffer ("tabs"); 107 lc_id.append(currentId); 108 lc_id.append("tab"); 109 lc_id.append(currentTab); 110 TabHeader lc_header = new TabHeader(); 111 lc_header.width = in_width; 112 lc_header.title = in_title; 113 lc_header.titleKey = in_titleKey; 114 lc_header.href = in_href; 115 lc_header.reqCode = in_reqCode; 116 if (in_selected) { 117 lc_header.styleClass = tabsRenderer.getHeaderEnabledStyle(); 118 tabAlreadySelected = true; 119 } else { 120 lc_header.styleClass = tabsRenderer.getHeaderDisabledStyle(); 121 } 122 tabs.put(String.valueOf(currentTab), lc_header); 123 return lc_id.toString(); 124 } 125 129 private String computeNewTabId() { 130 Integer lc_id = (Integer ) pageContext.getRequest().getAttribute(LAST_TAB_KEY); 131 if (lc_id==null) { 132 lc_id = new Integer (0); 133 } 134 pageContext.getRequest().setAttribute(LAST_TAB_KEY, new Integer (lc_id.intValue()+1)); 135 return lc_id.toString(); 136 } 137 138 141 public void processErrorEvent(ErrorEvent in_event) { 142 TabHeader lc_header = (TabHeader) tabs.get(String.valueOf(currentTab)); 143 lc_header.styleClass = tabsRenderer.getHeaderErrorStyle(); 144 } 145 146 149 public int doStartLayoutTag() throws JspException { 150 try { 151 tabsRenderer = (TabsInterface) LayoutUtils.getSkin(pageContext.getSession()).getTabsClass().newInstance(); 152 tabsRenderer.init(pageContext, styleClass, this); 153 currentId = computeNewTabId(); 154 } catch (Exception e) { 155 System.out.println(e); 156 } 159 160 new StartLayoutEvent(this, new StringBuffer ("<td colspan=\"").append(LayoutUtils.getSkin(pageContext.getSession()).getFieldInterface().getColumnNumber()).append("\">").toString()).send(); 161 162 return EVAL_BODY_TAG; 163 } 164 165 168 public int doAfterBody() throws JspException { 169 StringBuffer lc_buffer = new StringBuffer (); 170 tabsRenderer.doStartPanel(lc_buffer, "center", width); 171 tabsRenderer.doStartHeaders(lc_buffer); 172 tabsRenderer.doPrintHeaders(lc_buffer, currentId, tabs); 173 tabsRenderer.doEndHeaders(lc_buffer); 174 tabsRenderer.doBeforeBody(lc_buffer, "center"); 175 TagUtils.writePrevious(pageContext, lc_buffer.toString()); 176 lc_buffer.setLength(0); 177 178 if (bodyContent != null) { 179 TagUtils.writePrevious(pageContext, bodyContent.getString()); 180 bodyContent.clearBody(); 181 } 182 tabsRenderer.doAfterBody(lc_buffer); 183 tabsRenderer.doEndPanel(lc_buffer); 184 TagUtils.writePrevious(pageContext, lc_buffer.toString()); 185 186 return SKIP_BODY; 187 } 188 189 192 public int doEndLayoutTag() throws JspException { 193 194 new EndLayoutEvent(this, "</td>").send(); 195 196 tabsRenderer = null; 197 currentId = null; 198 currentTab = -1; 199 tabs.clear(); 200 tabAlreadySelected = false; 201 return EVAL_PAGE; 202 } 203 public void release() { 204 super.release(); 205 selectedTabKeyName = null; 206 styleClass = null; 207 width = null; 208 } 209 210 214 public String getStyleClass() { 215 return styleClass; 216 } 217 218 222 public void setStyleClass(String styleClass) { 223 this.styleClass = styleClass; 224 } 225 226 230 public String getWidth() { 231 return width; 232 } 233 234 238 public void setWidth(String width) { 239 this.width = width; 240 } 241 242 246 public String getSelectedTabKeyName() { 247 return selectedTabKeyName; 248 } 249 250 254 public void setSelectedTabKeyName(String selectedTabKeyName) { 255 this.selectedTabKeyName = selectedTabKeyName; 256 } 257 258 262 public boolean isTabAlreadySelected() { 263 return tabAlreadySelected; 264 } 265 266 public String getSelectedTabKey(){ 267 return selectedTabKey; 268 } 269 public void setSelectedTabKey(String in_name){ 270 selectedTabKey = in_name; 271 } 272 } 273 | Popular Tags |