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    }