package com.comphenix.xp.rewards.items;
import org.apache.commons.lang.NullArgumentException;
import org.bukkit.configuration.ConfigurationSection;
import com.comphenix.xp.lookup.ItemQuery;
import com.comphenix.xp.lookup.PotionQuery;
import com.comphenix.xp.lookup.Query;
import com.comphenix.xp.parser.ParsingException;
import com.comphenix.xp.parser.RangeParser;
import com.comphenix.xp.parser.text.ExpressionParser;
import com.comphenix.xp.parser.text.ItemNameParser;
import com.comphenix.xp.parser.text.ItemParser;
import com.comphenix.xp.rewards.ResourceFactory;
import com.comphenix.xp.rewards.ResourcesParser;
public class ItemsParser extends ResourcesParser {
protected RangeParser rangeParser;
protected ItemParser itemParser;
public ItemsParser(ItemNameParser nameParser, String[] namedParameters) {
// Initialize parsers
this(new ItemParser(nameParser), namedParameters);
}
public ItemsParser(ItemParser itemParser, String[] namedParameters) {
this.rangeParser = new RangeParser(new ExpressionParser(namedParameters));
this.itemParser = itemParser;
}
@Override
public ResourceFactory parse(ConfigurationSection input, String key) throws ParsingException {
if (input == null)
throw new NullArgumentException("input");
if (key == null)
throw new NullArgumentException("key");
// Move to the next section
if (key != null && input.isConfigurationSection(key)) {
input = input.getConfigurationSection(key);
}
ItemsFactory factory = new ItemsFactory();
for (String node : input.getKeys(false)) {
Query query = itemParser.parse(node);
// Handle both item queries and potion queries
if (query instanceof ItemQuery)
factory.addItems((ItemQuery) query, rangeParser.parse(input, node));
else if (query instanceof PotionQuery)
factory.addItems(((PotionQuery) query).toItemQuery(true), rangeParser.parse(input, node));
else
throw ParsingException.fromFormat("Unable to parse range on item %s.", key);
}
return factory;
}
public RangeParser getRangeParser() {
return rangeParser;
}
public ItemParser getItemParser() {
return itemParser;
}
@Override
public ResourcesParser withParameters(String[] namedParameters) {
return new ItemsParser(itemParser, namedParameters);
}
}