package polly.rx.commands;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import polly.rx.MSG;
import polly.rx.MyPlugin;
import polly.rx.core.orion.Orion;
import polly.rx.core.orion.ResourcePriceProvider;
import polly.rx.core.orion.model.Production;
import de.skuzzle.polly.sdk.Command;
import de.skuzzle.polly.sdk.FormatManager;
import de.skuzzle.polly.sdk.MyPolly;
import de.skuzzle.polly.sdk.Parameter;
import de.skuzzle.polly.sdk.Signature;
import de.skuzzle.polly.sdk.Types;
import de.skuzzle.polly.sdk.Types.NumberType;
import de.skuzzle.polly.sdk.Types.StringType;
import de.skuzzle.polly.sdk.User;
import de.skuzzle.polly.sdk.exceptions.DuplicatedSignatureException;
public class RessComand extends Command {
public RessComand(MyPolly myPolly) throws DuplicatedSignatureException {
super(myPolly, "ress"); //$NON-NLS-1$
this.createSignature(MSG.ressSigDesc,
MyPlugin.RESSOURCES_PERMISSION,
new Parameter(MSG.ressSigExpression, Types.ANY));
this.createSignature(MSG.ressSigDesc,
MyPlugin.RESSOURCES_PERMISSION,
new Parameter(MSG.ressSigExpression, Types.ANY),
new Parameter(MSG.ressSigExpression, Types.ANY));
this.createSignature(MSG.ressSigDesc,
MyPlugin.RESSOURCES_PERMISSION,
new Parameter(MSG.ressSigExpression, Types.ANY),
new Parameter(MSG.ressSigExpression, Types.ANY),
new Parameter(MSG.ressSigExpression, Types.ANY));
this.setHelpText(MSG.ressHelp);
this.setRegisteredOnly(true);
}
@Override
public void renewConstants(Map<String, Types> map) {
final ResourcePriceProvider rpp = Orion.INSTANCE.getPriceProvider();
final List<? extends Production> prices = rpp.getAllPrices();
final List<Types> types = new ArrayList<Types>();
for (final Production p : prices) {
final NumberType rate = new NumberType(p.getRate());
final String ress = p.getRess().toString().toLowerCase();
map.put(ress, rate);
types.add(new StringType(ress + ":" + //$NON-NLS-1$
rate.valueString(this.getMyPolly().formatting())));
}
final Types.ListType lt = new Types.ListType(types);
map.put("all", lt); //$NON-NLS-1$
map.put("time", new Types.DateType(rpp.getRefreshTime())); //$NON-NLS-1$
}
@Override
protected boolean executeOnBoth(User executer, String channel,
Signature signature) {
this.reply(channel, this.execute(signature));
return false;
}
private String execute(Signature signature) {
FormatManager fm = this.getMyPolly().formatting();
if (this.match(signature, 0)) {
Types t1 = signature.getValue(0);
return t1.valueString(fm);
} else if (this.match(signature, 1)) {
Types t1 = signature.getValue(0);
Types t2 = signature.getValue(1);
return t1.valueString(fm) + " " + t2.valueString(fm); //$NON-NLS-1$
} else if (this.match(signature, 2)) {
Types t1 = signature.getValue(0);
Types t2 = signature.getValue(1);
Types t3 = signature.getValue(2);
return t1.valueString(fm) + " " + t2.valueString(fm) + " " + //$NON-NLS-1$ //$NON-NLS-2$
t3.valueString(fm);
}
// unreachable
return ""; //$NON-NLS-1$
}
}