// Copyright 2011 Google Inc. All Rights Reserved. package com.google.appengine.tools.mapreduce; import static com.google.appengine.tools.mapreduce.impl.util.TaskQueueUtil.normalizeTaskName; import com.google.appengine.api.taskqueue.QueueFactory; import com.google.appengine.api.taskqueue.TaskAlreadyExistsException; import com.google.appengine.api.taskqueue.TaskOptions.Builder; import com.google.appengine.api.taskqueue.TaskOptions.Method; import com.google.appengine.tools.mapreduce.impl.handlers.MapReduceServletImpl; import java.io.Serializable; /** * Describes a task-queue callback. The library will queue a task when event of interest occurs. * */ public class Callback implements Serializable{ // --------------------------- STATIC FIELDS --------------------------- private static final long serialVersionUID = -4850905607541756222L; // ------------------------------ FIELDS ------------------------------ private String url; private Method method = Method.POST; private String queue = "default"; // --------------------------- CONSTRUCTORS --------------------------- public Callback(String url) { this.url = url; } // --------------------- GETTER / SETTER METHODS --------------------- public Method getMethod() { return method; } public void setMethod(Method method) { this.method = method; } public String getQueue() { return queue; } public void setQueue(String queue) { this.queue = queue; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } // -------------------------- INSTANCE METHODS -------------------------- public void schedule(String taskName, String jobId) { String normalizedTaskName = normalizeTaskName(taskName); try { QueueFactory.getQueue(queue).add(Builder .withMethod(method) .url(url) .param("job_id", jobId) .taskName(normalizedTaskName)); } catch (TaskAlreadyExistsException ignored) { MapReduceServletImpl.LOG.warning("Done callback task " + normalizedTaskName + " already exists."); } } }