| /** |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.camel.component.gae.task; |
| |
| import java.lang.reflect.Proxy; |
| import java.net.URI; |
| import java.net.URISyntaxException; |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| |
| import com.google.appengine.api.taskqueue.Queue; |
| import com.google.appengine.api.taskqueue.TaskOptions; |
| import org.apache.camel.Exchange; |
| import org.apache.camel.Producer; |
| import org.apache.camel.component.gae.bind.HttpBindingInvocationHandler; |
| import org.apache.camel.component.gae.bind.InboundBinding; |
| import org.apache.camel.component.gae.bind.OutboundBinding; |
| import org.apache.camel.component.gae.bind.OutboundBindingSupport; |
| import org.apache.camel.component.http.HttpBinding; |
| import org.apache.camel.component.http.HttpClientConfigurer; |
| import org.apache.camel.component.servlet.ServletComponent; |
| import org.apache.camel.component.servlet.ServletEndpoint; |
| import org.apache.commons.httpclient.HttpConnectionManager; |
| import org.apache.commons.httpclient.params.HttpClientParams; |
| |
| /** |
| * Represents a <a href="http://camel.apache.org/gtask.html">Google App Engine Task Queueing endpoint</a>. |
| */ |
| public class GTaskEndpoint extends ServletEndpoint implements OutboundBindingSupport<GTaskEndpoint, TaskOptions, Void> { |
| |
| private OutboundBinding<GTaskEndpoint, TaskOptions, Void> outboundBinding; |
| private InboundBinding<GTaskEndpoint, HttpServletRequest, HttpServletResponse> inboundBinding; |
| |
| private String workerRoot; |
| |
| private Queue queue; |
| |
| public GTaskEndpoint(String endpointUri, ServletComponent component, |
| URI httpUri, HttpClientParams params, |
| HttpConnectionManager httpConnectionManager, |
| HttpClientConfigurer clientConfigurer) throws URISyntaxException { |
| super(endpointUri, component, httpUri, params, httpConnectionManager, clientConfigurer); |
| } |
| |
| public OutboundBinding<GTaskEndpoint, TaskOptions, Void> getOutboundBinding() { |
| return outboundBinding; |
| } |
| |
| public void setOutboundBinding(OutboundBinding<GTaskEndpoint, TaskOptions, Void> outboundBinding) { |
| this.outboundBinding = outboundBinding; |
| } |
| |
| public InboundBinding<GTaskEndpoint, HttpServletRequest, HttpServletResponse> getInboundBinding() { |
| return inboundBinding; |
| } |
| |
| public void setInboundBinding( |
| InboundBinding<GTaskEndpoint, HttpServletRequest, HttpServletResponse> inboundBinding) { |
| this.inboundBinding = inboundBinding; |
| } |
| |
| /** |
| * Proxies the {@link HttpBinding} returned by {@link super#getBinding()} |
| * with a dynamic proxy. The proxy's invocation handler further delegates to |
| * {@link InboundBinding#readRequest(org.apache.camel.Endpoint, Exchange, Object)} |
| * . |
| * |
| * @return proxied {@link HttpBinding}. |
| */ |
| @Override |
| public HttpBinding getBinding() { |
| return (HttpBinding)Proxy.newProxyInstance(getClass().getClassLoader(), new Class[] {HttpBinding.class}, |
| new HttpBindingInvocationHandler<GTaskEndpoint, HttpServletRequest, HttpServletResponse>( |
| this, super.getBinding(), getInboundBinding())); |
| } |
| |
| /** |
| * @see #setWorkerRoot(String) |
| */ |
| public String getWorkerRoot() { |
| return workerRoot; |
| } |
| |
| /** |
| * Sets the web hook path root. |
| * |
| * @param workerRoot |
| * the assumed web hook path root. The default is |
| * <code>worker</code>. The servlet handling the callback from |
| * the task queueing service should have a <code>/worker/*</code> |
| * servlet mapping in this case. If another servlet mapping is |
| * used it must be set here accordingly. |
| */ |
| public void setWorkerRoot(String workerRoot) { |
| this.workerRoot = workerRoot; |
| } |
| |
| public Queue getQueue() { |
| return queue; |
| } |
| |
| public void setQueue(Queue queue) { |
| this.queue = queue; |
| } |
| |
| public Producer createProducer() throws Exception { |
| return new GTaskProducer(this); |
| } |
| |
| } |