package org.openprovenance.prov.xml; import java.util.AbstractList; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.openprovenance.prov.model.Attribute; import org.openprovenance.prov.model.Identifiable; public class AttributeList<TYPE> extends AbstractList<TYPE> { private final ArrayList<TYPE> ll=new ArrayList<TYPE>(); private Identifiable obj; public AttributeList(Identifiable obj) { //System.out.println("*** Constructor called"); this.obj=obj; } public AttributeList(Identifiable obj, Collection<TYPE> col) { this(obj); ll.addAll(col); } @Override public TYPE get(int index) { return ll.get(index); } @Override public TYPE set(int index, TYPE element) { //System.out.println("*** AttributeList set " + index); TYPE oldValue = ll.get(index); ll.set(index,element); return oldValue; } @Override public int size() { return ll.size(); } @Override public Object[] toArray() { return (Object[]) ll.toArray(); } public void add(int index,TYPE element){ //System.out.println("*** AttributeList add " + index + " " + element); ll.add(index,element); HasAllAttributes obj2=(HasAllAttributes)obj; obj2.getAllAttributes().add((org.openprovenance.prov.model.Attribute)element); } final static public <TYPE> AttributeList<TYPE> populateKnownAttributes(Identifiable object, List<Attribute> all, Class<TYPE> cl) { List<TYPE> some = new ArrayList<TYPE>(); if (all != null) { for (Attribute attr : all) { if (cl.isInstance(attr)) { some.add((TYPE) attr); } } } return new AttributeList<TYPE>(object, some); } }