/*
* Eduardo, an IRC bot framework
* Copyright (C) sk89q <http://www.sk89q.com>
* Copyright (C) Eduardo team and contributors
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.sk89q.eduardo.service.command;
import com.sk89q.eduardo.event.CommandEvent;
import com.sk89q.eduardo.model.context.Context;
import com.sk89q.eduardo.model.response.Response;
import com.sk89q.eduardo.service.auth.Subject;
import com.sk89q.intake.context.CommandLocals;
import com.sk89q.intake.parametric.ParameterException;
import com.sk89q.intake.parametric.argument.ArgumentStack;
import com.sk89q.intake.parametric.binding.BindingBehavior;
import com.sk89q.intake.parametric.binding.BindingHelper;
import com.sk89q.intake.parametric.binding.BindingMatch;
public class DefaultBinding extends BindingHelper {
@BindingMatch(type = CommandLocals.class, behavior = BindingBehavior.PROVIDES, consumedCount = -1)
public CommandLocals getLocals(ArgumentStack context) throws ParameterException {
return context.getContext().getLocals();
}
@BindingMatch(type = CommandEvent.class, behavior = BindingBehavior.PROVIDES, consumedCount = -1)
public CommandEvent getCommandEvent(ArgumentStack context) throws ParameterException {
CommandEvent event = context.getContext().getLocals().get(CommandEvent.class);
context.markConsumed();
if (event == null) {
throw new ParameterException("Uh oh! The CommandEvent is not known.");
} else {
return event;
}
}
@BindingMatch(type = Context.class, behavior = BindingBehavior.PROVIDES, consumedCount = -1)
public Context getContext(ArgumentStack context) throws ParameterException {
Context c = context.getContext().getLocals().get(Context.class);
if (c == null) {
throw new ParameterException("Uh oh! The Context is not known.");
} else {
return c;
}
}
@BindingMatch(type = Subject.class, behavior = BindingBehavior.PROVIDES, consumedCount = -1)
public Subject getSubject(ArgumentStack context) throws ParameterException {
Subject subject = context.getContext().getLocals().get(Subject.class);
if (subject == null) {
throw new ParameterException("Uh oh! The subject of the command is not known.");
} else {
return subject;
}
}
@BindingMatch(type = Response.class, behavior = BindingBehavior.PROVIDES, consumedCount = -1)
public Response getResponse(ArgumentStack context) throws ParameterException {
Response response = context.getContext().getLocals().get(Response.class);
if (response == null) {
throw new ParameterException("Uh oh! The Response is not known.");
} else {
return response;
}
}
}