package com.github.czyzby.lml.vis.parser.impl.attribute.building;
import com.github.czyzby.lml.parser.LmlParser;
import com.github.czyzby.lml.parser.action.ActorConsumer;
import com.github.czyzby.lml.parser.tag.LmlBuildingAttribute;
import com.github.czyzby.lml.parser.tag.LmlTag;
import com.github.czyzby.lml.vis.parser.impl.tag.builder.ListViewLmlActorBuilder;
import com.kotcrab.vis.ui.util.adapter.ListAdapter;
/** Allows to use a custom {@link ListAdapter} in a {@link com.kotcrab.vis.ui.widget.ListView}. Expects an action ID
* (invocation marker optional) returning a list adapter instance. This attribute is parsed BEFORE the list view is
* created, so the action should not expect any parameters. Mapped to "adapter", "listAdapter".
*
* @author MJ */
public class ListAdapterLmlAttribute implements LmlBuildingAttribute<ListViewLmlActorBuilder> {
@Override
public Class<ListViewLmlActorBuilder> getBuilderType() {
return ListViewLmlActorBuilder.class;
}
@Override
public boolean process(final LmlParser parser, final LmlTag tag, final ListViewLmlActorBuilder builder,
final String rawAttributeData) {
@SuppressWarnings("unchecked") final ActorConsumer<ListAdapter<?>, Object> adapterProducer = (ActorConsumer<ListAdapter<?>, Object>) parser
.parseAction(rawAttributeData);
if (adapterProducer == null) {
parser.throwErrorIfStrict(
"ListView adapter attribute expects a valid action returning custom ListAdapter instance. No action found for ID: "
+ rawAttributeData);
} else {
final ListAdapter<?> adapter = adapterProducer.consume(null);
builder.setListAdapter(adapter);
}
return FULLY_PARSED;
}
}