/**
  * Returns a list of all local objects for a specific client.
  *
  * @param ci the client for the client in question
  * @return LocalObjectList the list of local objects for this client that the server knows of
  */
 public LocalObjectList getLocalObjectList(ClientInfo ci) {
   if (!client2LocalObj.containsKey(ci)) {
     LocalObjectList lol = new LocalObjectList();
     client2LocalObj.put(ci, lol);
   }
   return (LocalObjectList) client2LocalObj.get(ci);
 }
 /**
  * Fills a data container with data from the all local objects on the server.
  *
  * @param dc the container to fill
  */
 public void fill(ExtendedDataContainer dc, ClientInfo ci) {
   Map<ClientInfo, LocalObjectList> copy =
       new HashMap<ClientInfo, LocalObjectList>(client2LocalObj);
   if (ci != null) {
     copy.remove(ci);
   }
   for (Iterator<LocalObjectList> itty = copy.values().iterator(); itty.hasNext(); ) {
     LocalObjectList lol = itty.next();
     for (Iterator<LocalObject> itty2 = lol.iterator(); itty2.hasNext(); ) {
       LocalObject lo = itty2.next();
       dc.add(lo);
     }
   }
 }
 /**
  * Gets a local object stored on the server identified by the clientID and the objectID. The
  * actual client don't know a thing about which local object ID their objects will get on the
  * server which is why they can't transmit them. All they know is, how THEY identify their
  * objects. This method maps between those two worlds.
  *
  * @param objID the objectID
  * @param clientID the clientID
  * @return LocalObject the corresponding local object
  */
 public LocalObject getLocalObjectToIDs(int objID, int clientID) {
   for (Iterator<LocalObjectList> itty = client2LocalObj.values().iterator(); itty.hasNext(); ) {
     LocalObjectList entry = itty.next();
     for (Iterator<LocalObject> itty2 = entry.iterator(); itty2.hasNext(); ) {
       LocalObject lo = itty2.next();
       if (lo.getClientID() == clientID) {
         if (lo.getObjectID() == objID) {
           return lo;
         }
       } else {
         break; // Wrong client!
       }
     }
   }
   return null;
 }
 /**
  * Removes a client completely from the list, i.e. it kills all of its local objects on the
  * server.
  *
  * @param ci the client
  */
 public void remove(ClientInfo ci) {
   client2LocalObj.remove(ci);
 }