package com.framsticks.params; import com.framsticks.util.lang.Numbers; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; import java.util.List; /** * @author Piotr Sniegowski */ public class ArrayListAccess extends ListAccess { List list; public ArrayListAccess(AccessInterface elementAccess) { super(elementAccess); } @Override public ArrayListAccess cloneAccess() { return new ArrayListAccess(elementAccess.cloneAccess()); } @Override public List createAccessee() { return new ArrayList(); } @Override public Param getParam(int i) { return Param.build().id(Integer.toString(i)).name(elementAccess.getId()).type("o " + elementAccess.getId()).finish(); } @Override public Param getParam(String id) { Integer i = Numbers.parse(id, Integer.class); return (i == null ? null : getParam(i)); } @Override public String getId() { return "l " + elementAccess.getId(); } @Override public int getParamCount() { return list.size(); } @Override public T get(int i, Class type) { if (i < list.size()) { return type.cast(list.get(i)); } return null; } @Override public T get(String id, Class type) { return get(Integer.parseInt(id), type); } @Override public T get(ValueParam param, Class type) { return get(param.getId(), type); } @Override public int set(int i, T value) { while (i >= list.size()) { list.add(null); } list.set(i, value); return 0; } @Override public int set(String id, T value) { return set(Integer.parseInt(id), value); } @Override public int set(ValueParam param, T value) { return set(param.getId(), value); } @Override public void clearValues() { list.clear(); } /** covariant */ @Override public List getSelected() { return list; } @SuppressWarnings("unchecked") @Override public ArrayListAccess select(Object object) { list = (List) object; return this; } @Override public String computeIdentifierFor(Object selected) { return Integer.toString(list.size()); } @Override public Collection getParams() { List result = new LinkedList(); if (list == null) { return result; } for (int i = 0; i < list.size(); ++i) { result.add(getParam(i)); } return result; } }