001 package net.databinder.components;
002
003 import java.util.Locale;
004
005 import jtextile.JTextile;
006
007 import org.apache.wicket.markup.html.basic.Label;
008 import org.apache.wicket.model.IModel;
009 import org.apache.wicket.util.convert.IConverter;
010 import org.apache.wicket.util.convert.converters.AbstractConverter;
011
012 /**
013 * Filters its model through JTextile before rendering.
014 * @see jtextile.JTextile
015 * @author Nathan Hamblen
016 */
017 public class TextileLabel extends Label {
018 /**
019 * @param id Wicket id
020 */
021 public TextileLabel(String id) {
022 super(id);
023 setEscapeModelStrings(false); // since the contents will be in HTML
024 }
025
026 /**
027 * @param id Wicket id
028 * @param model String model
029 */
030 public TextileLabel(String id, IModel model) {
031 super(id, model);
032 setEscapeModelStrings(false); // since the contents will be in HTML
033 }
034
035 @Override
036 public IConverter getConverter(Class type) {
037 return new TextileConverter();
038 }
039
040 /**
041 * Passes all source objects through JTextile, checks that conversion is String-String.
042 * @see jtextile.JTextile
043 */
044 protected static class TextileConverter extends AbstractConverter {
045 @Override
046 protected Class getTargetType() {
047 return String.class;
048 }
049 @Override
050 public String convertToString(Object source, Locale locale) {
051 if (source instanceof String)
052 try{
053 return JTextile.textile((String) source);
054 } catch (Exception e) {
055 throw new RuntimeException(e);
056 }
057 throw new UnsupportedOperationException("Can only convert Strings to Strings");
058 }
059 public Object convertToObject(String value, Locale locale) {
060 return null;
061 }
062 }
063 }