41 lines
1.5 KiB
Java
41 lines
1.5 KiB
Java
package com.github.dtschust.zork.parser.builders;
|
|
|
|
import com.github.dtschust.zork.ZorkTrigger;
|
|
import com.github.dtschust.zork.parser.DOMUtils;
|
|
import com.github.dtschust.zork.parser.dom.Elements;
|
|
import com.github.dtschust.zork.types.ZorkContainer;
|
|
import org.w3c.dom.Element;
|
|
|
|
import java.util.List;
|
|
import java.util.stream.Collectors;
|
|
|
|
public class ZorkContainerParseStrategy implements ZorkParseStrategy<ZorkContainer> {
|
|
private final ZorkParseStrategy<ZorkTrigger> triggerStrategy;
|
|
|
|
public ZorkContainerParseStrategy(ZorkParseStrategy<ZorkTrigger> triggerStrategy) {
|
|
this.triggerStrategy = triggerStrategy;
|
|
}
|
|
|
|
@Override
|
|
public ZorkContainer parse(final Element element) {
|
|
final String name = DOMUtils.getInnerTextByTagName(element, "name", "");
|
|
|
|
final String description = DOMUtils.getInnerTextByTagName(element, "description", "");
|
|
|
|
final List<ZorkTrigger> triggers = Elements.byTagName(element, "trigger").stream()
|
|
.map(triggerStrategy::parse)
|
|
.collect(Collectors.toList());
|
|
|
|
final String status = DOMUtils.getInnerTextByTagName(element, "status", "");
|
|
|
|
final List<String> accepts = Elements.innerTextByTagName(element, "accept");
|
|
|
|
// If a container has an accepts attribute, then it is always open
|
|
final boolean open = !accepts.isEmpty();
|
|
|
|
final List<String> items = Elements.innerTextByTagName(element, "item");
|
|
|
|
return new ZorkContainer(name, description, open, status, items, accepts, triggers);
|
|
}
|
|
}
|