package com.github.czyzby.lml.vis.parser.impl.attribute.building;
import com.github.czyzby.kiwi.util.common.Strings;
import com.github.czyzby.lml.parser.LmlParser;
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.DragPaneLmlActorBuilder;
import com.github.czyzby.lml.vis.parser.impl.tag.builder.DragPaneLmlActorBuilder.GroupType;
/** Allows to choose which group type will be used by the drag pane widget. Expects a string matching (case ignored) a
* constant from {@link GroupType} enum. Mapped to "type".
*
* @author MJ */
public class GroupTypeLmlAttribute implements LmlBuildingAttribute<DragPaneLmlActorBuilder> {
@Override
public Class<DragPaneLmlActorBuilder> getBuilderType() {
return DragPaneLmlActorBuilder.class;
}
@Override
public boolean process(final LmlParser parser, final LmlTag tag, final DragPaneLmlActorBuilder builder,
final String rawAttributeData) {
try {
final GroupType type = GroupType.valueOf(Strings.toUpperCase(parser.parseString(rawAttributeData)));
builder.setGroupType(type);
} catch (final Exception exception) {
parser.throwErrorIfStrict(
"Invalid group type. Expected name of GroupType enum constant, got: " + rawAttributeData,
exception);
}
return FULLY_PARSED;
}
}