Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.genfork.quest_system.xml;
- import org.apache.commons.lang3.StringUtils;
- import org.genfork.quest_system.model.quests.ITargetCondition;
- import org.genfork.quest_system.model.quests.conditions.KillsCondition;
- import org.genfork.quest_system.model.quests.model.KillsModel;
- import javax.xml.bind.annotation.adapters.XmlAdapter;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- /**
- * User: <a href="http://gencloud.solutions">GenCloud</a>
- * Date: 2018/04
- */
- public class TargetConditionAdapter extends XmlAdapter<String, List<ITargetCondition>> {
- @Override
- public List<ITargetCondition> unmarshal(String v) throws Exception {
- StringBuilder buffer = new StringBuilder(v);
- Pattern pattern = Pattern.compile("\\s*?\\{([\\S; \n\t]*?)}", Pattern.DOTALL);
- List<ITargetCondition> targetConditions = new ArrayList<>();
- Matcher matcher = pattern.matcher(buffer);
- while (matcher.find()) {
- String elementBuffer = matcher.group(1);
- buffer = buffer.delete(matcher.start(), matcher.end());
- elementBuffer = elementBuffer.replaceAll("[\\[\\]\\n\\t ]+", "");
- final String[] parts = elementBuffer.split(";");
- doInitCondition(parts, targetConditions);
- matcher = pattern.matcher(buffer);
- }
- return targetConditions;
- }
- private void doInitCondition(String[] parts, List<ITargetCondition> targetConditions) {
- for (String elems : parts) {
- final String[] params = elems.split(",");
- if (params[0].equals("KillsCondition")) {
- int npcId = -1;
- if (StringUtils.isNumeric(params[1]) && !params[1].equals("-")) {
- npcId = Integer.parseInt(params[1]);
- }
- final String level = params[2];
- final int count = Integer.parseInt(params[3]);
- final KillsModel model = new KillsModel(npcId, level, count);
- final KillsCondition condition = new KillsCondition(model);
- targetConditions.add(condition);
- }
- }
- }
- @Override
- public String marshal(List<ITargetCondition> v) throws Exception {
- final StringBuilder builder = new StringBuilder();
- builder.append('{');
- if (v.size() > 1) {
- for (ITargetCondition condition : v) {
- builder.append(condition.toString());
- builder.append(';');
- }
- } else {
- for (ITargetCondition condition : v) {
- builder.append(condition.toString());
- }
- }
- return builder.toString() + "}";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement