1 package fr.improve.struts.taglib.layout.swap; 2 3 import java.util.StringTokenizer ; 4 5 import javax.servlet.jsp.JspException ; 6 7 import org.apache.struts.taglib.html.OptionsTag; 8 import org.apache.struts.taglib.html.SelectTag; 9 10 import fr.improve.struts.taglib.layout.ButtonTag; 11 import fr.improve.struts.taglib.layout.LayoutTag; 12 import fr.improve.struts.taglib.layout.LayoutTagSupport; 13 import fr.improve.struts.taglib.layout.collection.CollectionTag; 14 import fr.improve.struts.taglib.layout.event.EndLayoutEvent; 15 import fr.improve.struts.taglib.layout.event.LayoutEventListener; 16 import fr.improve.struts.taglib.layout.event.StartLayoutEvent; 17 18 21 public class SwapTag extends LayoutTagSupport implements LayoutEventListener { 22 private static final String SWAP_KEY = "fr.improve.struts.taglib.layout.swap.SwapTag.SWAP_KEY"; 23 private SelectTag selectTag = new SelectTag(); 24 private OptionsTag optionsTag = new OptionsTag(); 25 private ButtonTag buttonTag = new ButtonTag(); 26 private StringTokenizer propertyTokenizer; 27 private StringTokenizer formPropertyTokenizer; 28 private boolean first = true; 29 30 protected String selectedStyleClass = null; 31 protected int currentCollectionNumber = 0; 32 protected String property = null; 33 protected String formProperty = null; 34 35 39 public int doStartLayoutTag() throws JspException { 40 Integer lc_int = (Integer ) pageContext.getRequest().getAttribute(SWAP_KEY); 41 if (lc_int==null) { 42 currentCollectionNumber = 0; 43 } else { 44 currentCollectionNumber = lc_int.intValue(); 45 } 46 propertyTokenizer = new StringTokenizer (property, ","); 47 formPropertyTokenizer = new StringTokenizer (formProperty, ","); 48 return EVAL_BODY_INCLUDE; 49 } 50 51 55 public int doEndLayoutTag() throws JspException { 56 pageContext.getRequest().setAttribute(SWAP_KEY, new Integer (currentCollectionNumber)); 57 58 propertyTokenizer = null; 59 formPropertyTokenizer = null; 60 first = true; 61 return EVAL_PAGE; 62 } 63 64 67 public void release() { 68 super.release(); 69 selectTag.release(); 70 optionsTag.release(); 71 72 selectedStyleClass = null; 73 property = null; 74 formProperty = null; 75 } 76 77 80 public Object processStartLayoutEvent(StartLayoutEvent in_event) throws JspException { 81 LayoutTag lc_tag = in_event.getSource(); 82 if (lc_tag instanceof CollectionTag) { 83 CollectionTag lc_collectionTag = (CollectionTag) lc_tag; 85 lc_collectionTag.setOnRowClick(new StringBuffer ("prepareSwap(this, '").append(selectedStyleClass).append("')").toString()); 86 lc_collectionTag.setStyleId("stdLayoutSwap" + currentCollectionNumber); 87 if (!first) { 88 doPrintSwapButtons(); 89 } 90 } 91 return new StartLayoutEvent(lc_tag, in_event.getValue()).sendToParent(this); 92 } 93 96 public Object processEndLayoutEvent(EndLayoutEvent in_event) throws JspException { 97 LayoutTag lc_tag = in_event.getSource(); 98 if (lc_tag instanceof CollectionTag) { 99 CollectionTag lc_collectionTag = (CollectionTag) lc_tag; 100 101 doPrintHiddenSelect(lc_collectionTag); 102 103 first = false; 104 currentCollectionNumber++; 105 } 106 return new EndLayoutEvent(lc_tag, in_event.getValue()).sendToParent(this); 107 } 108 109 112 private void doPrintHiddenSelect(CollectionTag in_collectionTag) throws JspException { 113 if (!propertyTokenizer.hasMoreTokens() || !formPropertyTokenizer.hasMoreTokens()) { 114 throw new JspException ("<layout:swap>: Bad formProperty / property value"); 115 } 116 117 selectTag.setPageContext(pageContext); 118 selectTag.setParent(this); 119 selectTag.setProperty(formPropertyTokenizer.nextToken()); 120 selectTag.setStyleId("stdLayoutSwapHS" + currentCollectionNumber); 121 selectTag.setMultiple("true"); 122 selectTag.setStyle("display:none"); 123 selectTag.doStartTag(); 124 125 optionsTag.setPageContext(pageContext); 126 optionsTag.setParent(this); 127 optionsTag.setCollection(in_collectionTag.getName()); 128 optionsTag.setProperty(propertyTokenizer.nextToken()); 129 optionsTag.doStartTag(); 130 optionsTag.doEndTag(); 131 132 selectTag.doEndTag(); 133 } 134 135 138 private void doPrintSwapButtons() throws JspException { 139 buttonTag.setPageContext(pageContext); 140 buttonTag.setParent(this); 141 buttonTag.setValign("top"); 142 buttonTag.setOnclick("swap('stdLayoutSwap" + currentCollectionNumber + "', 'stdLayoutSwapHS" + currentCollectionNumber + "', 'stdLayoutSwap" + (currentCollectionNumber-1) + "', 'stdLayoutSwapHS" + (currentCollectionNumber-1) + "')"); 143 buttonTag.setValue("<<"); 144 buttonTag.doStartTag(); 145 buttonTag.doEndTag(); 146 147 buttonTag.setOnclick("swap('stdLayoutSwap" + (currentCollectionNumber-1) + "', 'stdLayoutSwapHS" + (currentCollectionNumber-1) + "', 'stdLayoutSwap" + currentCollectionNumber + "', 'stdLayoutSwapHS" + currentCollectionNumber + "')"); 148 buttonTag.setValue(">>"); 149 buttonTag.doStartTag(); 150 buttonTag.doEndTag(); 151 } 152 153 157 public void setSelectedStyleClass(String selectedStyleClass) { 158 this.selectedStyleClass = selectedStyleClass; 159 } 160 161 165 public void setFormProperty(String formProperty) { 166 this.formProperty = formProperty; 167 } 168 169 173 public void setProperty(String property) { 174 this.property = property; 175 } 176 177 } 178 | Popular Tags |