Hex Artifact Content
Not logged in

Artifact f9ddb8c8850ecf702090b670c6b9f2dea6a63995:


0000: 70 61 63 6b 61 67 65 20 6f 72 67 2e 69 6e 74 65  package org.inte
0010: 72 6c 65 64 67 65 72 3b 0a 0a 69 6d 70 6f 72 74  rledger;..import
0020: 20 6f 72 67 2e 69 6e 74 65 72 6c 65 64 67 65 72   org.interledger
0030: 2e 49 6e 74 65 72 6c 65 64 67 65 72 50 61 63 6b  .InterledgerPack
0040: 65 74 2e 48 61 6e 64 6c 65 72 2e 41 62 73 74 72  et.Handler.Abstr
0050: 61 63 74 48 61 6e 64 6c 65 72 3b 0a 69 6d 70 6f  actHandler;.impo
0060: 72 74 20 6f 72 67 2e 69 6e 74 65 72 6c 65 64 67  rt org.interledg
0070: 65 72 2e 69 6c 70 2e 49 6e 74 65 72 6c 65 64 67  er.ilp.Interledg
0080: 65 72 50 61 79 6d 65 6e 74 3b 0a 69 6d 70 6f 72  erPayment;.impor
0090: 74 20 6f 72 67 2e 69 6e 74 65 72 6c 65 64 67 65  t org.interledge
00a0: 72 2e 69 6c 71 70 2e 51 75 6f 74 65 4c 69 71 75  r.ilqp.QuoteLiqu
00b0: 69 64 69 74 79 52 65 71 75 65 73 74 3b 0a 69 6d  idityRequest;.im
00c0: 70 6f 72 74 20 6f 72 67 2e 69 6e 74 65 72 6c 65  port org.interle
00d0: 64 67 65 72 2e 69 6c 71 70 2e 51 75 6f 74 65 4c  dger.ilqp.QuoteL
00e0: 69 71 75 69 64 69 74 79 52 65 73 70 6f 6e 73 65  iquidityResponse
00f0: 3b 0a 0a 69 6d 70 6f 72 74 20 6a 61 76 61 2e 75  ;..import java.u
0100: 74 69 6c 2e 4f 62 6a 65 63 74 73 3b 0a 0a 2f 2a  til.Objects;../*
0110: 2a 0a 20 2a 20 3c 70 3e 41 20 74 6f 70 2d 6c 65  *. * <p>A top-le
0120: 76 65 6c 20 69 6e 74 65 72 66 61 63 65 20 66 6f  vel interface fo
0130: 72 20 61 6c 6c 20 49 6e 74 65 72 6c 65 64 67 65  r all Interledge
0140: 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63  r objects that c
0150: 61 6e 20 62 65 20 65 6e 63 6f 64 65 64 20 61 6e  an be encoded an
0160: 64 20 64 65 63 6f 64 65 64 20 61 73 20 61 6e 0a  d decoded as an.
0170: 20 2a 20 49 6e 74 65 72 6c 65 64 67 65 72 20 70   * Interledger p
0180: 61 63 6b 65 74 20 75 73 69 6e 67 20 73 6f 6d 65  acket using some
0190: 20 73 6f 72 74 20 6f 66 20 65 6e 63 6f 64 69 6e   sort of encodin
01a0: 67 2c 20 73 75 63 68 20 61 73 20 41 4e 53 2e 31  g, such as ANS.1
01b0: 2c 20 4a 53 4f 4e 2c 20 50 72 6f 74 6f 62 75 66  , JSON, Protobuf
01c0: 20 6f 72 20 73 6f 6d 65 20 6f 74 68 65 72 0a 20   or some other. 
01d0: 2a 20 65 6e 63 6f 64 69 6e 67 2e 20 4e 6f 74 20  * encoding. Not 
01e0: 61 6c 6c 20 50 4f 4a 4f 73 20 69 6e 20 74 68 69  all POJOs in thi
01f0: 73 20 6c 69 62 72 61 72 79 20 61 72 65 20 63 6f  s library are co
0200: 6e 73 69 64 65 72 65 64 20 49 6e 74 65 72 6c 65  nsidered Interle
0210: 64 67 65 72 20 22 70 61 63 6b 65 74 73 22 2e 20  dger "packets". 
0220: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 6e 0a  For example, an.
0230: 20 2a 20 7b 40 6c 69 6e 6b 20 49 6e 74 65 72 6c   * {@link Interl
0240: 65 64 67 65 72 41 64 64 72 65 73 73 7d 20 69 73  edgerAddress} is
0250: 20 75 73 65 64 20 69 6e 20 6d 61 6e 79 20 70 61   used in many pa
0260: 63 6b 65 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74  cket implementat
0270: 69 6f 6e 73 2c 20 62 75 74 20 69 73 20 6e 6f 74  ions, but is not
0280: 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20   something that 
0290: 69 73 0a 20 2a 20 73 65 6e 74 20 62 79 20 69 74  is. * sent by it
02a0: 73 65 6c 66 20 22 6f 6e 20 74 68 65 20 77 69 72  self "on the wir
02b0: 65 22 20 74 6f 20 66 61 63 69 6c 69 74 61 74 65  e" to facilitate
02c0: 20 49 6e 74 65 72 6c 65 64 67 65 72 20 6f 70 65   Interledger ope
02d0: 72 61 74 69 6f 6e 73 2e 20 43 6f 6e 76 65 72 73  rations. Convers
02e0: 65 6c 79 2c 20 7b 40 6c 69 6e 6b 0a 20 2a 20 49  ely, {@link. * I
02f0: 6e 74 65 72 6c 65 64 67 65 72 50 61 79 6d 65 6e  nterledgerPaymen
0300: 74 7d 20 69 73 20 61 6e 20 49 6e 74 65 72 6c 65  t} is an Interle
0310: 64 67 65 72 20 70 61 63 6b 65 74 20 62 65 63 61  dger packet beca
0320: 75 73 65 20 69 74 20 69 73 20 73 65 6e 74 20 62  use it is sent b
0330: 79 20 69 74 73 65 6c 66 20 22 6f 6e 20 74 68 65  y itself "on the
0340: 20 77 69 72 65 22 20 74 6f 0a 20 2a 20 66 61 63   wire" to. * fac
0350: 69 6c 69 74 61 74 65 20 49 6e 74 65 72 6c 65 64  ilitate Interled
0360: 67 65 72 20 6f 70 65 72 61 74 69 6f 6e 73 2e 3c  ger operations.<
0370: 2f 70 3e 0a 20 2a 2f 0a 70 75 62 6c 69 63 20 69  /p>. */.public i
0380: 6e 74 65 72 66 61 63 65 20 49 6e 74 65 72 6c 65  nterface Interle
0390: 64 67 65 72 50 61 63 6b 65 74 20 7b 0a 0a 20 20  dgerPacket {..  
03a0: 2f 2a 2a 0a 20 20 20 2a 20 41 20 68 61 6e 64 6c  /**.   * A handl
03b0: 65 72 20 69 6e 74 65 72 66 61 63 65 20 74 68 61  er interface tha
03c0: 74 20 64 65 66 69 6e 65 73 20 61 6c 6c 20 74 79  t defines all ty
03d0: 70 65 73 20 6f 66 20 7b 40 6c 69 6e 6b 20 49 6e  pes of {@link In
03e0: 74 65 72 6c 65 64 67 65 72 50 61 63 6b 65 74 7d  terledgerPacket}
03f0: 20 74 6f 20 68 61 6e 64 6c 65 2e 20 46 6f 72 20   to handle. For 
0400: 61 63 74 75 61 6c 0a 20 20 20 2a 20 75 73 61 67  actual.   * usag
0410: 65 2c 20 63 6f 6e 73 69 64 65 72 20 61 6e 20 69  e, consider an i
0420: 6e 73 74 61 6e 63 65 20 6f 66 20 7b 40 6c 69 6e  nstance of {@lin
0430: 6b 20 48 61 6e 64 6c 65 72 2e 41 62 73 74 72 61  k Handler.Abstra
0440: 63 74 48 61 6e 64 6c 65 72 7d 2c 20 77 68 69 63  ctHandler}, whic
0450: 68 20 70 72 6f 76 69 64 65 73 20 75 73 65 66 75  h provides usefu
0460: 6c 0a 20 20 20 2a 20 73 63 61 66 66 6f 6c 64 69  l.   * scaffoldi
0470: 6e 67 20 74 6f 20 61 73 73 69 73 74 20 69 6e 20  ng to assist in 
0480: 61 63 74 75 61 6c 6c 79 20 68 61 6e 64 6c 69 6e  actually handlin
0490: 67 20 63 6f 6e 63 72 65 74 65 20 70 61 63 6b 65  g concrete packe
04a0: 74 73 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 20  ts at runtime.. 
04b0: 20 20 2a 2f 0a 20 20 69 6e 74 65 72 66 61 63 65    */.  interface
04c0: 20 48 61 6e 64 6c 65 72 3c 52 3e 20 7b 0a 0a 20   Handler<R> {.. 
04d0: 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 54 68     /**.     * Th
04e0: 65 20 6d 61 69 6e 20 68 61 6e 64 6c 65 72 20 6d  e main handler m
04f0: 65 74 68 6f 64 20 74 6f 20 63 6f 65 72 63 65 20  ethod to coerce 
0500: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 7b  an instance of {
0510: 40 6c 69 6e 6b 20 49 6e 74 65 72 6c 65 64 67 65  @link Interledge
0520: 72 50 61 63 6b 65 74 7d 20 69 6e 74 6f 20 69 74  rPacket} into it
0530: 73 20 61 63 74 75 61 6c 0a 20 20 20 20 20 2a 20  s actual.     * 
0540: 74 79 70 65 2c 20 61 70 70 6c 79 20 73 6f 6d 65  type, apply some
0550: 20 62 75 73 69 6e 65 73 73 20 6c 6f 67 69 63 2c   business logic,
0560: 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c 6c 79 20   and optionally 
0570: 72 65 74 75 72 6e 20 61 20 76 61 6c 75 65 20 69  return a value i
0580: 6e 20 72 65 73 70 6f 6e 73 65 2e 0a 20 20 20 20  n response..    
0590: 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d   *.     * @param
05a0: 20 70 61 63 6b 65 74 20 41 6e 20 69 6e 73 74 61   packet An insta
05b0: 6e 63 65 20 6f 66 20 7b 40 6c 69 6e 6b 20 49 6e  nce of {@link In
05c0: 74 65 72 6c 65 64 67 65 72 50 61 63 6b 65 74 7d  terledgerPacket}
05d0: 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20  ..     *.     * 
05e0: 40 72 65 74 75 72 6e 20 41 6e 20 69 6e 73 74 61  @return An insta
05f0: 6e 63 65 20 6f 66 20 74 79 70 65 20 7b 40 6c 69  nce of type {@li
0600: 6e 6b 20 52 7d 2c 20 69 6e 20 72 65 73 70 6f 6e  nk R}, in respon
0610: 73 65 20 74 6f 20 74 68 65 20 73 75 70 70 6c 69  se to the suppli
0620: 65 64 20 69 6e 70 75 74 2e 0a 20 20 20 20 20 2a  ed input..     *
0630: 2f 0a 20 20 20 20 52 20 65 78 65 63 75 74 65 28  /.    R execute(
0640: 49 6e 74 65 72 6c 65 64 67 65 72 50 61 63 6b 65  InterledgerPacke
0650: 74 20 70 61 63 6b 65 74 29 3b 0a 0a 20 20 20 20  t packet);..    
0660: 2f 2a 2a 0a 20 20 20 20 20 2a 20 41 20 68 61 6e  /**.     * A han
0670: 64 6c 65 72 20 66 6f 72 20 61 6c 6c 6f 77 69 6e  dler for allowin
0680: 67 20 63 61 6c 6c 65 72 73 20 74 6f 20 73 70 65  g callers to spe
0690: 63 69 66 79 20 6c 6f 67 69 63 20 62 61 73 65 64  cify logic based
06a0: 20 75 70 6f 6e 20 61 6e 20 75 6e 6b 6e 6f 77 6e   upon an unknown
06b0: 20 72 65 73 75 6c 74 20 74 79 70 65 2e 20 54 68   result type. Th
06c0: 69 73 20 63 6c 61 73 73 0a 20 20 20 20 20 2a 20  is class.     * 
06d0: 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 74  can be used in t
06e0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 6e  he following man
06f0: 6e 65 72 3a 0a 20 20 20 20 20 2a 0a 20 20 20 20  ner:.     *.    
0700: 20 2a 20 3c 70 72 65 3e 0a 20 20 20 20 20 2a 20   * <pre>.     * 
0710: 3c 63 6f 64 65 3e 0a 20 20 20 20 20 2a 0a 20 20  <code>.     *.  
0720: 20 20 20 2a 20 66 69 6e 61 6c 20 49 6e 74 65 72     * final Inter
0730: 6c 65 64 67 65 72 50 61 63 6b 65 74 20 64 65 63  ledgerPacket dec
0740: 6f 64 65 64 50 61 63 6b 65 74 20 3d 20 63 6f 6e  odedPacket = con
0750: 74 65 78 74 2e 72 65 61 64 28 61 73 6e 31 4f 65  text.read(asn1Oe
0760: 72 50 61 79 6d 65 6e 74 42 79 74 65 73 29 3b 0a  rPaymentBytes);.
0770: 20 20 20 20 20 2a 20 66 69 6e 61 6c 20 53 74 72       * final Str
0780: 69 6e 67 20 73 74 72 69 6e 67 56 61 6c 75 65 20  ing stringValue 
0790: 3d 20 6e 65 77 20 41 62 73 74 72 61 63 74 48 61  = new AbstractHa
07a0: 6e 64 6c 65 72 26 6c 74 3b 53 74 72 69 6e 67 26  ndler&lt;String&
07b0: 67 74 3b 28 29 20 7b 0a 20 20 20 20 20 2a 20 20  gt;() {.     *  
07c0: 20 70 72 6f 74 65 63 74 65 64 20 53 74 72 69 6e   protected Strin
07d0: 67 20 68 61 6e 64 6c 65 28 66 69 6e 61 6c 20 49  g handle(final I
07e0: 6e 74 65 72 6c 65 64 67 65 72 50 61 79 6d 65 6e  nterledgerPaymen
07f0: 74 20 69 6e 74 65 72 6c 65 64 67 65 72 50 61 63  t interledgerPac
0800: 6b 65 74 29 20 7b 0a 20 20 20 20 20 2a 20 20 20  ket) {.     *   
0810: 20 20 20 2f 2f 20 2e 2e 2e 20 64 6f 20 68 61 6e     // ... do han
0820: 64 6c 69 6e 67 20 68 65 72 65 2e 0a 20 20 20 20  dling here..    
0830: 20 2a 20 20 20 20 20 20 72 65 74 75 72 6e 20 69   *      return i
0840: 6e 74 65 72 6c 65 64 67 65 72 50 61 63 6b 65 74  nterledgerPacket
0850: 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20 20  .toString();.   
0860: 20 20 2a 20 20 20 7d 0a 20 20 20 20 20 2a 20 7d    *   }.     * }
0870: 2e 65 78 65 63 75 74 65 28 64 65 63 6f 64 65 64  .execute(decoded
0880: 50 61 63 6b 65 74 29 3b 20 2f 2f 20 62 65 20 73  Packet); // be s
0890: 75 72 65 20 74 6f 20 63 61 6c 6c 20 2e 65 78 65  ure to call .exe
08a0: 63 75 74 65 21 0a 20 20 20 20 20 2a 0a 20 20 20  cute!.     *.   
08b0: 20 20 2a 20 2f 2f 20 44 6f 20 73 6f 6d 65 74 68    * // Do someth
08c0: 69 6e 67 20 77 69 74 68 20 27 73 74 72 69 6e 67  ing with 'string
08d0: 56 61 6c 75 65 27 0a 20 20 20 20 20 2a 20 3c 2f  Value'.     * </
08e0: 63 6f 64 65 3e 0a 20 20 20 20 20 2a 20 3c 2f 70  code>.     * </p
08f0: 72 65 3e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20  re>.     *.     
0900: 2a 20 40 70 61 72 61 6d 20 3c 52 3e 20 74 68 65  * @param <R> the
0910: 20 74 79 70 65 20 6f 66 20 74 68 65 20 72 65 73   type of the res
0920: 75 6c 74 20 6f 66 20 74 68 65 20 68 61 6e 64 6c  ult of the handl
0930: 65 72 2e 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20  er..     */.    
0940: 61 62 73 74 72 61 63 74 20 63 6c 61 73 73 20 41  abstract class A
0950: 62 73 74 72 61 63 74 48 61 6e 64 6c 65 72 3c 52  bstractHandler<R
0960: 3e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 48 61 6e  > implements Han
0970: 64 6c 65 72 3c 52 3e 20 7b 0a 0a 20 20 20 20 20  dler<R> {..     
0980: 20 2f 2a 2a 0a 20 20 20 20 20 20 20 2a 20 48 61   /**.       * Ha
0990: 6e 64 6c 65 20 61 6e 20 69 6e 73 74 61 6e 63 65  ndle an instance
09a0: 20 6f 66 20 7b 40 6c 69 6e 6b 20 49 6e 74 65 72   of {@link Inter
09b0: 6c 65 64 67 65 72 50 61 79 6d 65 6e 74 7d 2e 0a  ledgerPayment}..
09c0: 20 20 20 20 20 20 20 2a 0a 20 20 20 20 20 20 20         *.       
09d0: 2a 20 40 70 61 72 61 6d 20 69 6e 74 65 72 6c 65  * @param interle
09e0: 64 67 65 72 50 61 79 6d 65 6e 74 20 41 6e 20 69  dgerPayment An i
09f0: 6e 73 74 61 6e 63 65 20 6f 66 20 7b 40 6c 69 6e  nstance of {@lin
0a00: 6b 20 49 6e 74 65 72 6c 65 64 67 65 72 50 61 79  k InterledgerPay
0a10: 6d 65 6e 74 7d 2e 0a 20 20 20 20 20 20 20 2a 0a  ment}..       *.
0a20: 20 20 20 20 20 20 20 2a 20 40 72 65 74 75 72 6e         * @return
0a30: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
0a40: 74 79 70 65 20 7b 40 6c 69 6e 6b 20 52 7d 2c 20  type {@link R}, 
0a50: 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74  in response to t
0a60: 68 65 20 73 75 70 70 6c 69 65 64 20 69 6e 70 75  he supplied inpu
0a70: 74 2e 0a 20 20 20 20 20 20 20 2a 2f 0a 20 20 20  t..       */.   
0a80: 20 20 20 70 72 6f 74 65 63 74 65 64 20 61 62 73     protected abs
0a90: 74 72 61 63 74 20 52 20 68 61 6e 64 6c 65 28 66  tract R handle(f
0aa0: 69 6e 61 6c 20 49 6e 74 65 72 6c 65 64 67 65 72  inal Interledger
0ab0: 50 61 79 6d 65 6e 74 20 69 6e 74 65 72 6c 65 64  Payment interled
0ac0: 67 65 72 50 61 79 6d 65 6e 74 29 3b 0a 0a 20 20  gerPayment);..  
0ad0: 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 20 20 2a      /**.       *
0ae0: 20 48 61 6e 64 6c 65 20 61 6e 20 69 6e 73 74 61   Handle an insta
0af0: 6e 63 65 20 6f 66 20 7b 40 6c 69 6e 6b 20 51 75  nce of {@link Qu
0b00: 6f 74 65 4c 69 71 75 69 64 69 74 79 52 65 71 75  oteLiquidityRequ
0b10: 65 73 74 7d 2e 0a 20 20 20 20 20 20 20 2a 0a 20  est}..       *. 
0b20: 20 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 71        * @param q
0b30: 75 6f 74 65 4c 69 71 75 69 64 69 74 79 52 65 71  uoteLiquidityReq
0b40: 75 65 73 74 20 41 6e 20 69 6e 73 74 61 6e 63 65  uest An instance
0b50: 20 6f 66 20 7b 40 6c 69 6e 6b 20 51 75 6f 74 65   of {@link Quote
0b60: 4c 69 71 75 69 64 69 74 79 52 65 71 75 65 73 74  LiquidityRequest
0b70: 7d 2e 0a 20 20 20 20 20 20 20 2a 0a 20 20 20 20  }..       *.    
0b80: 20 20 20 2a 20 40 72 65 74 75 72 6e 20 41 6e 20     * @return An 
0b90: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 79 70 65  instance of type
0ba0: 20 7b 40 6c 69 6e 6b 20 52 7d 2c 20 69 6e 20 72   {@link R}, in r
0bb0: 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 20 73  esponse to the s
0bc0: 75 70 70 6c 69 65 64 20 69 6e 70 75 74 2e 0a 20  upplied input.. 
0bd0: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 70        */.      p
0be0: 72 6f 74 65 63 74 65 64 20 61 62 73 74 72 61 63  rotected abstrac
0bf0: 74 20 52 20 68 61 6e 64 6c 65 28 66 69 6e 61 6c  t R handle(final
0c00: 20 51 75 6f 74 65 4c 69 71 75 69 64 69 74 79 52   QuoteLiquidityR
0c10: 65 71 75 65 73 74 20 71 75 6f 74 65 4c 69 71 75  equest quoteLiqu
0c20: 69 64 69 74 79 52 65 71 75 65 73 74 29 3b 0a 0a  idityRequest);..
0c30: 20 20 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 20        /**.      
0c40: 20 2a 20 48 61 6e 64 6c 65 20 61 6e 20 69 6e 73   * Handle an ins
0c50: 74 61 6e 63 65 20 6f 66 20 7b 40 6c 69 6e 6b 20  tance of {@link 
0c60: 51 75 6f 74 65 4c 69 71 75 69 64 69 74 79 52 65  QuoteLiquidityRe
0c70: 73 70 6f 6e 73 65 7d 2e 0a 20 20 20 20 20 20 20  sponse}..       
0c80: 2a 0a 20 20 20 20 20 20 20 2a 20 40 70 61 72 61  *.       * @para
0c90: 6d 20 71 75 6f 74 65 4c 69 71 75 69 64 69 74 79  m quoteLiquidity
0ca0: 52 65 73 70 6f 6e 73 65 20 41 6e 20 69 6e 73 74  Response An inst
0cb0: 61 6e 63 65 20 6f 66 20 7b 40 6c 69 6e 6b 20 51  ance of {@link Q
0cc0: 75 6f 74 65 4c 69 71 75 69 64 69 74 79 52 65 73  uoteLiquidityRes
0cd0: 70 6f 6e 73 65 7d 2e 0a 20 20 20 20 20 20 20 2a  ponse}..       *
0ce0: 0a 20 20 20 20 20 20 20 2a 20 40 72 65 74 75 72  .       * @retur
0cf0: 6e 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  n An instance of
0d00: 20 74 79 70 65 20 7b 40 6c 69 6e 6b 20 52 7d 2c   type {@link R},
0d10: 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20   in response to 
0d20: 74 68 65 20 73 75 70 70 6c 69 65 64 20 69 6e 70  the supplied inp
0d30: 75 74 2e 0a 20 20 20 20 20 20 20 2a 2f 0a 20 20  ut..       */.  
0d40: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 61 62      protected ab
0d50: 73 74 72 61 63 74 20 52 20 68 61 6e 64 6c 65 28  stract R handle(
0d60: 66 69 6e 61 6c 20 51 75 6f 74 65 4c 69 71 75 69  final QuoteLiqui
0d70: 64 69 74 79 52 65 73 70 6f 6e 73 65 20 71 75 6f  dityResponse quo
0d80: 74 65 4c 69 71 75 69 64 69 74 79 52 65 73 70 6f  teLiquidityRespo
0d90: 6e 73 65 29 3b 0a 0a 20 20 20 20 20 20 2f 2f 20  nse);..      // 
0da0: 54 4f 44 4f 3a 20 48 61 6e 64 6c 65 20 74 68 65  TODO: Handle the
0db0: 20 72 65 73 74 20 6f 66 20 74 68 65 20 49 4c 51   rest of the ILQ
0dc0: 50 20 70 61 63 6b 65 74 73 21 0a 0a 20 20 20 20  P packets!..    
0dd0: 20 20 2f 2a 2a 0a 20 20 20 20 20 20 20 2a 20 54    /**.       * T
0de0: 68 65 20 6d 61 69 6e 20 68 61 6e 64 6c 65 72 20  he main handler 
0df0: 6d 65 74 68 6f 64 20 74 6f 20 63 6f 65 72 63 65  method to coerce
0e00: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
0e10: 7b 40 6c 69 6e 6b 20 49 6e 74 65 72 6c 65 64 67  {@link Interledg
0e20: 65 72 50 61 63 6b 65 74 7d 20 69 6e 74 6f 20 69  erPacket} into i
0e30: 74 73 20 61 63 74 75 61 6c 0a 20 20 20 20 20 20  ts actual.      
0e40: 20 2a 20 74 79 70 65 2c 20 61 70 70 6c 79 20 73   * type, apply s
0e50: 6f 6d 65 20 62 75 73 69 6e 65 73 73 20 6c 6f 67  ome business log
0e60: 69 63 2c 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c  ic, and optional
0e70: 6c 79 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75  ly return a valu
0e80: 65 20 69 6e 20 72 65 73 70 6f 6e 73 65 2e 0a 20  e in response.. 
0e90: 20 20 20 20 20 20 2a 0a 20 20 20 20 20 20 20 2a        *.       *
0ea0: 20 40 70 61 72 61 6d 20 70 61 63 6b 65 74 20 41   @param packet A
0eb0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 7b 40  n instance of {@
0ec0: 6c 69 6e 6b 20 49 6e 74 65 72 6c 65 64 67 65 72  link Interledger
0ed0: 50 61 63 6b 65 74 7d 2e 0a 20 20 20 20 20 20 20  Packet}..       
0ee0: 2a 0a 20 20 20 20 20 20 20 2a 20 40 72 65 74 75  *.       * @retu
0ef0: 72 6e 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  rn An instance o
0f00: 66 20 74 79 70 65 20 7b 40 6c 69 6e 6b 20 52 7d  f type {@link R}
0f10: 2c 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  , in response to
0f20: 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 69 6e   the supplied in
0f30: 70 75 74 2e 0a 20 20 20 20 20 20 20 2a 2f 0a 20  put..       */. 
0f40: 20 20 20 20 20 40 4f 76 65 72 72 69 64 65 0a 20       @Override. 
0f50: 20 20 20 20 20 70 75 62 6c 69 63 20 66 69 6e 61       public fina
0f60: 6c 20 52 20 65 78 65 63 75 74 65 28 66 69 6e 61  l R execute(fina
0f70: 6c 20 49 6e 74 65 72 6c 65 64 67 65 72 50 61 63  l InterledgerPac
0f80: 6b 65 74 20 70 61 63 6b 65 74 29 20 7b 0a 20 20  ket packet) {.  
0f90: 20 20 20 20 20 20 4f 62 6a 65 63 74 73 2e 72 65        Objects.re
0fa0: 71 75 69 72 65 4e 6f 6e 4e 75 6c 6c 28 70 61 63  quireNonNull(pac
0fb0: 6b 65 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  ket);.        if
0fc0: 20 28 70 61 63 6b 65 74 20 69 6e 73 74 61 6e 63   (packet instanc
0fd0: 65 6f 66 20 49 6e 74 65 72 6c 65 64 67 65 72 50  eof InterledgerP
0fe0: 61 79 6d 65 6e 74 29 20 7b 0a 20 20 20 20 20 20  ayment) {.      
0ff0: 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
1000: 68 61 6e 64 6c 65 28 28 49 6e 74 65 72 6c 65 64  handle((Interled
1010: 67 65 72 50 61 79 6d 65 6e 74 29 20 70 61 63 6b  gerPayment) pack
1020: 65 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 20 65  et);.        } e
1030: 6c 73 65 20 69 66 20 28 70 61 63 6b 65 74 20 69  lse if (packet i
1040: 6e 73 74 61 6e 63 65 6f 66 20 51 75 6f 74 65 4c  nstanceof QuoteL
1050: 69 71 75 69 64 69 74 79 52 65 71 75 65 73 74 29  iquidityRequest)
1060: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 74   {.          ret
1070: 75 72 6e 20 74 68 69 73 2e 68 61 6e 64 6c 65 28  urn this.handle(
1080: 28 51 75 6f 74 65 4c 69 71 75 69 64 69 74 79 52  (QuoteLiquidityR
1090: 65 71 75 65 73 74 29 20 70 61 63 6b 65 74 29 3b  equest) packet);
10a0: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else 
10b0: 69 66 20 28 70 61 63 6b 65 74 20 69 6e 73 74 61  if (packet insta
10c0: 6e 63 65 6f 66 20 51 75 6f 74 65 4c 69 71 75 69  nceof QuoteLiqui
10d0: 64 69 74 79 52 65 73 70 6f 6e 73 65 29 20 7b 0a  dityResponse) {.
10e0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
10f0: 20 74 68 69 73 2e 68 61 6e 64 6c 65 28 28 51 75   this.handle((Qu
1100: 6f 74 65 4c 69 71 75 69 64 69 74 79 52 65 73 70  oteLiquidityResp
1110: 6f 6e 73 65 29 20 70 61 63 6b 65 74 29 3b 0a 20  onse) packet);. 
1120: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
1130: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1140: 6e 65 77 20 49 6e 74 65 72 6c 65 64 67 65 72 52  new InterledgerR
1150: 75 6e 74 69 6d 65 45 78 63 65 70 74 69 6f 6e 28  untimeException(
1160: 22 55 6e 68 61 6e 64 6c 65 64 20 49 6e 74 65 72  "Unhandled Inter
1170: 6c 65 64 67 65 72 50 61 63 6b 65 74 3a 20 22 20  ledgerPacket: " 
1180: 2b 20 70 61 63 6b 65 74 29 3b 0a 20 20 20 20 20  + packet);.     
1190: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20     }.      }..  
11a0: 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 20 20 2a      /**.       *
11b0: 20 41 20 75 74 69 6c 69 74 79 20 63 6c 61 73 73   A utility class
11c0: 20 74 68 61 74 20 70 72 6f 76 69 64 65 73 20 64   that provides d
11d0: 65 66 61 75 6c 74 20 69 6d 70 6c 65 6d 65 6e 74  efault implement
11e0: 61 74 69 6f 6e 73 20 6f 66 20 7b 40 6c 69 6e 6b  ations of {@link
11f0: 20 41 62 73 74 72 61 63 74 48 61 6e 64 6c 65 72   AbstractHandler
1200: 7d 20 73 6f 20 74 68 61 74 20 61 0a 20 20 20 20  } so that a.    
1210: 20 20 20 2a 20 63 61 6c 6c 65 72 20 69 73 20 6f     * caller is o
1220: 6e 6c 79 20 66 6f 72 63 65 64 20 74 6f 20 69 6d  nly forced to im
1230: 70 6c 65 6d 65 6e 74 20 74 68 65 20 68 61 6e 64  plement the hand
1240: 6c 65 72 73 20 74 68 61 74 20 61 72 65 20 6f 66  lers that are of
1250: 20 69 6e 74 65 72 65 73 74 2e 20 54 68 65 20 69   interest. The i
1260: 64 65 61 20 62 65 68 69 6e 64 20 74 68 69 73 0a  dea behind this.
1270: 20 20 20 20 20 20 20 2a 20 63 6c 61 73 73 20 69         * class i
1280: 73 20 74 68 61 74 20 61 6e 20 69 6d 70 6c 65 6d  s that an implem
1290: 65 6e 74 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79 20  entor will only 
12a0: 6f 76 65 72 72 69 64 65 20 74 68 65 20 6d 65 74  override the met
12b0: 68 6f 64 73 20 74 68 61 74 20 61 72 65 20 64 65  hods that are de
12c0: 73 69 72 65 64 20 74 6f 20 62 65 20 68 61 6e 64  sired to be hand
12d0: 6c 65 64 2c 0a 20 20 20 20 20 20 20 2a 20 61 6e  led,.       * an
12e0: 64 20 69 66 20 61 6e 79 20 75 6e 69 6d 70 6c 65  d if any unimple
12f0: 6d 65 6e 74 65 64 20 6d 65 74 68 6f 64 73 20 61  mented methods a
1300: 72 65 20 63 61 6c 6c 65 64 2c 20 61 6e 20 65 78  re called, an ex
1310: 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  ception will be 
1320: 74 68 72 6f 77 6e 2e 20 46 6f 72 20 65 78 61 6d  thrown. For exam
1330: 70 6c 65 2c 20 69 66 20 61 0a 20 20 20 20 20 20  ple, if a.      
1340: 20 2a 20 63 61 6c 6c 65 72 20 6b 6e 6f 77 73 20   * caller knows 
1350: 74 68 61 74 20 74 68 65 20 72 65 73 75 6c 74 20  that the result 
1360: 69 73 20 67 6f 69 6e 67 20 74 6f 20 62 65 20 6f  is going to be o
1370: 66 20 74 79 70 65 20 7b 40 6c 69 6e 6b 20 49 6e  f type {@link In
1380: 74 65 72 6c 65 64 67 65 72 50 61 79 6d 65 6e 74  terledgerPayment
1390: 7d 2c 20 74 68 65 6e 20 69 74 20 69 73 0a 20 20  }, then it is.  
13a0: 20 20 20 20 20 2a 20 6e 6f 74 20 75 73 65 66 75       * not usefu
13b0: 6c 20 74 6f 20 61 64 64 20 62 6f 69 6c 65 72 70  l to add boilerp
13c0: 6c 61 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  late implementat
13d0: 69 6f 6e 73 20 6f 66 20 74 68 65 20 6f 74 68 65  ions of the othe
13e0: 72 20 68 61 6e 64 6c 65 72 20 6d 65 74 68 6f 64  r handler method
13f0: 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 68 69 6e  s that do nothin
1400: 67 2c 0a 20 20 20 20 20 20 20 2a 20 6a 75 73 74  g,.       * just
1410: 20 74 6f 20 73 61 74 69 73 66 79 20 74 68 65 20   to satisfy the 
1420: 61 62 73 74 72 61 63 74 2d 63 6c 61 73 73 20 72  abstract-class r
1430: 65 71 75 69 72 65 6d 65 6e 74 73 20 6f 66 20 7b  equirements of {
1440: 40 6c 69 6e 6b 20 41 62 73 74 72 61 63 74 48 61  @link AbstractHa
1450: 6e 64 6c 65 72 7d 2e 0a 20 20 20 20 20 20 20 2a  ndler}..       *
1460: 2f 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 73  /.      public s
1470: 74 61 74 69 63 20 63 6c 61 73 73 20 48 65 6c 70  tatic class Help
1480: 65 72 48 61 6e 64 6c 65 72 3c 52 3e 20 65 78 74  erHandler<R> ext
1490: 65 6e 64 73 20 41 62 73 74 72 61 63 74 48 61 6e  ends AbstractHan
14a0: 64 6c 65 72 3c 52 3e 20 7b 0a 0a 20 20 20 20 20  dler<R> {..     
14b0: 20 20 20 40 4f 76 65 72 72 69 64 65 0a 20 20 20     @Override.   
14c0: 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 52       protected R
14d0: 20 68 61 6e 64 6c 65 28 49 6e 74 65 72 6c 65 64   handle(Interled
14e0: 67 65 72 50 61 79 6d 65 6e 74 20 69 6e 74 65 72  gerPayment inter
14f0: 6c 65 64 67 65 72 50 61 79 6d 65 6e 74 29 20 7b  ledgerPayment) {
1500: 0a 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77  .          throw
1510: 20 6e 65 77 20 49 6e 74 65 72 6c 65 64 67 65 72   new Interledger
1520: 52 75 6e 74 69 6d 65 45 78 63 65 70 74 69 6f 6e  RuntimeException
1530: 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 4e  (.            "N
1540: 6f 74 20 79 65 74 20 69 6d 70 6c 65 6d 65 6e 74  ot yet implement
1550: 65 64 2e 20 4f 76 65 72 72 69 64 65 20 74 68 69  ed. Override thi
1560: 73 20 6d 65 74 68 6f 64 20 74 6f 20 70 72 6f 76  s method to prov
1570: 69 64 65 20 61 20 75 73 65 66 75 6c 20 69 6d 70  ide a useful imp
1580: 6c 65 6d 65 6e 74 61 74 69 6f 6e 21 22 29 3b 0a  lementation!");.
1590: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
15a0: 20 20 20 40 4f 76 65 72 72 69 64 65 0a 20 20 20     @Override.   
15b0: 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 52       protected R
15c0: 20 68 61 6e 64 6c 65 28 51 75 6f 74 65 4c 69 71   handle(QuoteLiq
15d0: 75 69 64 69 74 79 52 65 71 75 65 73 74 20 71 75  uidityRequest qu
15e0: 6f 74 65 4c 69 71 75 69 64 69 74 79 52 65 71 75  oteLiquidityRequ
15f0: 65 73 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20  est) {.         
1600: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 74 65 72   throw new Inter
1610: 6c 65 64 67 65 72 52 75 6e 74 69 6d 65 45 78 63  ledgerRuntimeExc
1620: 65 70 74 69 6f 6e 28 0a 20 20 20 20 20 20 20 20  eption(.        
1630: 20 20 20 20 22 4e 6f 74 20 79 65 74 20 69 6d 70      "Not yet imp
1640: 6c 65 6d 65 6e 74 65 64 2e 20 4f 76 65 72 72 69  lemented. Overri
1650: 64 65 20 74 68 69 73 20 6d 65 74 68 6f 64 20 74  de this method t
1660: 6f 20 70 72 6f 76 69 64 65 20 61 20 75 73 65 66  o provide a usef
1670: 75 6c 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ul implementatio
1680: 6e 21 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  n!");.        }.
1690: 0a 20 20 20 20 20 20 20 20 40 4f 76 65 72 72 69  .        @Overri
16a0: 64 65 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65  de.        prote
16b0: 63 74 65 64 20 52 20 68 61 6e 64 6c 65 28 51 75  cted R handle(Qu
16c0: 6f 74 65 4c 69 71 75 69 64 69 74 79 52 65 73 70  oteLiquidityResp
16d0: 6f 6e 73 65 20 71 75 6f 74 65 4c 69 71 75 69 64  onse quoteLiquid
16e0: 69 74 79 52 65 73 70 6f 6e 73 65 29 20 7b 0a 20  ityResponse) {. 
16f0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
1700: 65 77 20 49 6e 74 65 72 6c 65 64 67 65 72 52 75  ew InterledgerRu
1710: 6e 74 69 6d 65 45 78 63 65 70 74 69 6f 6e 28 0a  ntimeException(.
1720: 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 74              "Not
1730: 20 79 65 74 20 69 6d 70 6c 65 6d 65 6e 74 65 64   yet implemented
1740: 2e 20 4f 76 65 72 72 69 64 65 20 74 68 69 73 20  . Override this 
1750: 6d 65 74 68 6f 64 20 74 6f 20 70 72 6f 76 69 64  method to provid
1760: 65 20 61 20 75 73 65 66 75 6c 20 69 6d 70 6c 65  e a useful imple
1770: 6d 65 6e 74 61 74 69 6f 6e 21 22 29 3b 0a 20 20  mentation!");.  
1780: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
1790: 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 2a      }.  }..  /**
17a0: 0a 20 20 20 2a 20 41 20 68 61 6e 64 6c 65 72 20  .   * A handler 
17b0: 69 6e 74 65 72 66 61 63 65 20 74 68 61 74 20 64  interface that d
17c0: 65 66 69 6e 65 73 20 61 6c 6c 20 74 79 70 65 73  efines all types
17d0: 20 6f 66 20 7b 40 6c 69 6e 6b 20 49 6e 74 65 72   of {@link Inter
17e0: 6c 65 64 67 65 72 50 61 63 6b 65 74 7d 20 74 6f  ledgerPacket} to
17f0: 20 68 61 6e 64 6c 65 2e 20 46 6f 72 20 61 63 74   handle. For act
1800: 75 61 6c 0a 20 20 20 2a 20 75 73 61 67 65 2c 20  ual.   * usage, 
1810: 63 6f 6e 73 69 64 65 72 20 61 6e 20 69 6e 73 74  consider an inst
1820: 61 6e 63 65 20 6f 66 20 7b 40 6c 69 6e 6b 20 56  ance of {@link V
1830: 6f 69 64 48 61 6e 64 6c 65 72 2e 41 62 73 74 72  oidHandler.Abstr
1840: 61 63 74 56 6f 69 64 48 61 6e 64 6c 65 72 7d 2c  actVoidHandler},
1850: 20 77 68 69 63 68 20 70 72 6f 76 69 64 65 73 20   which provides 
1860: 75 73 65 66 75 6c 0a 20 20 20 2a 20 73 63 61 66  useful.   * scaf
1870: 66 6f 6c 64 69 6e 67 20 74 6f 20 61 73 73 69 73  folding to assis
1880: 74 20 69 6e 20 61 63 74 75 61 6c 6c 79 20 68 61  t in actually ha
1890: 6e 64 6c 69 6e 67 20 63 6f 6e 63 72 65 74 65 20  ndling concrete 
18a0: 70 61 63 6b 65 74 73 20 61 74 20 72 75 6e 74 69  packets at runti
18b0: 6d 65 2e 0a 20 20 20 2a 2f 0a 20 20 69 6e 74 65  me..   */.  inte
18c0: 72 66 61 63 65 20 56 6f 69 64 48 61 6e 64 6c 65  rface VoidHandle
18d0: 72 20 7b 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20  r {..    /**.   
18e0: 20 20 2a 20 54 68 65 20 6d 61 69 6e 20 68 61 6e    * The main han
18f0: 64 6c 65 72 20 6d 65 74 68 6f 64 20 74 6f 20 63  dler method to c
1900: 6f 65 72 63 65 20 61 6e 20 69 6e 73 74 61 6e 63  oerce an instanc
1910: 65 20 6f 66 20 7b 40 6c 69 6e 6b 20 49 6e 74 65  e of {@link Inte
1920: 72 6c 65 64 67 65 72 50 61 63 6b 65 74 7d 20 69  rledgerPacket} i
1930: 6e 74 6f 20 69 74 73 20 61 63 74 75 61 6c 0a 20  nto its actual. 
1940: 20 20 20 20 2a 20 74 79 70 65 2c 20 61 70 70 6c      * type, appl
1950: 79 20 73 6f 6d 65 20 62 75 73 69 6e 65 73 73 20  y some business 
1960: 6c 6f 67 69 63 2c 20 61 6e 64 20 6f 70 74 69 6f  logic, and optio
1970: 6e 61 6c 6c 79 20 72 65 74 75 72 6e 20 61 20 76  nally return a v
1980: 61 6c 75 65 20 69 6e 20 72 65 73 70 6f 6e 73 65  alue in response
1990: 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20  ..     *.     * 
19a0: 40 70 61 72 61 6d 20 70 61 63 6b 65 74 20 41 6e  @param packet An
19b0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 7b 40 6c   instance of {@l
19c0: 69 6e 6b 20 49 6e 74 65 72 6c 65 64 67 65 72 50  ink InterledgerP
19d0: 61 63 6b 65 74 7d 2e 0a 20 20 20 20 20 2a 2f 0a  acket}..     */.
19e0: 20 20 20 20 76 6f 69 64 20 65 78 65 63 75 74 65      void execute
19f0: 28 49 6e 74 65 72 6c 65 64 67 65 72 50 61 63 6b  (InterledgerPack
1a00: 65 74 20 70 61 63 6b 65 74 29 3b 0a 0a 20 20 20  et packet);..   
1a10: 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 41 6e 20 61   /**.     * An a
1a20: 62 73 74 72 61 63 74 20 69 6d 70 6c 65 6d 65 6e  bstract implemen
1a30: 74 61 74 69 6f 6e 20 6f 66 20 7b 40 6c 69 6e 6b  tation of {@link
1a40: 20 56 6f 69 64 48 61 6e 64 6c 65 72 7d 20 66 6f   VoidHandler} fo
1a50: 72 20 61 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 65  r allowing calle
1a60: 72 73 20 74 6f 20 73 70 65 63 69 66 79 20 6c 6f  rs to specify lo
1a70: 67 69 63 20 62 61 73 65 64 0a 20 20 20 20 20 2a  gic based.     *
1a80: 20 75 70 6f 6e 20 61 6e 20 75 6e 6b 6e 6f 77 6e   upon an unknown
1a90: 20 72 65 73 75 6c 74 20 74 79 70 65 20 65 78 74   result type ext
1aa0: 65 6e 64 69 6e 67 20 7b 40 6c 69 6e 6b 20 49 6e  ending {@link In
1ab0: 74 65 72 6c 65 64 67 65 72 50 61 63 6b 65 74 7d  terledgerPacket}
1ac0: 2e 20 54 68 69 73 20 63 6c 61 73 73 20 63 61 6e  . This class can
1ad0: 20 62 65 20 75 73 65 64 20 69 6e 0a 20 20 20 20   be used in.    
1ae0: 20 2a 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67   * the following
1af0: 20 6d 61 6e 6e 65 72 3a 0a 20 20 20 20 20 2a 0a   manner:.     *.
1b00: 20 20 20 20 20 2a 20 3c 70 72 65 3e 0a 20 20 20       * <pre>.   
1b10: 20 20 2a 20 3c 63 6f 64 65 3e 0a 20 20 20 20 20    * <code>.     
1b20: 2a 20 66 69 6e 61 6c 20 49 6e 74 65 72 6c 65 64  * final Interled
1b30: 67 65 72 50 61 63 6b 65 74 20 64 65 63 6f 64 65  gerPacket decode
1b40: 64 50 61 63 6b 65 74 20 3d 20 63 6f 6e 74 65 78  dPacket = contex
1b50: 74 2e 72 65 61 64 28 61 73 6e 31 4f 65 72 50 61  t.read(asn1OerPa
1b60: 79 6d 65 6e 74 42 79 74 65 73 29 3b 0a 20 20 20  ymentBytes);.   
1b70: 20 20 2a 20 6e 65 77 20 41 62 73 74 72 61 63 74    * new Abstract
1b80: 56 6f 69 64 48 61 6e 64 6c 65 72 28 29 20 7b 0a  VoidHandler() {.
1b90: 20 20 20 20 20 2a 20 20 20 70 72 6f 74 65 63 74       *   protect
1ba0: 65 64 20 76 6f 69 64 20 68 61 6e 64 6c 65 28 66  ed void handle(f
1bb0: 69 6e 61 6c 20 49 6e 74 65 72 6c 65 64 67 65 72  inal Interledger
1bc0: 50 61 79 6d 65 6e 74 20 69 6e 74 65 72 6c 65 64  Payment interled
1bd0: 67 65 72 50 61 79 6d 65 6e 74 29 20 7b 0a 20 20  gerPayment) {.  
1be0: 20 20 20 2a 20 20 20 20 20 20 2f 2f 20 2e 2e 2e     *      // ...
1bf0: 20 64 6f 20 68 61 6e 64 6c 69 6e 67 20 68 65 72   do handling her
1c00: 65 2e 0a 20 20 20 20 20 2a 20 20 20 7d 0a 20 20  e..     *   }.  
1c10: 20 20 20 2a 20 7d 2e 65 78 65 63 75 74 65 28 64     * }.execute(d
1c20: 65 63 6f 64 65 64 50 61 63 6b 65 74 29 3b 20 2f  ecodedPacket); /
1c30: 2f 20 62 65 20 73 75 72 65 20 74 6f 20 63 61 6c  / be sure to cal
1c40: 6c 20 2e 65 78 65 63 75 74 65 21 0a 20 20 20 20  l .execute!.    
1c50: 20 2a 20 3c 2f 63 6f 64 65 3e 0a 20 20 20 20 20   * </code>.     
1c60: 2a 20 3c 2f 70 72 65 3e 0a 20 20 20 20 20 2a 2f  * </pre>.     */
1c70: 0a 20 20 20 20 61 62 73 74 72 61 63 74 20 63 6c  .    abstract cl
1c80: 61 73 73 20 41 62 73 74 72 61 63 74 56 6f 69 64  ass AbstractVoid
1c90: 48 61 6e 64 6c 65 72 20 69 6d 70 6c 65 6d 65 6e  Handler implemen
1ca0: 74 73 20 56 6f 69 64 48 61 6e 64 6c 65 72 20 7b  ts VoidHandler {
1cb0: 0a 0a 20 20 20 20 20 20 2f 2a 2a 0a 20 20 20 20  ..      /**.    
1cc0: 20 20 20 2a 20 48 61 6e 64 6c 65 20 61 6e 20 69     * Handle an i
1cd0: 6e 73 74 61 6e 63 65 20 6f 66 20 7b 40 6c 69 6e  nstance of {@lin
1ce0: 6b 20 49 6e 74 65 72 6c 65 64 67 65 72 50 61 79  k InterledgerPay
1cf0: 6d 65 6e 74 7d 2e 0a 20 20 20 20 20 20 20 2a 0a  ment}..       *.
1d00: 20 20 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20         * @param 
1d10: 69 6e 74 65 72 6c 65 64 67 65 72 50 61 79 6d 65  interledgerPayme
1d20: 6e 74 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  nt An instance o
1d30: 66 20 7b 40 6c 69 6e 6b 20 49 6e 74 65 72 6c 65  f {@link Interle
1d40: 64 67 65 72 50 61 79 6d 65 6e 74 7d 2e 0a 20 20  dgerPayment}..  
1d50: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 70 72       */.      pr
1d60: 6f 74 65 63 74 65 64 20 61 62 73 74 72 61 63 74  otected abstract
1d70: 20 76 6f 69 64 20 68 61 6e 64 6c 65 28 66 69 6e   void handle(fin
1d80: 61 6c 20 49 6e 74 65 72 6c 65 64 67 65 72 50 61  al InterledgerPa
1d90: 79 6d 65 6e 74 20 69 6e 74 65 72 6c 65 64 67 65  yment interledge
1da0: 72 50 61 79 6d 65 6e 74 29 3b 0a 0a 20 20 20 20  rPayment);..    
1db0: 20 20 2f 2a 2a 0a 20 20 20 20 20 20 20 2a 20 48    /**.       * H
1dc0: 61 6e 64 6c 65 20 61 6e 20 69 6e 73 74 61 6e 63  andle an instanc
1dd0: 65 20 6f 66 20 7b 40 6c 69 6e 6b 20 51 75 6f 74  e of {@link Quot
1de0: 65 4c 69 71 75 69 64 69 74 79 52 65 71 75 65 73  eLiquidityReques
1df0: 74 7d 2e 0a 20 20 20 20 20 20 20 2a 0a 20 20 20  t}..       *.   
1e00: 20 20 20 20 2a 20 40 70 61 72 61 6d 20 71 75 6f      * @param quo
1e10: 74 65 4c 69 71 75 69 64 69 74 79 52 65 71 75 65  teLiquidityReque
1e20: 73 74 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  st An instance o
1e30: 66 20 7b 40 6c 69 6e 6b 20 51 75 6f 74 65 4c 69  f {@link QuoteLi
1e40: 71 75 69 64 69 74 79 52 65 71 75 65 73 74 7d 2e  quidityRequest}.
1e50: 0a 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  .       */.     
1e60: 20 70 72 6f 74 65 63 74 65 64 20 61 62 73 74 72   protected abstr
1e70: 61 63 74 20 76 6f 69 64 20 68 61 6e 64 6c 65 28  act void handle(
1e80: 66 69 6e 61 6c 20 51 75 6f 74 65 4c 69 71 75 69  final QuoteLiqui
1e90: 64 69 74 79 52 65 71 75 65 73 74 20 71 75 6f 74  dityRequest quot
1ea0: 65 4c 69 71 75 69 64 69 74 79 52 65 71 75 65 73  eLiquidityReques
1eb0: 74 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 2a 0a 20  t);..      /**. 
1ec0: 20 20 20 20 20 20 2a 20 48 61 6e 64 6c 65 20 61        * Handle a
1ed0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 7b 40  n instance of {@
1ee0: 6c 69 6e 6b 20 51 75 6f 74 65 4c 69 71 75 69 64  link QuoteLiquid
1ef0: 69 74 79 52 65 73 70 6f 6e 73 65 7d 2e 0a 20 20  ityResponse}..  
1f00: 20 20 20 20 20 2a 0a 20 20 20 20 20 20 20 2a 20       *.       * 
1f10: 40 70 61 72 61 6d 20 71 75 6f 74 65 4c 69 71 75  @param quoteLiqu
1f20: 69 64 69 74 79 52 65 73 70 6f 6e 73 65 20 41 6e  idityResponse An
1f30: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 7b 40 6c   instance of {@l
1f40: 69 6e 6b 20 51 75 6f 74 65 4c 69 71 75 69 64 69  ink QuoteLiquidi
1f50: 74 79 52 65 73 70 6f 6e 73 65 7d 2e 0a 20 20 20  tyResponse}..   
1f60: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 70 72 6f      */.      pro
1f70: 74 65 63 74 65 64 20 61 62 73 74 72 61 63 74 20  tected abstract 
1f80: 76 6f 69 64 20 68 61 6e 64 6c 65 28 66 69 6e 61  void handle(fina
1f90: 6c 20 51 75 6f 74 65 4c 69 71 75 69 64 69 74 79  l QuoteLiquidity
1fa0: 52 65 73 70 6f 6e 73 65 20 71 75 6f 74 65 4c 69  Response quoteLi
1fb0: 71 75 69 64 69 74 79 52 65 73 70 6f 6e 73 65 29  quidityResponse)
1fc0: 3b 0a 0a 20 20 20 20 20 20 2f 2f 20 54 4f 44 4f  ;..      // TODO
1fd0: 3a 20 48 61 6e 64 6c 65 20 74 68 65 20 72 65 73  : Handle the res
1fe0: 74 20 6f 66 20 74 68 65 20 49 4c 51 50 20 70 61  t of the ILQP pa
1ff0: 63 6b 65 74 73 21 0a 0a 20 20 20 20 20 20 2f 2a  ckets!..      /*
2000: 2a 0a 20 20 20 20 20 20 20 2a 20 54 68 65 20 6d  *.       * The m
2010: 61 69 6e 20 68 61 6e 64 6c 65 72 20 6d 65 74 68  ain handler meth
2020: 6f 64 20 74 6f 20 63 6f 65 72 63 65 20 61 6e 20  od to coerce an 
2030: 69 6e 73 74 61 6e 63 65 20 6f 66 20 7b 40 6c 69  instance of {@li
2040: 6e 6b 20 49 6e 74 65 72 6c 65 64 67 65 72 50 61  nk InterledgerPa
2050: 63 6b 65 74 7d 20 69 6e 74 6f 20 69 74 73 20 61  cket} into its a
2060: 63 74 75 61 6c 0a 20 20 20 20 20 20 20 2a 20 74  ctual.       * t
2070: 79 70 65 2c 20 61 70 70 6c 79 20 73 6f 6d 65 20  ype, apply some 
2080: 62 75 73 69 6e 65 73 73 20 6c 6f 67 69 63 2c 20  business logic, 
2090: 61 6e 64 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 72  and optionally r
20a0: 65 74 75 72 6e 20 61 20 76 61 6c 75 65 20 69 6e  eturn a value in
20b0: 20 72 65 73 70 6f 6e 73 65 2e 0a 20 20 20 20 20   response..     
20c0: 20 20 2a 0a 20 20 20 20 20 20 20 2a 20 40 70 61    *.       * @pa
20d0: 72 61 6d 20 70 61 63 6b 65 74 20 41 6e 20 69 6e  ram packet An in
20e0: 73 74 61 6e 63 65 20 6f 66 20 7b 40 6c 69 6e 6b  stance of {@link
20f0: 20 49 6e 74 65 72 6c 65 64 67 65 72 50 61 63 6b   InterledgerPack
2100: 65 74 7d 2e 0a 20 20 20 20 20 20 20 2a 2f 0a 20  et}..       */. 
2110: 20 20 20 20 20 70 75 62 6c 69 63 20 66 69 6e 61       public fina
2120: 6c 20 76 6f 69 64 20 65 78 65 63 75 74 65 28 66  l void execute(f
2130: 69 6e 61 6c 20 49 6e 74 65 72 6c 65 64 67 65 72  inal Interledger
2140: 50 61 63 6b 65 74 20 70 61 63 6b 65 74 29 20 7b  Packet packet) {
2150: 0a 20 20 20 20 20 20 20 20 4f 62 6a 65 63 74 73  .        Objects
2160: 2e 72 65 71 75 69 72 65 4e 6f 6e 4e 75 6c 6c 28  .requireNonNull(
2170: 70 61 63 6b 65 74 29 3b 0a 20 20 20 20 20 20 20  packet);.       
2180: 20 69 66 20 28 70 61 63 6b 65 74 20 69 6e 73 74   if (packet inst
2190: 61 6e 63 65 6f 66 20 49 6e 74 65 72 6c 65 64 67  anceof Interledg
21a0: 65 72 50 61 79 6d 65 6e 74 29 20 7b 0a 20 20 20  erPayment) {.   
21b0: 20 20 20 20 20 20 20 74 68 69 73 2e 68 61 6e 64         this.hand
21c0: 6c 65 28 28 49 6e 74 65 72 6c 65 64 67 65 72 50  le((InterledgerP
21d0: 61 79 6d 65 6e 74 29 20 70 61 63 6b 65 74 29 3b  ayment) packet);
21e0: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else 
21f0: 69 66 20 28 70 61 63 6b 65 74 20 69 6e 73 74 61  if (packet insta
2200: 6e 63 65 6f 66 20 51 75 6f 74 65 4c 69 71 75 69  nceof QuoteLiqui
2210: 64 69 74 79 52 65 71 75 65 73 74 29 20 7b 0a 20  dityRequest) {. 
2220: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 68 61           this.ha
2230: 6e 64 6c 65 28 28 51 75 6f 74 65 4c 69 71 75 69  ndle((QuoteLiqui
2240: 64 69 74 79 52 65 71 75 65 73 74 29 20 70 61 63  dityRequest) pac
2250: 6b 65 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 20  ket);.        } 
2260: 65 6c 73 65 20 69 66 20 28 70 61 63 6b 65 74 20  else if (packet 
2270: 69 6e 73 74 61 6e 63 65 6f 66 20 51 75 6f 74 65  instanceof Quote
2280: 4c 69 71 75 69 64 69 74 79 52 65 73 70 6f 6e 73  LiquidityRespons
2290: 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 74  e) {.          t
22a0: 68 69 73 2e 68 61 6e 64 6c 65 28 28 51 75 6f 74  his.handle((Quot
22b0: 65 4c 69 71 75 69 64 69 74 79 52 65 73 70 6f 6e  eLiquidityRespon
22c0: 73 65 29 20 70 61 63 6b 65 74 29 3b 0a 20 20 20  se) packet);.   
22d0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
22e0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
22f0: 77 20 49 6e 74 65 72 6c 65 64 67 65 72 52 75 6e  w InterledgerRun
2300: 74 69 6d 65 45 78 63 65 70 74 69 6f 6e 28 22 55  timeException("U
2310: 6e 68 61 6e 64 6c 65 64 20 49 6e 74 65 72 6c 65  nhandled Interle
2320: 64 67 65 72 50 61 63 6b 65 74 3a 20 22 20 2b 20  dgerPacket: " + 
2330: 70 61 63 6b 65 74 29 3b 0a 20 20 20 20 20 20 20  packet);.       
2340: 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20   }.      }..    
2350: 20 20 2f 2a 2a 0a 20 20 20 20 20 20 20 2a 20 41    /**.       * A
2360: 20 75 74 69 6c 69 74 79 20 63 6c 61 73 73 20 74   utility class t
2370: 68 61 74 20 70 72 6f 76 69 64 65 73 20 64 65 66  hat provides def
2380: 61 75 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74  ault implementat
2390: 69 6f 6e 73 20 6f 66 20 7b 40 6c 69 6e 6b 20 41  ions of {@link A
23a0: 62 73 74 72 61 63 74 56 6f 69 64 48 61 6e 64 6c  bstractVoidHandl
23b0: 65 72 7d 0a 20 20 20 20 20 20 20 2a 20 6d 65 74  er}.       * met
23c0: 68 6f 64 73 20 73 6f 20 74 68 61 74 20 61 20 63  hods so that a c
23d0: 61 6c 6c 65 72 20 69 73 20 6f 6e 6c 79 20 66 6f  aller is only fo
23e0: 72 63 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  rced to implemen
23f0: 74 20 74 68 65 20 68 61 6e 64 6c 65 72 73 20 74  t the handlers t
2400: 68 61 74 20 61 72 65 20 6f 66 20 69 6e 74 65 72  hat are of inter
2410: 65 73 74 2e 20 54 68 65 0a 20 20 20 20 20 20 20  est. The.       
2420: 2a 20 69 64 65 61 20 62 65 68 69 6e 64 20 74 68  * idea behind th
2430: 69 73 20 63 6c 61 73 73 20 69 73 20 74 68 61 74  is class is that
2440: 20 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 6f 72 20   an implementor 
2450: 77 69 6c 6c 20 6f 6e 6c 79 20 6f 76 65 72 72 69  will only overri
2460: 64 65 20 74 68 65 20 6d 65 74 68 6f 64 73 20 74  de the methods t
2470: 68 61 74 20 61 72 65 0a 20 20 20 20 20 20 20 2a  hat are.       *
2480: 20 64 65 73 69 72 65 64 20 74 6f 20 62 65 20 68   desired to be h
2490: 61 6e 64 6c 65 64 2c 20 61 6e 64 20 69 66 20 61  andled, and if a
24a0: 6e 79 20 75 6e 69 6d 70 6c 65 6d 65 6e 74 65 64  ny unimplemented
24b0: 20 6d 65 74 68 6f 64 73 20 61 72 65 20 63 61 6c   methods are cal
24c0: 6c 65 64 2c 20 61 6e 20 65 78 63 65 70 74 69 6f  led, an exceptio
24d0: 6e 20 77 69 6c 6c 20 62 65 0a 20 20 20 20 20 20  n will be.      
24e0: 20 2a 20 74 68 72 6f 77 6e 2e 20 46 6f 72 20 65   * thrown. For e
24f0: 78 61 6d 70 6c 65 2c 20 69 66 20 61 20 63 61 6c  xample, if a cal
2500: 6c 65 72 20 6b 6e 6f 77 73 20 74 68 61 74 20 74  ler knows that t
2510: 68 65 20 72 65 73 75 6c 74 20 69 73 20 67 6f 69  he result is goi
2520: 6e 67 20 74 6f 20 62 65 20 6f 66 20 74 79 70 65  ng to be of type
2530: 20 7b 40 6c 69 6e 6b 0a 20 20 20 20 20 20 20 2a   {@link.       *
2540: 20 49 6e 74 65 72 6c 65 64 67 65 72 50 61 79 6d   InterledgerPaym
2550: 65 6e 74 7d 2c 20 74 68 65 6e 20 69 74 20 69 73  ent}, then it is
2560: 20 6e 6f 74 20 75 73 65 66 75 6c 20 74 6f 20 61   not useful to a
2570: 64 64 20 62 6f 69 6c 65 72 70 6c 61 74 65 20 69  dd boilerplate i
2580: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6f  mplementations o
2590: 66 20 74 68 65 20 6f 74 68 65 72 0a 20 20 20 20  f the other.    
25a0: 20 20 20 2a 20 68 61 6e 64 6c 65 72 20 6d 65 74     * handler met
25b0: 68 6f 64 73 20 74 68 61 74 20 64 6f 20 6e 6f 74  hods that do not
25c0: 68 69 6e 67 2c 20 6a 75 73 74 20 74 6f 20 73 61  hing, just to sa
25d0: 74 69 73 66 79 20 74 68 65 20 61 62 73 74 72 61  tisfy the abstra
25e0: 63 74 2d 63 6c 61 73 73 20 72 65 71 75 69 72 65  ct-class require
25f0: 6d 65 6e 74 73 20 6f 66 20 7b 40 6c 69 6e 6b 0a  ments of {@link.
2600: 20 20 20 20 20 20 20 2a 20 41 62 73 74 72 61 63         * Abstrac
2610: 74 48 61 6e 64 6c 65 72 7d 2e 0a 20 20 20 20 20  tHandler}..     
2620: 20 20 2a 2f 0a 20 20 20 20 20 20 70 75 62 6c 69    */.      publi
2630: 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 48  c static class H
2640: 65 6c 70 65 72 48 61 6e 64 6c 65 72 20 65 78 74  elperHandler ext
2650: 65 6e 64 73 20 41 62 73 74 72 61 63 74 56 6f 69  ends AbstractVoi
2660: 64 48 61 6e 64 6c 65 72 20 7b 0a 0a 20 20 20 20  dHandler {..    
2670: 20 20 20 20 40 4f 76 65 72 72 69 64 65 0a 20 20      @Override.  
2680: 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20        protected 
2690: 76 6f 69 64 20 68 61 6e 64 6c 65 28 49 6e 74 65  void handle(Inte
26a0: 72 6c 65 64 67 65 72 50 61 79 6d 65 6e 74 20 69  rledgerPayment i
26b0: 6e 74 65 72 6c 65 64 67 65 72 50 61 79 6d 65 6e  nterledgerPaymen
26c0: 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 74  t) {.          t
26d0: 68 72 6f 77 20 6e 65 77 20 49 6e 74 65 72 6c 65  hrow new Interle
26e0: 64 67 65 72 52 75 6e 74 69 6d 65 45 78 63 65 70  dgerRuntimeExcep
26f0: 74 69 6f 6e 28 0a 20 20 20 20 20 20 20 20 20 20  tion(.          
2700: 20 20 22 4e 6f 74 20 79 65 74 20 69 6d 70 6c 65    "Not yet imple
2710: 6d 65 6e 74 65 64 2e 20 4f 76 65 72 72 69 64 65  mented. Override
2720: 20 74 68 69 73 20 6d 65 74 68 6f 64 20 74 6f 20   this method to 
2730: 70 72 6f 76 69 64 65 20 61 20 75 73 65 66 75 6c  provide a useful
2740: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 21   implementation!
2750: 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20  ");.        }.. 
2760: 20 20 20 20 20 20 20 40 4f 76 65 72 72 69 64 65         @Override
2770: 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74  .        protect
2780: 65 64 20 76 6f 69 64 20 68 61 6e 64 6c 65 28 51  ed void handle(Q
2790: 75 6f 74 65 4c 69 71 75 69 64 69 74 79 52 65 71  uoteLiquidityReq
27a0: 75 65 73 74 20 71 75 6f 74 65 4c 69 71 75 69 64  uest quoteLiquid
27b0: 69 74 79 52 65 71 75 65 73 74 29 20 7b 0a 20 20  ityRequest) {.  
27c0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
27d0: 77 20 49 6e 74 65 72 6c 65 64 67 65 72 52 75 6e  w InterledgerRun
27e0: 74 69 6d 65 45 78 63 65 70 74 69 6f 6e 28 0a 20  timeException(. 
27f0: 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 74 20             "Not 
2800: 79 65 74 20 69 6d 70 6c 65 6d 65 6e 74 65 64 2e  yet implemented.
2810: 20 4f 76 65 72 72 69 64 65 20 74 68 69 73 20 6d   Override this m
2820: 65 74 68 6f 64 20 74 6f 20 70 72 6f 76 69 64 65  ethod to provide
2830: 20 61 20 75 73 65 66 75 6c 20 69 6d 70 6c 65 6d   a useful implem
2840: 65 6e 74 61 74 69 6f 6e 21 22 29 3b 0a 20 20 20  entation!");.   
2850: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
2860: 40 4f 76 65 72 72 69 64 65 0a 20 20 20 20 20 20  @Override.      
2870: 20 20 70 72 6f 74 65 63 74 65 64 20 76 6f 69 64    protected void
2880: 20 68 61 6e 64 6c 65 28 51 75 6f 74 65 4c 69 71   handle(QuoteLiq
2890: 75 69 64 69 74 79 52 65 73 70 6f 6e 73 65 20 71  uidityResponse q
28a0: 75 6f 74 65 4c 69 71 75 69 64 69 74 79 52 65 73  uoteLiquidityRes
28b0: 70 6f 6e 73 65 29 20 7b 0a 20 20 20 20 20 20 20  ponse) {.       
28c0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 74     throw new Int
28d0: 65 72 6c 65 64 67 65 72 52 75 6e 74 69 6d 65 45  erledgerRuntimeE
28e0: 78 63 65 70 74 69 6f 6e 28 0a 20 20 20 20 20 20  xception(.      
28f0: 20 20 20 20 20 20 22 4e 6f 74 20 79 65 74 20 69        "Not yet i
2900: 6d 70 6c 65 6d 65 6e 74 65 64 2e 20 4f 76 65 72  mplemented. Over
2910: 72 69 64 65 20 74 68 69 73 20 6d 65 74 68 6f 64  ride this method
2920: 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 75 73   to provide a us
2930: 65 66 75 6c 20 69 6d 70 6c 65 6d 65 6e 74 61 74  eful implementat
2940: 69 6f 6e 21 22 29 3b 0a 20 20 20 20 20 20 20 20  ion!");.        
2950: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
2960: 20 20 7d 0a 0a 7d 0a                               }..}.