001         package com.croftsoft.core.util;
002    
003         import java.util.*;
004    
005         import com.croftsoft.core.lang.NullArgumentException;
006         import com.croftsoft.core.role.Server;
007    
008         /*********************************************************************
009         * Maps requests to a delegate Server based upon the request Class.
010         *
011         * @version
012         *   2003-06-05
013         * @since
014         *   2003-06-05
015         * @author
016         *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
017         *********************************************************************/
018    
019         public final class  ClassMapServer
020           implements Server
021         //////////////////////////////////////////////////////////////////////
022         //////////////////////////////////////////////////////////////////////
023         {
024    
025         private final Map  classToServerMap;
026    
027         //////////////////////////////////////////////////////////////////////
028         //////////////////////////////////////////////////////////////////////
029    
030         public ClassMapServer ( Map  classToServerMap )
031         //////////////////////////////////////////////////////////////////////
032         {
033           NullArgumentException.check (
034             this.classToServerMap = classToServerMap );
035         }
036    
037         public ClassMapServer ( )
038         //////////////////////////////////////////////////////////////////////
039         {
040           this ( new HashMap ( ) );
041         }
042    
043         //////////////////////////////////////////////////////////////////////
044         //////////////////////////////////////////////////////////////////////
045    
046         public Server  put (
047           Class   c,
048           Server  server )
049         //////////////////////////////////////////////////////////////////////
050         {
051           NullArgumentException.check ( c );
052    
053           NullArgumentException.check ( server );
054    
055           return ( Server ) classToServerMap.put ( c, server );
056         }
057    
058         public Object  serve ( Object  request )
059         //////////////////////////////////////////////////////////////////////
060         {
061           NullArgumentException.check ( request );
062    
063           Server  server = ( Server )
064             classToServerMap.get ( request.getClass ( ) );
065    
066           if ( server == null )
067           {
068             throw new IllegalArgumentException ( );
069           }
070    
071           return server.serve ( request );
072         }
073    
074         //////////////////////////////////////////////////////////////////////
075         //////////////////////////////////////////////////////////////////////
076         }