/**
 * 
 */
package eu.dnetlib.data.collective.manager.ui;

import java.util.Hashtable;
import java.util.List;
import java.util.Map;

import org.zkoss.zk.ui.Desktop;
import org.zkoss.zkex.zul.SimpleListModelSharer;
import org.zkoss.zul.ListModel;
import org.zkoss.zul.ListModelList;



/**
 * A helper class to share list models across ui clients
 * @author jochen
 *
 */
public class UIContentImpl implements IUIContent {
	
	Map<String, Map<String, SimpleListModelSharer>> modelSharerUiMap = new Hashtable<String, Map<String, SimpleListModelSharer>>();
	Map<String, Map<String, ListModelList>> modelListUiMap = new Hashtable<String, Map<String, ListModelList>>();


	public void registerListModel(String uiId, String hiId){
		Map<String, SimpleListModelSharer> modelSharerHiMap = null;
		Map<String, ListModelList> modelListHiMap = null;
		if (!modelSharerUiMap.containsKey(uiId)){
			modelSharerHiMap = new Hashtable<String, SimpleListModelSharer>();
			modelSharerUiMap.put(uiId, modelSharerHiMap);
			modelListHiMap = new Hashtable<String, ListModelList>();
			modelListUiMap.put(uiId, modelListHiMap);
		}else{
			modelSharerHiMap = modelSharerUiMap.get(uiId);
			modelListHiMap = modelListUiMap.get(uiId);
		}
		if (!modelSharerHiMap.containsKey(hiId)){
			ListModelList lml = new ListModelList();
			SimpleListModelSharer slms = new SimpleListModelSharer(lml);
			modelSharerHiMap.put(hiId, slms);
			modelListHiMap.put(hiId, lml);
		}
	}
	
	public ListModel getModelProxy(String uiId, String instanceId, Desktop desktop){
		return modelSharerUiMap.get(uiId).get(instanceId).getProxy(desktop);
	}
	
	public void addObject(String uiId, String instanceId, Object obj){
		ListModelList lml = modelListUiMap.get(uiId).get(instanceId);
		synchronized (lml) {
			lml.add(obj);
		}
	}
	
	public void setObjects(String uiId, String instanceId, List<?> objList){
		ListModelList lml = modelListUiMap.get(uiId).get(instanceId);
		synchronized (lml) {
			lml.clear();
			lml.addAll(objList);
		}
	}
		
}
