package com.tinkerpop.rexster.kibbles.sample;
import com.tinkerpop.blueprints.Graph;
import com.tinkerpop.rexster.RexsterResourceContext;
import com.tinkerpop.rexster.extension.ExtensionDefinition;
import com.tinkerpop.rexster.extension.ExtensionDescriptor;
import com.tinkerpop.rexster.extension.ExtensionMethod;
import com.tinkerpop.rexster.extension.ExtensionNaming;
import com.tinkerpop.rexster.extension.ExtensionPoint;
import com.tinkerpop.rexster.extension.ExtensionRequestParameter;
import com.tinkerpop.rexster.extension.ExtensionResponse;
import com.tinkerpop.rexster.extension.RexsterContext;
import javax.ws.rs.core.Response;
import java.util.HashMap;
import java.util.Map;
/**
* A simple extension that just echoes back the string parameter passed in, but further demonstrates
* that an extension class can share a name within the same namespace with another class (in this case
* the standard PingExtension). In other words, extensions can span multiple classes within the same
* namespace and name.
*/
@ExtensionNaming(namespace = AbstractSampleExtension.EXTENSION_NAMESPACE, name = PingExtension.EXTENSION_NAME)
public class PingAddOnExtension extends AbstractSampleExtension {
public static final String EXTENSION_NAME = "ping";
@ExtensionDefinition(extensionPoint = ExtensionPoint.GRAPH, path = "pong")
@ExtensionDescriptor(description = "a simple ping extension.")
public ExtensionResponse evaluatePing(@RexsterContext RexsterResourceContext context,
@RexsterContext Graph graph,
@ExtensionRequestParameter(name = "reply", description = "a value to reply with") String reply) {
if (reply == null || reply.isEmpty()) {
ExtensionMethod extMethod = context.getExtensionMethod();
return ExtensionResponse.error(
"the reply parameter cannot be empty",
null,
Response.Status.BAD_REQUEST.getStatusCode(),
null,
generateErrorJson(extMethod.getExtensionApiAsJson()));
}
Map<String, String> map = new HashMap<String, String>();
map.put("ping-add-on", reply);
return ExtensionResponse.ok(map);
}
}