package com.framsticks.params; import static com.framsticks.util.lang.Containers.filterInstanceof; import com.framsticks.params.types.ProcedureParam; /** * @author Piotr Sniegowski */ public abstract class ListAccess implements AccessInterface { final AccessInterface elementAccess; public ListAccess(AccessInterface elementAccess) { this.elementAccess = elementAccess; } // @Override // public Param getGroupMember(int gi, int n) { // return null; // } @Override public void setDefault(boolean numericOnly) { } @Override public void setDefault(int i, boolean numericOnly) { } @Override public void setMin() { } @Override public void setMin(int i) { } @Override public void setMax() { } @Override public void setMax(int i) { } @Override public void copyFrom(AccessInterface src) { } @Override public void save(SinkInterface sink) { for (CompositeParam p : filterInstanceof(getParams(), CompositeParam.class)) { Object child = get(p, Object.class); //this is probably an assertion assert child != null; elementAccess.select(child); elementAccess.save(sink); } } @Override public void load(SourceInterface stream) throws Exception { } public AccessInterface getElementAccess() { return elementAccess; } public abstract String computeIdentifierFor(Object selected); @Override public final FramsClass getFramsClass() { return elementAccess.getFramsClass(); } //TODO it could actually be used also @Override public boolean tryAutoAppend(Object object) { return false; } @Override public Object call(String id, Object[] arguments) { throw new InvalidOperationException().msg("list access does not support calling methods").arg("id", id); } @Override public Object call(ProcedureParam param, Object[] arguments) { throw new InvalidOperationException().msg("list access does not support calling methods").arg("param", param); } };