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/ZorkRoomParseStrategy.java

47 lines
1.9 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.ZorkRoom;
import org.w3c.dom.Element;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class ZorkRoomParseStrategy implements ZorkParseStrategy<ZorkRoom> {
private final ZorkParseStrategy<ZorkTrigger> triggerStrategy;
public ZorkRoomParseStrategy(final ZorkParseStrategy<ZorkTrigger> triggerStrategy) {
this.triggerStrategy = triggerStrategy;
}
@Override
public ZorkRoom parse(final Element source) {
// Get all possible Room attributes
final String name = DOMUtils.getInnerTextByTagName(source, "name", "");
final String description = DOMUtils.getInnerTextByTagName(source, "description", "");
final String type = DOMUtils.getInnerTextByTagName(source, "type", "regular");
final List<ZorkTrigger> triggers = Elements.byTagName(source, "trigger").stream()
.map(triggerStrategy::parse)
.collect(Collectors.toList());
final String status = DOMUtils.getInnerTextByTagName(source, "status", "");
final List<String> items = Elements.innerTextByTagName(source, "item");
final List<String> creatures = Elements.innerTextByTagName(source, "creature");
final List<String> containers = Elements.innerTextByTagName(source, "container");
final Map<String, String> borders = Elements.byTagName(source, "border").stream()
.collect(Collectors.toMap(
e -> DOMUtils.getInnerTextByTagName(e, "direction"),
e -> DOMUtils.getInnerTextByTagName(e, "name")
));
return new ZorkRoom(name, description, type, status, triggers, borders, containers, items, creatures);
}
}