1 18 package net.sf.uitags.tag.sort; 19 20 import javax.servlet.jsp.JspException ; 21 22 import net.sf.uitags.tag.AbstractUiTag; 23 import net.sf.uitags.tagutil.TaglibProperties; 24 import net.sf.uitags.tagutil.validation.RuntimeValidationException; 25 import net.sf.uitags.tagutil.validation.RuntimeValidator; 26 import net.sf.uitags.util.Template; 27 28 29 36 public class SortTag extends AbstractUiTag { 37 38 42 45 private static final long serialVersionUID = 100L; 46 47 48 49 53 private static final String PROP_COMPARATOR = "sort.comparator"; 54 55 56 57 61 64 private ShortcutType shortcutType; 65 68 private String applyTo; 69 72 private String applyToName; 73 76 private String injectTo; 77 80 private String injectToName; 81 84 private String comparator; 85 86 87 88 92 95 public SortTag() { 96 super(); 97 } 98 99 100 101 105 110 public void setType(String val) { 111 this.shortcutType = ShortcutType.findByName(val); 112 } 113 114 119 public void setApplyTo(String val) { 120 this.applyTo = val; 121 } 122 123 128 public void setApplyToName(String val) { 129 this.applyToName = val; 130 } 131 132 137 public void setInjectTo(String val) { 138 this.injectTo = val; 139 } 140 141 146 public void setInjectToName(String val) { 147 this.injectToName = val; 148 } 149 150 155 public void setComparator(String val) { 156 this.comparator = val; 157 } 158 159 160 161 165 172 public int doStartTag() throws JspException { 173 return EVAL_BODY_INCLUDE; 174 } 175 176 182 public int doEndTag() throws JspException { 183 RuntimeValidator.assertAttributeExclusive( 184 "applyTo", this.applyTo, "applyToName", this.applyToName); 185 RuntimeValidator.assertAttributeExclusive( 186 "injectTo", this.injectTo, "injectToName", this.injectToName); 187 188 RuntimeValidator.assertEitherSpecified( 189 "applyTo", this.applyTo, "applyToName", this.applyToName); 190 RuntimeValidator.assertEitherSpecified( 191 "injectTo", this.injectTo, "injectToName", this.injectToName); 192 193 TaglibProperties props = TaglibProperties.getInstance(); 194 props.setRuntimeProperty(PROP_COMPARATOR, this.comparator); 195 196 Template tpl = Template.forName(Template.SORT); 197 tpl.map("callback", this.shortcutType.getCallbackName()); 198 tpl.map("applyTo", this.applyTo); 199 tpl.map("applyToName", this.applyToName); 200 tpl.map("injectTo", this.injectTo); 201 tpl.map("injectToName", this.injectToName); 202 tpl.map("comparator", props.get(PROP_COMPARATOR)); 203 println(tpl.evalToString()); 204 205 return EVAL_PAGE; 206 } 207 208 209 210 214 219 private abstract static class ShortcutType { 220 222 225 private static final ShortcutType ASCENDING = new ShortcutType("ascending") { 226 String getCallbackName() { 227 return "createAscendingSuite"; 228 } 229 }; 230 231 234 private static final ShortcutType DESCENDING = new ShortcutType("descending") { 235 String getCallbackName() { 236 return "createDescendingSuite"; 237 } 238 }; 239 240 242 245 private final String name; 246 247 249 254 private ShortcutType(String name) { 255 this.name = name; 256 } 257 258 260 265 abstract String getCallbackName(); 266 267 274 static ShortcutType findByName(String name) { 275 if (name.equals(ASCENDING.name)) { 276 return ASCENDING; 277 } 278 else if (name.equals(DESCENDING.name)) { 279 return DESCENDING; 280 } 281 282 throw new RuntimeValidationException("Invalid type: '" + name + "'."); 285 } 286 } 287 } | Popular Tags |