This repository has been archived on 2022-12-21. You can view files and clone it, but cannot push or open issues or pull requests.
sdm03/src/main/java/com/github/dtschust/zork/parser/builders/ZorkContainerParseStrategy....

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);
}
}