/demos/tweetstore/runatcloud-tweetstore/src/main/java/org/jclouds/demo/tweetstore/taskqueue/HttpRequestTask.java

https://github.com/regularfry/jclouds · Java · 149 lines · 105 code · 25 blank · 19 comment · 0 complexity · 835a911467a9b565943bc27904e0ed2d MD5 · raw file

  1. /**
  2. * Licensed to jclouds, Inc. (jclouds) under one or more
  3. * contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. jclouds licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing,
  13. * software distributed under the License is distributed on an
  14. * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  15. * KIND, either express or implied. See the License for the
  16. * specific language governing permissions and limitations
  17. * under the License.
  18. */
  19. package org.jclouds.demo.tweetstore.taskqueue;
  20. import static com.google.common.base.Preconditions.checkNotNull;
  21. import static com.google.inject.name.Names.bindProperties;
  22. import static java.lang.String.format;
  23. import static org.jclouds.demo.tweetstore.controller.StoreTweetsController.AUTHORIZED_REQUEST_ORIGINATOR_HEADER;
  24. import java.util.Properties;
  25. import javax.ws.rs.core.UriBuilder;
  26. import org.jclouds.PropertiesBuilder;
  27. import org.jclouds.concurrent.config.ExecutorServiceModule;
  28. import org.jclouds.http.HttpCommand;
  29. import org.jclouds.http.HttpCommandExecutorService;
  30. import org.jclouds.http.HttpRequest;
  31. import org.jclouds.http.config.JavaUrlHttpCommandExecutorServiceModule;
  32. import com.google.common.collect.ImmutableMultimap;
  33. import com.google.common.collect.Multimap;
  34. import com.google.inject.AbstractModule;
  35. import com.google.inject.Guice;
  36. import com.sun.jersey.api.uri.UriBuilderImpl;
  37. public class HttpRequestTask implements Runnable {
  38. public static Factory factory(Properties props) {
  39. return factory(props, format("%s@%d", Factory.class.getName(), System.currentTimeMillis()));
  40. }
  41. public static Factory factory(Properties props, String originator) {
  42. return new Factory(props, originator);
  43. }
  44. public static class Factory {
  45. protected final HttpCommandExecutorService httpClient;
  46. protected final String originator;
  47. private Factory(final Properties props, String originator) {
  48. this.originator = originator;
  49. httpClient = Guice.createInjector(new ExecutorServiceModule(),
  50. new JavaUrlHttpCommandExecutorServiceModule(),
  51. new AbstractModule() {
  52. @Override
  53. protected void configure() {
  54. // URL connection defaults
  55. Properties toBind = new PropertiesBuilder().build();
  56. toBind.putAll(checkNotNull(props, "properties"));
  57. toBind.putAll(System.getProperties());
  58. bindProperties(binder(), toBind);
  59. bind(UriBuilder.class).to(UriBuilderImpl.class);
  60. }
  61. }).getInstance(HttpCommandExecutorService.class);
  62. }
  63. public HttpRequestTask create(HttpRequest request) {
  64. HttpRequest requestWithSubmitter = request.toBuilder().headers(
  65. copyOfWithEntry(request.getHeaders(),
  66. AUTHORIZED_REQUEST_ORIGINATOR_HEADER, originator)).build();
  67. return new HttpRequestTask(httpClient, requestWithSubmitter);
  68. }
  69. private static <K, V> Multimap<K, V> copyOfWithEntry(
  70. Multimap<? extends K, ? extends V> multimap, K k1, V v1) {
  71. return ImmutableMultimap.<K, V>builder().putAll(multimap).put(k1, v1).build();
  72. }
  73. }
  74. private final HttpCommandExecutorService httpClient;
  75. private final HttpRequest request;
  76. private HttpRequestTask(HttpCommandExecutorService httpClient, HttpRequest request) {
  77. this.httpClient = httpClient;
  78. this.request = request;
  79. }
  80. @Override
  81. public void run() {
  82. httpClient.submit(new ImmutableHttpCommand(request));
  83. }
  84. private class ImmutableHttpCommand implements HttpCommand {
  85. private final HttpRequest request;
  86. public ImmutableHttpCommand(HttpRequest request) {
  87. this.request = request;
  88. }
  89. @Override
  90. public void setException(Exception exception) {
  91. }
  92. @Override
  93. public void setCurrentRequest(HttpRequest request) {
  94. }
  95. @Override
  96. public boolean isReplayable() {
  97. return false;
  98. }
  99. @Override
  100. public int incrementRedirectCount() {
  101. return 0;
  102. }
  103. @Override
  104. public int incrementFailureCount() {
  105. return 0;
  106. }
  107. @Override
  108. public int getRedirectCount() {
  109. return 0;
  110. }
  111. @Override
  112. public int getFailureCount() {
  113. return 0;
  114. }
  115. @Override
  116. public Exception getException() {
  117. return null;
  118. }
  119. @Override
  120. public HttpRequest getCurrentRequest() {
  121. return request;
  122. }
  123. }
  124. }