53 lines
2.3 KiB
Java
53 lines
2.3 KiB
Java
package com.github.dtschust.zork.parser.builders;
|
|
|
|
import com.github.dtschust.zork.ZorkCondition;
|
|
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.ZorkCreature;
|
|
import org.w3c.dom.Element;
|
|
|
|
import java.util.List;
|
|
import java.util.stream.Collectors;
|
|
|
|
public class ZorkCreatureParseStrategy implements ZorkParseStrategy<ZorkCreature> {
|
|
|
|
private final ZorkParseStrategy<ZorkCondition> conditionStrategy;
|
|
private final ZorkParseStrategy<ZorkTrigger> triggerStrategy;
|
|
|
|
public ZorkCreatureParseStrategy(final ZorkParseStrategy<ZorkCondition> conditionStrategy,
|
|
final ZorkParseStrategy<ZorkTrigger> triggerStrategy) {
|
|
this.conditionStrategy = conditionStrategy;
|
|
this.triggerStrategy = triggerStrategy;
|
|
}
|
|
|
|
@Override
|
|
public ZorkCreature parse(final Element source) {
|
|
// Get all possible creature attributes
|
|
final List<ZorkCondition> conditions = Elements.byTagName(source, "attack").stream()
|
|
.flatMap(e -> Elements.byTagName(e, "condition").stream())
|
|
.map(conditionStrategy::parse)
|
|
.collect(Collectors.toList());
|
|
|
|
final List<String> prints = Elements.byTagName(source, "attack").stream()
|
|
.flatMap(e -> Elements.innerTextByTagName(e, "print").stream())
|
|
.collect(Collectors.toList());
|
|
|
|
final List<String> actions = Elements.byTagName(source, "attack").stream()
|
|
.flatMap(e -> Elements.innerTextByTagName(e, "action").stream())
|
|
.collect(Collectors.toList());
|
|
|
|
final List<String> vulnerabilities = Elements.innerTextByTagName(source, "vulnerability");
|
|
|
|
final List<ZorkTrigger> triggers = Elements.byTagName(source, "trigger").stream()
|
|
.map(triggerStrategy::parse)
|
|
.collect(Collectors.toList());
|
|
|
|
final String name = DOMUtils.getInnerTextByTagName(source, "name", "");
|
|
final String description = DOMUtils.getInnerTextByTagName(source, "description", "");
|
|
final String status = DOMUtils.getInnerTextByTagName(source, "status", "");
|
|
|
|
return new ZorkCreature(name, description, status, triggers, vulnerabilities, conditions, prints, actions);
|
|
}
|
|
}
|