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 }