project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/RoomList.java
author Medo <smaxein@googlemail.com>
Thu, 02 Aug 2012 16:36:11 +0200
changeset 7461 38acbfdb484f
parent 7358 57a508884052
child 7476 2fb781bbdd51
permissions -rw-r--r--
Hedgeroid: Started to implement RoomActivity

package org.hedgewars.hedgeroid.netplay;

import java.util.Collections;
import java.util.Map;
import java.util.TreeMap;

import android.database.DataSetObservable;
import android.util.Log;
import android.util.Pair;

public class Roomlist extends DataSetObservable {
	private long nextId = 1;
	private Map<String, Pair<Room, Long>> rooms = new TreeMap<String, Pair<Room, Long>>();
	
	public void updateList(Room[] newRooms) {
		Map<String, Pair<Room, Long>> newMap = new TreeMap<String, Pair<Room, Long>>();
		for(Room room : newRooms) {
			Pair<Room, Long> oldEntry = rooms.get(room.name);
			if(oldEntry == null) {
				newMap.put(room.name, Pair.create(room, nextId++));
			} else {
				newMap.put(room.name, Pair.create(room, oldEntry.second));
			}
		}
		rooms = newMap;
		notifyChanged();
	}
	
	public void addRoomWithNewId(Room room) {
		rooms.put(room.name, Pair.create(room, nextId++));
		notifyChanged();
	}
	
	public void updateRoom(String name, Room room) {
		Pair<Room, Long> oldEntry = rooms.get(name);
		if(oldEntry == null) {
			Log.e("RoomList", "Received update for unknown room: "+name);
			rooms.put(room.name, Pair.create(room, nextId++));
		} else {
			if(!name.equals(room.name)) {
				rooms.remove(name);
			}
			rooms.put(room.name, Pair.create(room, oldEntry.second));
		}
		notifyChanged();
	}
	
	public void removeRoom(String name) {
		if(rooms.remove(name) != null) {
			notifyChanged();
		}
	}
	
	public void clear() {
		if(!rooms.isEmpty()) {
			rooms.clear();
			notifyChanged();
		}
	}
	
	public Map<String, Pair<Room, Long>> getMap() {
		return Collections.unmodifiableMap(rooms);
	}
}