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 }