47 lines
1.9 KiB
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);
|
|
}
|
|
}
|