package org.hibernate.engine;

import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.hibernate.action.EntityAction;


public class OrderedEntityActionList extends AbstractList 
//implements List, Cloneable, java.io.Serializable
{
	
	private static final long serialVersionUID = -4366766994804760626L;
	
	private ArrayList list = new ArrayList();
	public OrderedEntityActionList() {
		super();
	}
	public OrderedEntityActionList(int size) {
		super();
		list = new ArrayList(size);
	}
	public Object get(int index) {
		return list.get(index);
	}

	public int size() {
		return list.size();
	}
    public Object set(int index, Object element) {
    	throw new UnsupportedOperationException();
    }

    public void add(int index, Object element) {
    	throw new UnsupportedOperationException();
    }
    public Object remove(int index) {
    	throw new UnsupportedOperationException();
    }
    public void clear() {
    	list.clear();
	}
	public boolean add(Object element) {
    	if(!(element instanceof EntityAction)){
    		System.out.println("==============add==========="+element);
        	throw new UnsupportedOperationException();
    	}
    	EntityAction action = (EntityAction)element;
    	int index = getIndex(action);
		list.add(index, element);
		return true;
    }
    private int getIndex(EntityAction action){
    	String tname = action.getEntityName();
    	int i = 0;
    	boolean found = false;
    	for (Iterator iter = list.iterator(); iter.hasNext(); i++){
    		EntityAction s = (EntityAction)iter.next();
    		if(!found && tname.equals(s.getEntityName())){
    			found = true;
    		}else if(found && !tname.equals(s.getEntityName())){
    			return i;
    		}
    	}
    	return list.size();
    	
    }
    
//    public Object clone(){
//		OrderedEntityActionList result = (OrderedEntityActionList)super.clone();
//		result.list = (ArrayList)this.list.clone();
//		return result;
//	}

}
