package org.handwerkszeug.riak.mapreduce.internal;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import org.codehaus.jackson.JsonGenerator;
import org.handwerkszeug.riak.model.Function;
import org.handwerkszeug.riak.util.JsonAppender;
/**
* @author taichi
*/
public abstract class ArgAppender implements JsonAppender {
static final String ARG = "arg";
final Function function;
protected ArgAppender(Function function) {
this.function = function;
}
@Override
public void appendTo(JsonGenerator generator) throws IOException {
this.function.appendTo(generator);
appendArg(generator);
}
protected abstract void appendArg(JsonGenerator generator)
throws IOException;
public static JsonAppender arg(Function function, final Object arg) {
return new ArgAppender(function) {
@Override
public void appendArg(JsonGenerator generator) throws IOException {
generator.writeObjectField(ARG, arg);
}
};
}
public static JsonAppender arg(Function function, final String arg) {
return new ArgAppender(function) {
@Override
public void appendArg(JsonGenerator generator) throws IOException {
generator.writeStringField(ARG, arg);
}
};
}
public static JsonAppender arg(Function function, final int arg) {
return new ArgAppender(function) {
@Override
public void appendArg(JsonGenerator generator) throws IOException {
generator.writeNumberField(ARG, arg);
}
};
}
public static JsonAppender arg(Function function, final long arg) {
return new ArgAppender(function) {
@Override
public void appendArg(JsonGenerator generator) throws IOException {
generator.writeNumberField(ARG, arg);
}
};
}
public static JsonAppender arg(Function function, final double arg) {
return new ArgAppender(function) {
@Override
public void appendArg(JsonGenerator generator) throws IOException {
generator.writeNumberField(ARG, arg);
}
};
}
public static JsonAppender arg(Function function, final float arg) {
return new ArgAppender(function) {
@Override
public void appendArg(JsonGenerator generator) throws IOException {
generator.writeNumberField(ARG, arg);
}
};
}
public static JsonAppender arg(Function function, final BigInteger arg) {
return new ArgAppender(function) {
@Override
public void appendArg(JsonGenerator generator) throws IOException {
generator.writeFieldName(ARG);
generator.writeNumber(arg);
}
};
}
public static JsonAppender arg(Function function, final BigDecimal arg) {
return new ArgAppender(function) {
@Override
public void appendArg(JsonGenerator generator) throws IOException {
generator.writeFieldName(ARG);
generator.writeNumber(arg);
}
};
}
public static JsonAppender arg(Function function, final String... args) {
return new ArgAppender(function) {
@Override
public void appendArg(JsonGenerator generator) throws IOException {
generator.writeArrayFieldStart(ARG);
for (String s : args) {
generator.writeString(s);
}
generator.writeEndArray();
}
};
}
}