All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.rzo.yajsw.util.ObservableList Maven / Gradle / Ivy

package org.rzo.yajsw.util;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.beanutils.PropertyUtils;
import org.rzo.yajsw.srvmgr.client.Host;

import ca.odell.glazedlists.EventList;

public class ObservableList
{
	EventList		_list;
	String[]						_idProperty;
	String[]						_propertyNames;

	Map	_currentList	= new HashMap();

	public ObservableList(EventList list, String[] propertyNames, String[] idProperty)
	{
		_list = list;
		_idProperty = idProperty;
		_propertyNames = propertyNames;
	}

	private String getId(Object obj)
	{
		String result = "";
		try
		{
			for (String prop : _idProperty)
				result += PropertyUtils.getSimpleProperty(obj, prop) + "$$";
			return result;
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		return null;
	}

	public void update(Collection newList)
	{
		Set updated = new HashSet();
		for (Object obj : newList)
		{
			updated.add(updateObject(obj));
		}
		Set toRemove = new HashSet(_currentList.keySet());
		toRemove.removeAll(updated);
		for (Object id : toRemove)
		{
			_list.remove(_currentList.remove(id));
		}

	}

	public Object updateObject(Object obj)
	{
		Object id = getId(obj);
		ObservableObject current = _currentList.get(id);
		if (current == null)
		{
			current = new ObservableObject(obj, _propertyNames);
			_currentList.put(id, current);
			_list.add(current);
		}
		else
			current.update(obj);
		return id;
	}
	
	public void removeObject(E obj)
	{
		Object id = getId(obj);
		ObservableObject current = _currentList.remove(id);
		if (current != null)
			_list.remove(current);

	}
	
	public boolean containsObject(E obj)
	{
		return _currentList.containsKey(getId(obj));
	}

	public E getObject(E obj)
	{
		Object id = getId(obj);
		ObservableObject current = _currentList.get(id);
		if (current == null)
			return null;
		return (E) current.getRoot();
	}
	
	public Collection getObjectList()
	{
		List result = new ArrayList();
		for (ObservableObject obj : _currentList.values())
		{
			result.add((E) obj.getRoot());
		}
		return result;
	}
	

}