001         package com.croftsoft.apps.chat.model.seri;
002    
003         import java.util.*;
004    
005         import com.croftsoft.core.animation.model.Model;
006         import com.croftsoft.core.animation.model.ModelId;
007         import com.croftsoft.core.animation.model.seri.SeriModelId;
008         import com.croftsoft.core.animation.model.seri.SeriWorld;
009         import com.croftsoft.core.lang.NullArgumentException;
010         import com.croftsoft.core.role.Server;
011    import com.croftsoft.core.util.consumer.Consumer;
012    
013         import com.croftsoft.apps.chat.event.CreateModelEvent;
014         import com.croftsoft.apps.chat.event.RemoveModelEvent;
015         import com.croftsoft.apps.chat.model.ChatModel;
016    import com.croftsoft.apps.chat.model.ChatWorld;
017    
018         /*********************************************************************
019         * A Serializable ChatWorld implementation.
020         *
021         * @version
022         *   2003-06-17
023         * @since
024         *   2003-06-05
025         * @author
026         *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
027         *********************************************************************/
028    
029         public final class  SeriChatWorld
030           extends SeriWorld
031           implements ChatWorld
032         //////////////////////////////////////////////////////////////////////
033         //////////////////////////////////////////////////////////////////////
034         {
035    
036         private static final long  serialVersionUID = 0L;
037    
038         //
039    
040         private transient Consumer  eventConsumer;
041    
042         private transient Random    random;
043    
044         //////////////////////////////////////////////////////////////////////
045         //////////////////////////////////////////////////////////////////////
046    
047         public  SeriChatWorld ( Consumer  eventConsumer )
048         //////////////////////////////////////////////////////////////////////
049         {
050           NullArgumentException.check ( this.eventConsumer = eventConsumer );
051    
052           random = new Random ( );
053         }
054    
055         //////////////////////////////////////////////////////////////////////
056         //////////////////////////////////////////////////////////////////////
057    
058         public void  addChatModel ( ChatModel  chatModel )
059         //////////////////////////////////////////////////////////////////////
060         {
061           modelArrayKeeper.insert ( chatModel );
062    
063           eventConsumer.consume ( new CreateModelEvent ( chatModel ) );
064         }
065    
066         public ModelId  createModel (
067           String  avatarType,
068           double  x,
069           double  y )
070         //////////////////////////////////////////////////////////////////////
071         {
072           ModelId  modelId = new SeriModelId ( random.nextLong ( ) );
073    
074           addChatModel ( new SeriChatModel (
075             modelId, eventConsumer, this, avatarType, x, y ) );
076    
077           return modelId;
078         }
079    
080         public ChatModel  getChatModel ( ModelId  modelId )
081         //////////////////////////////////////////////////////////////////////
082         {
083           NullArgumentException.check ( modelId );
084    
085           Model [ ]  models = getModels ( );
086    
087           for ( int  i = 0; i < models.length; i++ )
088           {
089             Model  model = models [ i ];
090    
091             if ( model.getModelId ( ).equals ( modelId ) )
092             {
093               return ( ChatModel ) model;
094             }
095           }
096    
097           return null;
098         }
099    
100         public  boolean  removeModel ( ModelId  modelId )
101         //////////////////////////////////////////////////////////////////////
102         {
103           NullArgumentException.check ( modelId );
104    
105           ChatModel  chatModel = getChatModel ( modelId );
106    
107           if ( chatModel == null )
108           {
109             return false;
110           }
111    
112           remove ( chatModel );
113    
114           eventConsumer.consume ( new RemoveModelEvent ( modelId ) );
115    
116           return true;
117         }
118    
119         //////////////////////////////////////////////////////////////////////
120         //////////////////////////////////////////////////////////////////////
121         }