Package ratpack.parse

Class ParserSupport<O>

  • Type Parameters:
    O - the type of option object this parser accepts
    All Implemented Interfaces:
    Parser<O>
    Direct Known Subclasses:
    NoOptParserSupport

    public abstract class ParserSupport<O>
    extends java.lang.Object
    implements Parser<O>
    A convenience superclass for Parser implementations.

    Specializations only need to implement the Parser.parse(ratpack.handling.Context, ratpack.http.TypedData, Parse) method.

    
     import ratpack.exec.Promise;
     import ratpack.handling.Handler;
     import ratpack.handling.Context;
     import ratpack.http.TypedData;
     import ratpack.parse.Parse;
     import ratpack.parse.ParserSupport;
     import ratpack.parse.ParseException;
     import ratpack.util.Types;
    
     import java.io.UnsupportedEncodingException;
    
     import ratpack.test.handling.HandlingResult;
     import ratpack.test.handling.RequestFixture;
    
     import static org.junit.Assert.assertEquals;
    
     public class Example {
    
       // The parse options
       public static class StringParseOpts {
         private int maxLength;
    
         public StringParseOpts(int maxLength) {
           this.maxLength = maxLength;
         }
    
         public int getMaxLength() {
           return maxLength;
         }
       }
    
       // A parser for this type
       public static class MaxLengthStringParser extends ParserSupport<StringParseOpts> {
         public <T> T parse(Context context, TypedData body, Parse<T, StringParseOpts> parse) throws UnsupportedEncodingException {
           if (!parse.getType().getRawType().equals(String.class)) {
             return null;
           }
    
           String rawString = body.getText();
           StringParseOpts opts = parse.getOpts().orElse(new StringParseOpts(rawString.length()));
           if (rawString.length() < opts.getMaxLength()) {
             return Types.cast(rawString);
           } else {
             return Types.cast(rawString.substring(0, opts.getMaxLength()));
           }
         }
       }
    
       public static class ToUpperCaseHandler implements Handler {
         public void handle(Context context) throws Exception {
           context.parse(String.class, new StringParseOpts(5)).then(string -> context.render(string));
         }
       }
    
       // unit test
       public static void main(String[] args) throws Exception {
         HandlingResult result = RequestFixture.handle(new ToUpperCaseHandler(), fixture ->
             fixture
               .body("123456", "text/plain")
               .registry(registry -> registry.add(new MaxLengthStringParser()))
         );
    
         assertEquals("12345", result.rendered(String.class));
       }
     }
     
    See Also:
    NoOptParserSupport
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected ParserSupport()
      Constructor.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      java.lang.Class<O> getOptsType()
      The type of option object that this parser accepts.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface ratpack.parse.Parser

        parse
    • Constructor Detail

      • ParserSupport

        protected ParserSupport()
        Constructor.
    • Method Detail

      • getOptsType

        public final java.lang.Class<O> getOptsType()
        The type of option object that this parser accepts.
        Specified by:
        getOptsType in interface Parser<O>
        Returns:
        the type of option object that this parser accepts
        See Also:
        ParserSupport