diff --git a/README.md b/README.md index 859bdca79e..4e7adae00e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,11 @@ jclouds ====== -jclouds is an open source library that helps you get started in the cloud and reuse your java and clojure development skills. Our api allows you freedom to use portable abstractions or cloud-specific features. We test support of 30 cloud providers and cloud software stacks, including Amazon, GoGrid, Ninefold, vCloud, OpenStack, and Azure. -We offer several API abstractions as java and clojure libraries. The following are the most mature: +jclouds allows provisioning and control of cloud resources, including blobstore +and compute, from Java and Clojure. Our API gives allows developers to use +both portable abstractions and cloud-specific features. We test support of 30 +cloud providers and cloud software stacks, including Amazon, Azure, GoGrid, +Ninefold, OpenStack, and vCloud. jclouds is licensed under the Apache License, +Version 2.0 Features -------- diff --git a/README.txt b/README.txt index 2bb3cce533..296958ecec 100644 --- a/README.txt +++ b/README.txt @@ -1,11 +1,11 @@ Overview: -jclouds is an open source library that helps you get started in the cloud -and reuse your java and clojure development skills. Our api allows you to -freedom to use portable abstractions or cloud-specific features. We have -two abstractions at the moment: compute and blobstore. compute helps you -bootstrap machines in the cloud. blobstore helps you manage key-value -data. +jclouds allows provisioning and control of cloud resources, including blobstore +and compute, from Java and Clojure. Our API gives allows developers to use +both portable abstractions and cloud-specific features. We test support of 30 +cloud providers and cloud software stacks, including Amazon, Azure, GoGrid, +Ninefold, OpenStack, and vCloud. jclouds is licensed under the Apache License, +Version 2.0 our current version is 1.4.2 our next maintenance version is 1.4.2-SNAPSHOT diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/handlers/ParseAtmosErrorFromXmlContent.java b/apis/atmos/src/main/java/org/jclouds/atmos/handlers/ParseAtmosErrorFromXmlContent.java index 07d854d2ea..9c69e0787e 100644 --- a/apis/atmos/src/main/java/org/jclouds/atmos/handlers/ParseAtmosErrorFromXmlContent.java +++ b/apis/atmos/src/main/java/org/jclouds/atmos/handlers/ParseAtmosErrorFromXmlContent.java @@ -71,7 +71,7 @@ public class ParseAtmosErrorFromXmlContent implements HttpErrorHandler { AtmosError error = null; if (response.getPayload() != null) { try { - String content = Strings2.toStringAndClose(response.getPayload().getInput()); + String content = Strings2.toString(response.getPayload()); if (content != null && content.indexOf('<') >= 0) { error = utils.parseAtmosErrorFromContent(command, response, Strings2.toInputStream(content)); } else { diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/options/ListOptions.java b/apis/atmos/src/main/java/org/jclouds/atmos/options/ListOptions.java index 7b2f6fc72f..6ec8a614c1 100644 --- a/apis/atmos/src/main/java/org/jclouds/atmos/options/ListOptions.java +++ b/apis/atmos/src/main/java/org/jclouds/atmos/options/ListOptions.java @@ -72,7 +72,7 @@ public class ListOptions extends BaseHttpRequestOptions { public Integer getLimit() { String maxresults = getFirstHeaderOrNull("x-emc-limit"); - return (maxresults != null) ? new Integer(maxresults) : null; + return (maxresults != null) ? Integer.valueOf(maxresults) : null; } public static class Builder { diff --git a/apis/atmos/src/test/java/org/jclouds/atmos/AtmosClientLiveTest.java b/apis/atmos/src/test/java/org/jclouds/atmos/AtmosClientLiveTest.java index 04e9675a04..d54c06169d 100644 --- a/apis/atmos/src/test/java/org/jclouds/atmos/AtmosClientLiveTest.java +++ b/apis/atmos/src/test/java/org/jclouds/atmos/AtmosClientLiveTest.java @@ -239,19 +239,19 @@ public class AtmosClientLiveTest extends BaseBlobStoreIntegrationTest { private static void verifyHeadObject(AtmosClient connection, String path, String metadataValue) throws InterruptedException, ExecutionException, TimeoutException, IOException { AtmosObject getBlob = connection.headFile(path); - assertEquals(Strings2.toStringAndClose(getBlob.getPayload().getInput()), ""); + assertEquals(Strings2.toString(getBlob.getPayload()), ""); verifyMetadata(metadataValue, getBlob); } private static void verifyObject(AtmosClient connection, String path, String compare, String metadataValue) throws InterruptedException, ExecutionException, TimeoutException, IOException { AtmosObject getBlob = connection.readFile(path); - assertEquals(Strings2.toStringAndClose(getBlob.getPayload().getInput()), compare); + assertEquals(Strings2.toString(getBlob.getPayload()), compare); verifyMetadata(metadataValue, getBlob); } private static void verifyMetadata(String metadataValue, AtmosObject getBlob) { - assertEquals(getBlob.getContentMetadata().getContentLength(), new Long(16)); + assertEquals(getBlob.getContentMetadata().getContentLength(), Long.valueOf(16)); assert getBlob.getContentMetadata().getContentType().startsWith("text/plain"); assertEquals(getBlob.getUserMetadata().getMetadata().get("Metadata"), metadataValue); SystemMetadata md = getBlob.getSystemMetadata(); diff --git a/apis/atmos/src/test/java/org/jclouds/atmos/internal/StubAtmosAsyncClient.java b/apis/atmos/src/test/java/org/jclouds/atmos/internal/StubAtmosAsyncClient.java index 7e6762270a..c4bd2c02a4 100644 --- a/apis/atmos/src/test/java/org/jclouds/atmos/internal/StubAtmosAsyncClient.java +++ b/apis/atmos/src/test/java/org/jclouds/atmos/internal/StubAtmosAsyncClient.java @@ -43,7 +43,7 @@ import org.jclouds.atmos.domain.SystemMetadata; import org.jclouds.atmos.domain.UserMetadata; import org.jclouds.atmos.options.ListOptions; import org.jclouds.atmos.options.PutOptions; -import org.jclouds.blobstore.TransientAsyncBlobStore; +import org.jclouds.blobstore.LocalAsyncBlobStore; import org.jclouds.blobstore.domain.Blob; import org.jclouds.blobstore.domain.BlobMetadata; import org.jclouds.blobstore.functions.HttpGetOptionsListToGetOptions; @@ -61,7 +61,7 @@ import com.google.common.util.concurrent.ListenableFuture; */ public class StubAtmosAsyncClient implements AtmosAsyncClient { private final HttpGetOptionsListToGetOptions httpGetOptionsConverter; - private final TransientAsyncBlobStore blobStore; + private final LocalAsyncBlobStore blobStore; private final AtmosObject.Factory objectProvider; private final ObjectToBlob object2Blob; private final BlobToObject blob2Object; @@ -71,7 +71,7 @@ public class StubAtmosAsyncClient implements AtmosAsyncClient { private final ExecutorService service; @Inject - private StubAtmosAsyncClient(TransientAsyncBlobStore blobStore, AtmosObject.Factory objectProvider, + private StubAtmosAsyncClient(LocalAsyncBlobStore blobStore, AtmosObject.Factory objectProvider, HttpGetOptionsListToGetOptions httpGetOptionsConverter, ObjectToBlob object2Blob, BlobToObject blob2Object, BlobMetadataToObject blob2ObjectInfo, ListOptionsToBlobStoreListOptions container2ContainerListOptions, @Named(Constants.PROPERTY_USER_THREADS) ExecutorService service, diff --git a/apis/cloudloadbalancers/src/main/java/org/jclouds/cloudloadbalancers/handlers/ParseCloudLoadBalancersErrorFromHttpResponse.java b/apis/cloudloadbalancers/src/main/java/org/jclouds/cloudloadbalancers/handlers/ParseCloudLoadBalancersErrorFromHttpResponse.java index 52dfbd2ff1..e494bb657f 100644 --- a/apis/cloudloadbalancers/src/main/java/org/jclouds/cloudloadbalancers/handlers/ParseCloudLoadBalancersErrorFromHttpResponse.java +++ b/apis/cloudloadbalancers/src/main/java/org/jclouds/cloudloadbalancers/handlers/ParseCloudLoadBalancersErrorFromHttpResponse.java @@ -85,7 +85,7 @@ public class ParseCloudLoadBalancersErrorFromHttpResponse implements HttpErrorHa String parseErrorFromContentOrNull(HttpCommand command, HttpResponse response) { if (response.getPayload() != null) { try { - return Strings2.toStringAndClose(response.getPayload().getInput()); + return Strings2.toString(response.getPayload()); } catch (IOException e) { logger.warn(e, "exception reading error from response", response); } diff --git a/apis/cloudloadbalancers/src/test/java/org/jclouds/cloudloadbalancers/features/LoadBalancerClientLiveTest.java b/apis/cloudloadbalancers/src/test/java/org/jclouds/cloudloadbalancers/features/LoadBalancerClientLiveTest.java index 2b672161cb..3cd80da8f8 100644 --- a/apis/cloudloadbalancers/src/test/java/org/jclouds/cloudloadbalancers/features/LoadBalancerClientLiveTest.java +++ b/apis/cloudloadbalancers/src/test/java/org/jclouds/cloudloadbalancers/features/LoadBalancerClientLiveTest.java @@ -136,7 +136,7 @@ public class LoadBalancerClientLiveTest extends BaseCloudLoadBalancersClientLive assertEquals(lb.getRegion(), region); assertEquals(lb.getName(), name); assertEquals(lb.getProtocol(), "HTTP"); - assertEquals(lb.getPort(), new Integer(80)); + assertEquals(lb.getPort(), Integer.valueOf(80)); assertEquals(Iterables.get(lb.getVirtualIPs(), 0).getType(), Type.PUBLIC); } diff --git a/apis/cloudservers/src/main/java/org/jclouds/cloudservers/handlers/ParseCloudServersErrorFromHttpResponse.java b/apis/cloudservers/src/main/java/org/jclouds/cloudservers/handlers/ParseCloudServersErrorFromHttpResponse.java index 9fdaaa2576..6675d84d0c 100644 --- a/apis/cloudservers/src/main/java/org/jclouds/cloudservers/handlers/ParseCloudServersErrorFromHttpResponse.java +++ b/apis/cloudservers/src/main/java/org/jclouds/cloudservers/handlers/ParseCloudServersErrorFromHttpResponse.java @@ -85,7 +85,7 @@ public class ParseCloudServersErrorFromHttpResponse implements HttpErrorHandler String parseErrorFromContentOrNull(HttpCommand command, HttpResponse response) { if (response.getPayload() != null) { try { - return Strings2.toStringAndClose(response.getPayload().getInput()); + return Strings2.toString(response.getPayload()); } catch (IOException e) { logger.warn(e, "exception reading error from response", response); } diff --git a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/CloudServersClientLiveTest.java b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/CloudServersClientLiveTest.java index 453db3bc55..0b4457ebf7 100644 --- a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/CloudServersClientLiveTest.java +++ b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/CloudServersClientLiveTest.java @@ -344,8 +344,8 @@ public class CloudServersClientLiveTest extends BaseComputeServiceContextLiveTes assertNotNull(server.getHostId()); assertEquals(server.getStatus(), ServerStatus.ACTIVE); assert server.getProgress() >= 0 : "newDetails.getProgress()" + server.getProgress(); - assertEquals(new Integer(14362), server.getImageId()); - assertEquals(new Integer(1), server.getFlavorId()); + assertEquals(Integer.valueOf(14362), server.getImageId()); + assertEquals(Integer.valueOf(1), server.getFlavorId()); assertNotNull(server.getAddresses()); // listAddresses tests.. assertEquals(client.getAddresses(serverId), server.getAddresses()); @@ -383,7 +383,7 @@ public class CloudServersClientLiveTest extends BaseComputeServiceContextLiveTes try { client.connect(); Payload etcPasswd = client.get("/etc/jclouds.txt"); - String etcPasswdContents = Strings2.toStringAndClose(etcPasswd.getInput()); + String etcPasswdContents = Strings2.toString(etcPasswd); assertEquals("rackspace", etcPasswdContents.trim()); } finally { if (client != null) @@ -445,7 +445,7 @@ public class CloudServersClientLiveTest extends BaseComputeServiceContextLiveTes blockUntilServerActive(serverId2); assertIpConfigured(server, adminPass2); assert server.getAddresses().getPublicAddresses().contains(ip) : server.getAddresses() + " doesn't contain " + ip; - assertEquals(server.getSharedIpGroupId(), new Integer(sharedIpGroupId)); + assertEquals(server.getSharedIpGroupId(), Integer.valueOf(sharedIpGroupId)); } private void assertIpConfigured(Server server, String password) { @@ -518,7 +518,7 @@ public class CloudServersClientLiveTest extends BaseComputeServiceContextLiveTes public void testCreateImage() throws Exception { Image image = client.createImageFromServer("hoofie", serverId); assertEquals("hoofie", image.getName()); - assertEquals(new Integer(serverId), image.getServerId()); + assertEquals(Integer.valueOf(serverId), image.getServerId()); imageId = image.getId(); blockUntilImageActive(imageId); } @@ -528,7 +528,7 @@ public class CloudServersClientLiveTest extends BaseComputeServiceContextLiveTes client.rebuildServer(serverId, new RebuildServerOptions().withImage(imageId)); blockUntilServerActive(serverId); // issue Web Hosting #119580 imageId comes back incorrect after rebuild - assert !new Integer(imageId).equals(client.getServer(serverId).getImageId()); + assert !Integer.valueOf(imageId).equals(client.getServer(serverId).getImageId()); } @Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "testRebuildServer") @@ -549,7 +549,7 @@ public class CloudServersClientLiveTest extends BaseComputeServiceContextLiveTes blockUntilServerVerifyResize(serverId); client.revertResizeServer(serverId); blockUntilServerActive(serverId); - assertEquals(new Integer(1), client.getServer(serverId).getFlavorId()); + assertEquals(Integer.valueOf(1), client.getServer(serverId).getFlavorId()); } @Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "testRebootSoft") @@ -558,7 +558,7 @@ public class CloudServersClientLiveTest extends BaseComputeServiceContextLiveTes blockUntilServerVerifyResize(serverId2); client.confirmResizeServer(serverId2); blockUntilServerActive(serverId2); - assertEquals(new Integer(2), client.getServer(serverId2).getFlavorId()); + assertEquals(Integer.valueOf(2), client.getServer(serverId2).getFlavorId()); } @Test(timeOut = 10 * 60 * 1000, dependsOnMethods = { "testRebootSoft", "testRevertResize", "testConfirmResize" }) diff --git a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseFlavorListFromJsonResponseTest.java b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseFlavorListFromJsonResponseTest.java index 85884d2eee..2f6b839a44 100644 --- a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseFlavorListFromJsonResponseTest.java +++ b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseFlavorListFromJsonResponseTest.java @@ -67,13 +67,13 @@ public class ParseFlavorListFromJsonResponseTest { List response = parser.apply(HttpResponse.builder().statusCode(200).message("ok").payload(is).build()); assertEquals(response.get(0).getId(), 1); assertEquals(response.get(0).getName(), "256 MB Server"); - assertEquals(response.get(0).getDisk(), new Integer(10)); - assertEquals(response.get(0).getRam(), new Integer(256)); + assertEquals(response.get(0).getDisk(), Integer.valueOf(10)); + assertEquals(response.get(0).getRam(), Integer.valueOf(256)); assertEquals(response.get(1).getId(), 2); assertEquals(response.get(1).getName(), "512 MB Server"); - assertEquals(response.get(1).getDisk(), new Integer(20)); - assertEquals(response.get(1).getRam(), new Integer(512)); + assertEquals(response.get(1).getDisk(), Integer.valueOf(20)); + assertEquals(response.get(1).getRam(), Integer.valueOf(512)); } diff --git a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseImageFromJsonResponseTest.java b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseImageFromJsonResponseTest.java index 66598adb6a..f5d95abc07 100644 --- a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseImageFromJsonResponseTest.java +++ b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseImageFromJsonResponseTest.java @@ -63,8 +63,8 @@ public class ParseImageFromJsonResponseTest { assertEquals(response.getId(), 2); assertEquals(response.getName(), "CentOS 5.2"); assertEquals(response.getCreated(), dateService.iso8601SecondsDateParse("2010-08-10T12:00:00Z")); - assertEquals(response.getProgress(), new Integer(80)); - assertEquals(response.getServerId(), new Integer(12)); + assertEquals(response.getProgress(), Integer.valueOf(80)); + assertEquals(response.getServerId(), Integer.valueOf(12)); assertEquals(response.getStatus(), ImageStatus.SAVING); assertEquals(response.getUpdated(), dateService.iso8601SecondsDateParse(("2010-10-10T12:00:00Z"))); diff --git a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseImageListFromJsonResponseTest.java b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseImageListFromJsonResponseTest.java index 89f716f1b3..4eb3c4a4da 100644 --- a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseImageListFromJsonResponseTest.java +++ b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseImageListFromJsonResponseTest.java @@ -91,8 +91,8 @@ public class ParseImageListFromJsonResponseTest { assertEquals(response.get(1).getName(), "My Server Backup"); assertEquals(response.get(1).getCreated(), dateService.iso8601SecondsDateParse("2009-07-07T09:56:16-05:00")); ; - assertEquals(response.get(1).getProgress(), new Integer(80)); - assertEquals(response.get(1).getServerId(), new Integer(12)); + assertEquals(response.get(1).getProgress(), Integer.valueOf(80)); + assertEquals(response.get(1).getServerId(), Integer.valueOf(12)); assertEquals(response.get(1).getStatus(), ImageStatus.SAVING); assertEquals(response.get(1).getUpdated(), dateService.iso8601SecondsDateParse("2010-10-10T12:00:00Z")); } diff --git a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseServerFromJsonResponseTest.java b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseServerFromJsonResponseTest.java index fbdaf1ba7e..f3983d747f 100644 --- a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseServerFromJsonResponseTest.java +++ b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseServerFromJsonResponseTest.java @@ -52,11 +52,11 @@ public class ParseServerFromJsonResponseTest { assertEquals(response.getId(), 1234); assertEquals(response.getName(), "sample-server"); - assertEquals(response.getImageId(), new Integer(2)); - assertEquals(response.getFlavorId(), new Integer(1)); + assertEquals(response.getImageId(), Integer.valueOf(2)); + assertEquals(response.getFlavorId(), Integer.valueOf(1)); assertEquals(response.getHostId(), "e4d909c290d0fb1ca068ffaddf22cbd0"); assertEquals(response.getStatus(), ServerStatus.BUILD); - assertEquals(response.getProgress(), new Integer(60)); + assertEquals(response.getProgress(), Integer.valueOf(60)); List publicAddresses = Lists.newArrayList("67.23.10.132", "67.23.10.131"); List privateAddresses = Lists.newArrayList("10.176.42.16"); Addresses addresses1 = new Addresses(); diff --git a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseServerListFromJsonResponseTest.java b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseServerListFromJsonResponseTest.java index de4a9898f3..8733cab51e 100644 --- a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseServerListFromJsonResponseTest.java +++ b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/functions/ParseServerListFromJsonResponseTest.java @@ -73,11 +73,11 @@ public class ParseServerListFromJsonResponseTest { assertEquals(response.get(0).getId(), 1234); assertEquals(response.get(0).getName(), "sample-server"); - assertEquals(response.get(0).getImageId(), new Integer(2)); - assertEquals(response.get(0).getFlavorId(), new Integer(1)); + assertEquals(response.get(0).getImageId(), Integer.valueOf(2)); + assertEquals(response.get(0).getFlavorId(), Integer.valueOf(1)); assertEquals(response.get(0).getHostId(), "e4d909c290d0fb1ca068ffaddf22cbd0"); assertEquals(response.get(0).getStatus(), ServerStatus.BUILD); - assertEquals(response.get(0).getProgress(), new Integer(60)); + assertEquals(response.get(0).getProgress(), Integer.valueOf(60)); List publicAddresses = Lists.newArrayList("67.23.10.132", "67.23.10.131"); List privateAddresses = Lists.newArrayList("10.176.42.16"); Addresses addresses1 = new Addresses(); @@ -87,8 +87,8 @@ public class ParseServerListFromJsonResponseTest { assertEquals(response.get(0).getMetadata(), ImmutableMap.of("Server Label", "Web Head 1", "Image Version", "2.1")); assertEquals(response.get(1).getId(), 5678); assertEquals(response.get(1).getName(), "sample-server2"); - assertEquals(response.get(1).getImageId(), new Integer(2)); - assertEquals(response.get(1).getFlavorId(), new Integer(1)); + assertEquals(response.get(1).getImageId(), Integer.valueOf(2)); + assertEquals(response.get(1).getFlavorId(), Integer.valueOf(1)); assertEquals(response.get(1).getHostId(), "9e107d9d372bb6826bd81d3542a419d6"); assertEquals(response.get(1).getStatus(), ServerStatus.ACTIVE); assertEquals(response.get(1).getProgress(), null); diff --git a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToDriveInfo.java b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToDriveInfo.java index 9f9c3718a5..ee3d5296a1 100644 --- a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToDriveInfo.java +++ b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToDriveInfo.java @@ -69,7 +69,7 @@ public class MapToDriveInfo implements Function, DriveInfo> if (from.containsKey("readers")) builder.readers(Splitter.on(' ').split(from.get("readers"))); if (from.containsKey("size")) - builder.size(new Long(from.get("size"))); + builder.size(Long.valueOf(from.get("size"))); Map metadata = Maps.newLinkedHashMap(); for (Entry entry : from.entrySet()) { if (entry.getKey().startsWith("user:")) @@ -78,7 +78,7 @@ public class MapToDriveInfo implements Function, DriveInfo> if (from.containsKey("use")) builder.use(Splitter.on(' ').split(from.get("use"))); if (from.containsKey("bits")) - builder.bits(new Integer(from.get("bits"))); + builder.bits(Integer.valueOf(from.get("bits"))); if (from.containsKey("url")) builder.url(URI.create(from.get("url"))); builder.encryptionKey(from.get("encryption:key")); @@ -88,9 +88,9 @@ public class MapToDriveInfo implements Function, DriveInfo> if (from.containsKey("drive_type")) builder.driveType(Splitter.on(',').split(from.get("drive_type"))); if (from.containsKey("autoexpanding")) - builder.autoexpanding(new Boolean(from.get("autoexpanding"))); + builder.autoexpanding(Boolean.valueOf(from.get("autoexpanding"))); if (from.containsKey("free")) - builder.free(new Boolean(from.get("free"))); + builder.free(Boolean.valueOf(from.get("free"))); if (from.containsKey("type")) builder.type(DriveType.fromValue(from.get("type"))); try { @@ -104,13 +104,13 @@ public class MapToDriveInfo implements Function, DriveInfo> protected DriveMetrics buildMetrics(Map from) { DriveMetrics.Builder metricsBuilder = new DriveMetrics.Builder(); if (from.containsKey("read:bytes")) - metricsBuilder.readBytes(new Long(from.get("read:bytes"))); + metricsBuilder.readBytes(Long.valueOf(from.get("read:bytes"))); if (from.containsKey("read:requests")) - metricsBuilder.readRequests(new Long(from.get("read:requests"))); + metricsBuilder.readRequests(Long.valueOf(from.get("read:requests"))); if (from.containsKey("write:bytes")) - metricsBuilder.writeBytes(new Long(from.get("write:bytes"))); + metricsBuilder.writeBytes(Long.valueOf(from.get("write:bytes"))); if (from.containsKey("write:requests")) - metricsBuilder.writeRequests(new Long(from.get("write:requests"))); + metricsBuilder.writeRequests(Long.valueOf(from.get("write:requests"))); return metricsBuilder.build(); } } \ No newline at end of file diff --git a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToDriveMetrics.java b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToDriveMetrics.java index 8aff9137e4..8ab6bdcb2a 100644 --- a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToDriveMetrics.java +++ b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToDriveMetrics.java @@ -74,13 +74,13 @@ public class MapToDriveMetrics implements Function, Map from) { DriveMetrics.Builder builder = new DriveMetrics.Builder(); if (from.containsKey(key + ":read:bytes")) - builder.readBytes(new Long(from.get(key + ":read:bytes"))); + builder.readBytes(Long.valueOf(from.get(key + ":read:bytes"))); if (from.containsKey(key + ":read:requests")) - builder.readRequests(new Long(from.get(key + ":read:requests"))); + builder.readRequests(Long.valueOf(from.get(key + ":read:requests"))); if (from.containsKey(key + ":write:bytes")) - builder.writeBytes(new Long(from.get(key + ":write:bytes"))); + builder.writeBytes(Long.valueOf(from.get(key + ":write:bytes"))); if (from.containsKey(key + ":write:requests")) - builder.writeRequests(new Long(from.get(key + ":write:requests"))); + builder.writeRequests(Long.valueOf(from.get(key + ":write:requests"))); return builder.build(); } } \ No newline at end of file diff --git a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToServerInfo.java b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToServerInfo.java index 3359518f7b..859783a86d 100644 --- a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToServerInfo.java +++ b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToServerInfo.java @@ -68,12 +68,12 @@ public class MapToServerInfo implements Function, ServerInfo if (from.containsKey("status")) builder.status(ServerStatus.fromValue(from.get("status"))); if (from.containsKey("smp") && !"auto".equals(from.get("smp"))) - builder.smp(new Integer(from.get("smp"))); + builder.smp(Integer.valueOf(from.get("smp"))); builder.cpu(Integer.parseInt(from.get("cpu"))); builder.mem(Integer.parseInt(from.get("mem"))); builder.user(from.get("user")); if (from.containsKey("started")) - builder.started(new Date(new Long(from.get("started")))); + builder.started(new Date(Long.valueOf(from.get("started")))); builder.uuid(from.get("server")); builder.vnc(new VNC(from.get("vnc:ip"), from.get("vnc:password"), from.containsKey("vnc:tls") && Boolean.valueOf(from.get("vnc:tls")))); diff --git a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToServerMetrics.java b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToServerMetrics.java index c74a0deba3..b4375cadb2 100644 --- a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToServerMetrics.java +++ b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/functions/MapToServerMetrics.java @@ -44,13 +44,13 @@ public class MapToServerMetrics implements Function, ServerM public ServerMetrics apply(Map from) { ServerMetrics.Builder metricsBuilder = new ServerMetrics.Builder(); if (from.containsKey("tx:packets")) - metricsBuilder.txPackets(new Long(from.get("tx:packets"))); + metricsBuilder.txPackets(Long.valueOf(from.get("tx:packets"))); if (from.containsKey("tx")) - metricsBuilder.tx(new Long(from.get("tx"))); + metricsBuilder.tx(Long.valueOf(from.get("tx"))); if (from.containsKey("rx:packets")) - metricsBuilder.rxPackets(new Long(from.get("rx:packets"))); + metricsBuilder.rxPackets(Long.valueOf(from.get("rx:packets"))); if (from.containsKey("rx")) - metricsBuilder.rx(new Long(from.get("rx"))); + metricsBuilder.rx(Long.valueOf(from.get("rx"))); metricsBuilder.driveMetrics(mapToDriveMetrics.apply(from)); ServerMetrics metrics = metricsBuilder.build(); diff --git a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/handlers/CloudSigmaErrorHandler.java b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/handlers/CloudSigmaErrorHandler.java index 7c784098a9..8c7f999f04 100644 --- a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/handlers/CloudSigmaErrorHandler.java +++ b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/handlers/CloudSigmaErrorHandler.java @@ -94,7 +94,7 @@ public class CloudSigmaErrorHandler implements HttpErrorHandler { if (response.getPayload() == null) return null; try { - return Strings2.toStringAndClose(response.getPayload().getInput()); + return Strings2.toString(response.getPayload()); } catch (IOException e) { throw new RuntimeException(e); } finally { diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Account.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Account.java index e96711538d..c592cdf601 100644 --- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Account.java +++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Account.java @@ -103,7 +103,7 @@ public class Account extends ForwardingSet { } public static Type fromValue(String type) { - Integer code = new Integer(checkNotNull(type, "type")); + Integer code = Integer.valueOf(checkNotNull(type, "type")); return INDEX.containsKey(code) ? INDEX.get(code) : UNRECOGNIZED; } @@ -473,7 +473,7 @@ public class Account extends ForwardingSet { } private static Long toLongNullIfUnlimited(String in) { - return in == null || "Unlimited".equals(in) ? null : new Long(in); + return in == null || "Unlimited".equals(in) ? null : Long.valueOf(in); } protected Account(String id, @Nullable Account.Type type, @Nullable String networkDomain, @Nullable String domain, diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Capacity.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Capacity.java index 712f63ef6f..e975e01026 100644 --- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Capacity.java +++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Capacity.java @@ -75,7 +75,7 @@ public class Capacity implements Comparable { } public static Type fromValue(String type) { - Integer code = new Integer(checkNotNull(type, "type")); + Integer code = Integer.valueOf(checkNotNull(type, "type")); return INDEX.containsKey(code) ? INDEX.get(code) : UNRECOGNIZED; } } diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/ResourceLimit.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/ResourceLimit.java index 6066556f3b..2c6fe0e7b5 100644 --- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/ResourceLimit.java +++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/ResourceLimit.java @@ -91,7 +91,7 @@ public class ResourceLimit { } public static ResourceType fromValue(String resourceType) { - Integer code = new Integer(checkNotNull(resourceType, "resourcetype")); + Integer code = Integer.valueOf(checkNotNull(resourceType, "resourcetype")); return INDEX.containsKey(code) ? INDEX.get(code) : UNRECOGNIZED; } } diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/UsageRecord.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/UsageRecord.java index 8b6f192cad..6c07a6b447 100644 --- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/UsageRecord.java +++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/UsageRecord.java @@ -80,7 +80,7 @@ public class UsageRecord { } public static UsageType fromValue(String usageType) { - Integer code = new Integer(checkNotNull(usageType, "usageType")); + Integer code = Integer.valueOf(checkNotNull(usageType, "usageType")); return INDEX.containsKey(code) ? INDEX.get(code) : UNRECOGNIZED; } diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/VirtualMachine.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/VirtualMachine.java index 675114c577..5e5fee9a57 100644 --- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/VirtualMachine.java +++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/VirtualMachine.java @@ -588,7 +588,7 @@ public class VirtualMachine { @Nullable VirtualMachine.State state, @Nullable String templateDisplayText, @Nullable String templateId, @Nullable String templateName, @Nullable String zoneId, @Nullable String zoneName, @Nullable Set nics, @Nullable String hypervisor, @Nullable Set securityGroups) { - Preconditions.checkArgument(Strings.isNullOrEmpty(cpuUsed) || cpuUsed.matches("^[0-9\\.]+%$"), "cpuUsed value should be a decimal number followed by %"); + Preconditions.checkArgument(Strings.isNullOrEmpty(cpuUsed) || cpuUsed.matches("^[0-9\\.\\-]+%$"), "cpuUsed value should be a decimal number followed by %"); this.id = checkNotNull(id, "id"); this.account = account; this.cpuCount = cpuCount; diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Volume.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Volume.java index e7e73bae39..e96a10f721 100644 --- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Volume.java +++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/domain/Volume.java @@ -108,7 +108,7 @@ public class Volume { } public static Type fromValue(String resourceType) { - Integer code = new Integer(checkNotNull(resourceType, "resourcetype")); + Integer code = Integer.valueOf(checkNotNull(resourceType, "resourcetype")); return INDEX.containsKey(code) ? INDEX.get(code) : UNRECOGNIZED; } diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/handlers/CloudStackErrorHandler.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/handlers/CloudStackErrorHandler.java index 7c051ec7af..b2c7e984f9 100644 --- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/handlers/CloudStackErrorHandler.java +++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/handlers/CloudStackErrorHandler.java @@ -92,7 +92,7 @@ public class CloudStackErrorHandler implements HttpErrorHandler { if (response.getPayload() == null) return null; try { - return Strings2.toStringAndClose(response.getPayload().getInput()); + return Strings2.toString(response.getPayload()); } catch (IOException e) { throw new RuntimeException(e); } finally { diff --git a/apis/deltacloud/src/main/java/org/jclouds/deltacloud/handlers/DeltacloudErrorHandler.java b/apis/deltacloud/src/main/java/org/jclouds/deltacloud/handlers/DeltacloudErrorHandler.java index 011bc0f042..73b5b7df85 100644 --- a/apis/deltacloud/src/main/java/org/jclouds/deltacloud/handlers/DeltacloudErrorHandler.java +++ b/apis/deltacloud/src/main/java/org/jclouds/deltacloud/handlers/DeltacloudErrorHandler.java @@ -87,7 +87,7 @@ public class DeltacloudErrorHandler implements HttpErrorHandler { if (response.getPayload() == null) return null; try { - return Strings2.toStringAndClose(response.getPayload().getInput()); + return Strings2.toString(response.getPayload()); } catch (IOException e) { throw new RuntimeException(e); } finally { diff --git a/apis/deltacloud/src/main/java/org/jclouds/deltacloud/xml/HardwarePropertyHandler.java b/apis/deltacloud/src/main/java/org/jclouds/deltacloud/xml/HardwarePropertyHandler.java index c7c392e82f..dba96e3f2d 100644 --- a/apis/deltacloud/src/main/java/org/jclouds/deltacloud/xml/HardwarePropertyHandler.java +++ b/apis/deltacloud/src/main/java/org/jclouds/deltacloud/xml/HardwarePropertyHandler.java @@ -87,7 +87,7 @@ public class HardwarePropertyHandler extends ParseSax.HandlerWithResult of( - new FixedHardwareProperty("cpu", "count", new Long(4)), - new RangeHardwareProperty("memory", "MB", new Long(12288), new HardwareParameter(URI + new FixedHardwareProperty("cpu", "count", Long.valueOf(4)), + new RangeHardwareProperty("memory", "MB", Long.valueOf(12288), new HardwareParameter(URI .create("http://localhost:3001/api/instances"), "post", "hwp_memory", "create"), - new Long(12288), new Long(32768)), - new EnumHardwareProperty("storage", "GB", new Long(1024), new HardwareParameter(URI + Long.valueOf(12288), Long.valueOf(32768)), + new EnumHardwareProperty("storage", "GB", Long.valueOf(1024), new HardwareParameter(URI .create("http://localhost:3001/api/instances"), "post", "hwp_storage", "create"), - ImmutableSet. of(new Long(1024), new Long(2048), new Long(4096))), + ImmutableSet. of(Long.valueOf(1024), Long.valueOf(2048), Long.valueOf(4096))), new FixedHardwareProperty("architecture", "label", "x86_64")) ); assertEquals(parseHardwareProfile(), expects); diff --git a/apis/deltacloud/src/test/java/org/jclouds/deltacloud/xml/HardwareProfilesHandlerTest.java b/apis/deltacloud/src/test/java/org/jclouds/deltacloud/xml/HardwareProfilesHandlerTest.java index 25eab51cd5..a3cd0b7f07 100644 --- a/apis/deltacloud/src/test/java/org/jclouds/deltacloud/xml/HardwareProfilesHandlerTest.java +++ b/apis/deltacloud/src/test/java/org/jclouds/deltacloud/xml/HardwareProfilesHandlerTest.java @@ -50,27 +50,27 @@ public class HardwareProfilesHandlerTest extends BaseHandlerTest { Set expects = ImmutableSet.of( new HardwareProfile(URI.create("http://localhost:3001/api/hardware_profiles/m1-small"), "m1-small", "m1-small", ImmutableSet. of( - new FixedHardwareProperty("cpu", "count", new Long(1)), new FixedHardwareProperty("memory", - "MB", new Double(1740.8)), new FixedHardwareProperty("storage", "GB", new Long(160)), + new FixedHardwareProperty("cpu", "count", Long.valueOf(1)), new FixedHardwareProperty("memory", + "MB", new Double(1740.8)), new FixedHardwareProperty("storage", "GB", Long.valueOf(160)), new FixedHardwareProperty("architecture", "label", "i386"))), new HardwareProfile(URI.create("http://localhost:3001/api/hardware_profiles/m1-large"), "m1-large", "m1-large", ImmutableSet. of( - new FixedHardwareProperty("cpu", "count", new Long(2)), - new RangeHardwareProperty("memory", "MB", new Long(10240), new HardwareParameter(URI + new FixedHardwareProperty("cpu", "count", Long.valueOf(2)), + new RangeHardwareProperty("memory", "MB", Long.valueOf(10240), new HardwareParameter(URI .create("http://localhost:3001/api/instances"), "post", "hwp_memory", "create"), - new Double(7680.0), new Long(15360)), new EnumHardwareProperty("storage", "GB", new Long( + new Double(7680.0), Long.valueOf(15360)), new EnumHardwareProperty("storage", "GB", Long.valueOf( 850), new HardwareParameter(URI.create("http://localhost:3001/api/instances"), "post", - "hwp_storage", "create"), ImmutableSet. of(new Long(850), new Long(1024))), + "hwp_storage", "create"), ImmutableSet. of(Long.valueOf(850), Long.valueOf(1024))), new FixedHardwareProperty("architecture", "label", "x86_64"))), new HardwareProfile(URI.create("http://localhost:3001/api/hardware_profiles/m1-xlarge"), "m1-xlarge", "m1-xlarge", ImmutableSet. of( - new FixedHardwareProperty("cpu", "count", new Long(4)), - new RangeHardwareProperty("memory", "MB", new Long(12288), new HardwareParameter(URI + new FixedHardwareProperty("cpu", "count", Long.valueOf(4)), + new RangeHardwareProperty("memory", "MB", Long.valueOf(12288), new HardwareParameter(URI .create("http://localhost:3001/api/instances"), "post", "hwp_memory", "create"), - new Long(12288), new Long(32768)), - new EnumHardwareProperty("storage", "GB", new Long(1024), new HardwareParameter(URI + Long.valueOf(12288), Long.valueOf(32768)), + new EnumHardwareProperty("storage", "GB", Long.valueOf(1024), new HardwareParameter(URI .create("http://localhost:3001/api/instances"), "post", "hwp_storage", "create"), - ImmutableSet. of(new Long(1024), new Long(2048), new Long(4096))), + ImmutableSet. of(Long.valueOf(1024), Long.valueOf(2048), Long.valueOf(4096))), new FixedHardwareProperty("architecture", "label", "x86_64"))), new HardwareProfile(URI.create("http://localhost:3001/api/hardware_profiles/opaque"), "opaque", "opaque", ImmutableSet. of())); diff --git a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToDriveInfo.java b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToDriveInfo.java index effbd0744d..c72f9ba100 100644 --- a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToDriveInfo.java +++ b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToDriveInfo.java @@ -65,7 +65,7 @@ public class MapToDriveInfo implements Function, DriveInfo> if (from.containsKey("readers")) builder.readers(Splitter.on(' ').split(from.get("readers"))); if (from.containsKey("size")) - builder.size(new Long(from.get("size"))); + builder.size(Long.valueOf(from.get("size"))); Map metadata = Maps.newLinkedHashMap(); for (Entry entry : from.entrySet()) { if (entry.getKey().startsWith("user:")) @@ -83,13 +83,13 @@ public class MapToDriveInfo implements Function, DriveInfo> protected DriveMetrics buildMetrics(Map from) { DriveMetrics.Builder metricsBuilder = new DriveMetrics.Builder(); if (from.containsKey("read:bytes")) - metricsBuilder.readBytes(new Long(from.get("read:bytes"))); + metricsBuilder.readBytes(Long.valueOf(from.get("read:bytes"))); if (from.containsKey("read:requests")) - metricsBuilder.readRequests(new Long(from.get("read:requests"))); + metricsBuilder.readRequests(Long.valueOf(from.get("read:requests"))); if (from.containsKey("write:bytes")) - metricsBuilder.writeBytes(new Long(from.get("write:bytes"))); + metricsBuilder.writeBytes(Long.valueOf(from.get("write:bytes"))); if (from.containsKey("write:requests")) - metricsBuilder.writeRequests(new Long(from.get("write:requests"))); + metricsBuilder.writeRequests(Long.valueOf(from.get("write:requests"))); return metricsBuilder.build(); } } \ No newline at end of file diff --git a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToDriveMetrics.java b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToDriveMetrics.java index ba3071442d..6de7a9e77d 100644 --- a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToDriveMetrics.java +++ b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToDriveMetrics.java @@ -74,13 +74,13 @@ public class MapToDriveMetrics implements Function, Map from) { DriveMetrics.Builder builder = new DriveMetrics.Builder(); if (from.containsKey(key + ":read:bytes")) - builder.readBytes(new Long(from.get(key + ":read:bytes"))); + builder.readBytes(Long.valueOf(from.get(key + ":read:bytes"))); if (from.containsKey(key + ":read:requests")) - builder.readRequests(new Long(from.get(key + ":read:requests"))); + builder.readRequests(Long.valueOf(from.get(key + ":read:requests"))); if (from.containsKey(key + ":write:bytes")) - builder.writeBytes(new Long(from.get(key + ":write:bytes"))); + builder.writeBytes(Long.valueOf(from.get(key + ":write:bytes"))); if (from.containsKey(key + ":write:requests")) - builder.writeRequests(new Long(from.get(key + ":write:requests"))); + builder.writeRequests(Long.valueOf(from.get(key + ":write:requests"))); return builder.build(); } } \ No newline at end of file diff --git a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToServerInfo.java b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToServerInfo.java index 98b6f98667..e5307ab8b9 100644 --- a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToServerInfo.java +++ b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToServerInfo.java @@ -68,16 +68,16 @@ public class MapToServerInfo implements Function, ServerInfo if (from.containsKey("smp:cores")) { - builder.smp(new Integer(from.get("smp:cores"))); + builder.smp(Integer.valueOf(from.get("smp:cores"))); } else if (from.containsKey("smp") && !"auto".equals(from.get("smp"))) { - builder.smp(new Integer(from.get("smp"))); + builder.smp(Integer.valueOf(from.get("smp"))); } builder.cpu(Integer.parseInt(from.get("cpu"))); builder.mem(Integer.parseInt(from.get("mem"))); builder.user(from.get("user")); if (from.containsKey("started")) - builder.started(new Date(new Long(from.get("started")))); + builder.started(new Date(Long.valueOf(from.get("started")))); builder.uuid(from.get("server")); if (from.containsKey("boot")) builder.bootDeviceIds(Splitter.on(' ').split(from.get("boot"))); diff --git a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToServerMetrics.java b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToServerMetrics.java index a8b38b5cba..2c2ff6fded 100644 --- a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToServerMetrics.java +++ b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/functions/MapToServerMetrics.java @@ -44,13 +44,13 @@ public class MapToServerMetrics implements Function, ServerM public ServerMetrics apply(Map from) { ServerMetrics.Builder metricsBuilder = new ServerMetrics.Builder(); if (from.containsKey("tx:packets")) - metricsBuilder.txPackets(new Long(from.get("tx:packets"))); + metricsBuilder.txPackets(Long.valueOf(from.get("tx:packets"))); if (from.containsKey("tx")) - metricsBuilder.tx(new Long(from.get("tx"))); + metricsBuilder.tx(Long.valueOf(from.get("tx"))); if (from.containsKey("rx:packets")) - metricsBuilder.rxPackets(new Long(from.get("rx:packets"))); + metricsBuilder.rxPackets(Long.valueOf(from.get("rx:packets"))); if (from.containsKey("rx")) - metricsBuilder.rx(new Long(from.get("rx"))); + metricsBuilder.rx(Long.valueOf(from.get("rx"))); metricsBuilder.driveMetrics(mapToDriveMetrics.apply(from)); ServerMetrics metrics = metricsBuilder.build(); diff --git a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/handlers/ElasticStackErrorHandler.java b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/handlers/ElasticStackErrorHandler.java index b55bb320e9..4ebc6471e0 100644 --- a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/handlers/ElasticStackErrorHandler.java +++ b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/handlers/ElasticStackErrorHandler.java @@ -92,7 +92,7 @@ public class ElasticStackErrorHandler implements HttpErrorHandler { if (response.getPayload() == null) return null; try { - return Strings2.toStringAndClose(response.getPayload().getInput()); + return Strings2.toString(response.getPayload()); } catch (IOException e) { throw new RuntimeException(e); } finally { diff --git a/apis/elasticstack/src/test/java/org/jclouds/elasticstack/ElasticStackClientLiveTest.java b/apis/elasticstack/src/test/java/org/jclouds/elasticstack/ElasticStackClientLiveTest.java index 1eea1798ea..badcb39087 100644 --- a/apis/elasticstack/src/test/java/org/jclouds/elasticstack/ElasticStackClientLiveTest.java +++ b/apis/elasticstack/src/test/java/org/jclouds/elasticstack/ElasticStackClientLiveTest.java @@ -326,7 +326,7 @@ public class ElasticStackClientLiveTest public void testWeCanReadAndWriteToDrive() throws IOException { drive2 = client.createDrive(new CreateDriveRequest.Builder().name(prefix + "2").size(1 * 1024 * 1024l).build()); client.writeDrive(drive2.getUuid(), Payloads.newStringPayload("foo")); - assertEquals(Strings2.toStringAndClose(client.readDrive(drive2.getUuid(), 0, 3).getInput()), "foo"); + assertEquals(Strings2.toString(client.readDrive(drive2.getUuid(), 0, 3)), "foo"); } @Test(dependsOnMethods = "testWeCanReadAndWriteToDrive") @@ -341,7 +341,7 @@ public class ElasticStackClientLiveTest assert driveNotClaimed.apply(drive2) : client.getDriveInfo(drive2.getUuid()); System.err.println("after image; drive 2" + client.getDriveInfo(drive2.getUuid())); System.err.println("after image; drive 3" + client.getDriveInfo(drive3.getUuid())); - assertEquals(Strings2.toStringAndClose(client.readDrive(drive3.getUuid(), 0, 3).getInput()), "foo"); + assertEquals(Strings2.toString(client.readDrive(drive3.getUuid(), 0, 3)), "foo"); } finally { client.destroyDrive(drive2.getUuid()); client.destroyDrive(drive3.getUuid()); diff --git a/apis/filesystem/src/main/java/org/jclouds/filesystem/FilesystemBlobStore.java b/apis/filesystem/src/main/java/org/jclouds/filesystem/FilesystemBlobStore.java deleted file mode 100644 index e21c3c0c59..0000000000 --- a/apis/filesystem/src/main/java/org/jclouds/filesystem/FilesystemBlobStore.java +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Licensed to jclouds, Inc. (jclouds) under one or more - * contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. jclouds 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.jclouds.filesystem; - -import java.util.concurrent.TimeUnit; - -import org.jclouds.blobstore.BlobStore; -import org.jclouds.concurrent.Timeout; - -/** - * - * @author Alfredo "Rainbowbreeze" Morresi - */ -@Timeout(duration = 2, timeUnit = TimeUnit.MINUTES) public interface FilesystemBlobStore extends BlobStore { -} diff --git a/apis/filesystem/src/main/java/org/jclouds/filesystem/config/FilesystemBlobStoreContextModule.java b/apis/filesystem/src/main/java/org/jclouds/filesystem/config/FilesystemBlobStoreContextModule.java index 4560bd5156..1eb4079fcb 100644 --- a/apis/filesystem/src/main/java/org/jclouds/filesystem/config/FilesystemBlobStoreContextModule.java +++ b/apis/filesystem/src/main/java/org/jclouds/filesystem/config/FilesystemBlobStoreContextModule.java @@ -21,18 +21,18 @@ package org.jclouds.filesystem.config; import org.jclouds.blobstore.AsyncBlobStore; import org.jclouds.blobstore.BlobRequestSigner; import org.jclouds.blobstore.BlobStore; +import org.jclouds.blobstore.LocalAsyncBlobStore; +import org.jclouds.blobstore.LocalStorageStrategy; import org.jclouds.blobstore.TransientBlobRequestSigner; import org.jclouds.blobstore.attr.ConsistencyModel; import org.jclouds.blobstore.config.BlobStoreMapModule; import org.jclouds.blobstore.config.BlobStoreObjectModule; +import org.jclouds.blobstore.config.LocalBlobStore; import org.jclouds.blobstore.util.BlobUtils; -import org.jclouds.filesystem.FilesystemAsyncBlobStore; -import org.jclouds.filesystem.FilesystemBlobStore; import org.jclouds.filesystem.predicates.validators.FilesystemBlobKeyValidator; import org.jclouds.filesystem.predicates.validators.FilesystemContainerNameValidator; import org.jclouds.filesystem.predicates.validators.internal.FilesystemBlobKeyValidatorImpl; import org.jclouds.filesystem.predicates.validators.internal.FilesystemContainerNameValidatorImpl; -import org.jclouds.filesystem.strategy.FilesystemStorageStrategy; import org.jclouds.filesystem.strategy.internal.FilesystemStorageStrategyImpl; import org.jclouds.filesystem.util.internal.FileSystemBlobUtilsImpl; import org.jclouds.rest.config.BinderUtils; @@ -48,15 +48,15 @@ public class FilesystemBlobStoreContextModule extends AbstractModule { @Override protected void configure() { - bind(AsyncBlobStore.class).to(FilesystemAsyncBlobStore.class).asEagerSingleton(); + bind(AsyncBlobStore.class).to(LocalAsyncBlobStore.class).asEagerSingleton(); // forward all requests from TransientBlobStore to TransientAsyncBlobStore. needs above binding as cannot proxy a class - BinderUtils.bindClient(binder(), FilesystemBlobStore.class, AsyncBlobStore.class, ImmutableMap., Class>of()); - bind(BlobStore.class).to(FilesystemBlobStore.class); + BinderUtils.bindClient(binder(), LocalBlobStore.class, AsyncBlobStore.class, ImmutableMap., Class>of()); + bind(BlobStore.class).to(LocalBlobStore.class); install(new BlobStoreObjectModule()); install(new BlobStoreMapModule()); bind(ConsistencyModel.class).toInstance(ConsistencyModel.STRICT); - bind(FilesystemStorageStrategy.class).to(FilesystemStorageStrategyImpl.class); + bind(LocalStorageStrategy.class).to(FilesystemStorageStrategyImpl.class); bind(BlobUtils.class).to(FileSystemBlobUtilsImpl.class); bind(FilesystemBlobKeyValidator.class).to(FilesystemBlobKeyValidatorImpl.class); bind(FilesystemContainerNameValidator.class).to(FilesystemContainerNameValidatorImpl.class); diff --git a/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java b/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java index 918f9d21c2..c652dd7d62 100644 --- a/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java +++ b/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java @@ -35,15 +35,18 @@ import javax.inject.Provider; import org.apache.commons.io.FileUtils; import org.apache.commons.io.filefilter.DirectoryFileFilter; +import org.jclouds.blobstore.LocalStorageStrategy; import org.jclouds.blobstore.domain.Blob; import org.jclouds.blobstore.domain.BlobBuilder; import org.jclouds.blobstore.options.ListContainerOptions; +import org.jclouds.crypto.Crypto; import org.jclouds.crypto.CryptoStreams; +import org.jclouds.domain.Location; import org.jclouds.filesystem.predicates.validators.FilesystemBlobKeyValidator; import org.jclouds.filesystem.predicates.validators.FilesystemContainerNameValidator; import org.jclouds.filesystem.reference.FilesystemConstants; -import org.jclouds.filesystem.strategy.FilesystemStorageStrategy; import org.jclouds.io.Payload; +import org.jclouds.io.Payloads; import org.jclouds.logging.Logger; import org.jclouds.rest.annotations.ParamValidators; @@ -55,7 +58,7 @@ import com.google.common.io.Files; * * @author Alfredo "Rainbowbreeze" Morresi */ -public class FilesystemStorageStrategyImpl implements FilesystemStorageStrategy { +public class FilesystemStorageStrategyImpl implements LocalStorageStrategy { private static final String BACK_SLASH = "\\"; @@ -66,17 +69,20 @@ public class FilesystemStorageStrategyImpl implements FilesystemStorageStrategy protected final String baseDirectory; protected final FilesystemContainerNameValidator filesystemContainerNameValidator; protected final FilesystemBlobKeyValidator filesystemBlobKeyValidator; + private final Crypto crypto; @Inject protected FilesystemStorageStrategyImpl(Provider blobBuilders, @Named(FilesystemConstants.PROPERTY_BASEDIR) String baseDir, FilesystemContainerNameValidator filesystemContainerNameValidator, - FilesystemBlobKeyValidator filesystemBlobKeyValidator) { + FilesystemBlobKeyValidator filesystemBlobKeyValidator, + Crypto crypto) { this.blobBuilders = checkNotNull(blobBuilders, "filesystem storage strategy blobBuilders"); this.baseDirectory = checkNotNull(baseDir, "filesystem storage strategy base directory"); this.filesystemContainerNameValidator = checkNotNull(filesystemContainerNameValidator, "filesystem container name validator"); this.filesystemBlobKeyValidator = checkNotNull(filesystemBlobKeyValidator, "filesystem blob key validator"); + this.crypto = crypto; } @Override @@ -109,8 +115,14 @@ public class FilesystemStorageStrategyImpl implements FilesystemStorageStrategy return blob; } - @Override public boolean createContainer(String container) { + filesystemContainerNameValidator.validate(container); + return createContainerInLocation(container, null); + } + + @Override + public boolean createContainerInLocation(String container, Location location) { + // TODO: implement location logger.debug("Creating container %s", container); filesystemContainerNameValidator.validate(container); return createDirectoryWithResult(container, null); @@ -151,7 +163,6 @@ public class FilesystemStorageStrategyImpl implements FilesystemStorageStrategy } } - @Override public Blob newBlob(@ParamValidators({ FilesystemBlobKeyValidator.class }) String name) { filesystemBlobKeyValidator.validate(name); return blobBuilders.get().name(name).build(); @@ -195,7 +206,6 @@ public class FilesystemStorageStrategyImpl implements FilesystemStorageStrategy * @param blobKey * @return */ - @Override public File getFileForBlobKey(String container, String blobKey) { filesystemContainerNameValidator.validate(container); filesystemBlobKeyValidator.validate(blobKey); @@ -205,7 +215,7 @@ public class FilesystemStorageStrategyImpl implements FilesystemStorageStrategy } @Override - public void putBlob(final String containerName, final Blob blob) throws IOException { + public String putBlob(final String containerName, final Blob blob) throws IOException { String blobKey = blob.getMetadata().getName(); Payload payload = blob.getPayload(); filesystemContainerNameValidator.validate(containerName); @@ -220,6 +230,9 @@ public class FilesystemStorageStrategyImpl implements FilesystemStorageStrategy output = new FileOutputStream(outputFile); payload.writeTo(output); } + Payloads.calculateMD5(payload, crypto.md5()); + String eTag = CryptoStreams.hex(payload.getContentMetadata().getContentMD5()); + return eTag; } catch (IOException ex) { if (outputFile != null) { outputFile.delete(); @@ -263,16 +276,23 @@ public class FilesystemStorageStrategyImpl implements FilesystemStorageStrategy } @Override + public Location getLocation(final String containerName) { + return null; + } + + @Override + public String getSeparator() { + return File.separator; + } + public boolean directoryExists(String container, String directory) { return buildPathAndChecksIfDirectoryExists(container, directory); } - @Override public void createDirectory(String container, String directory) { createDirectoryWithResult(container, directory); } - @Override public void deleteDirectory(String container, String directory) { // create complete dir path String fullDirPath = buildPathStartingFromBaseDir(container, directory); @@ -284,7 +304,6 @@ public class FilesystemStorageStrategyImpl implements FilesystemStorageStrategy } } - @Override public long countBlobs(String container, ListContainerOptions options) { // TODO throw new UnsupportedOperationException("Not supported yet."); diff --git a/apis/filesystem/src/main/java/org/jclouds/filesystem/util/internal/FileSystemBlobUtilsImpl.java b/apis/filesystem/src/main/java/org/jclouds/filesystem/util/internal/FileSystemBlobUtilsImpl.java index b24a54db53..87ff1cdfdb 100644 --- a/apis/filesystem/src/main/java/org/jclouds/filesystem/util/internal/FileSystemBlobUtilsImpl.java +++ b/apis/filesystem/src/main/java/org/jclouds/filesystem/util/internal/FileSystemBlobUtilsImpl.java @@ -23,27 +23,28 @@ import static com.google.common.base.Preconditions.checkNotNull; import javax.inject.Provider; import org.jclouds.blobstore.AsyncBlobStore; +import org.jclouds.blobstore.LocalStorageStrategy; import org.jclouds.blobstore.domain.BlobBuilder; import org.jclouds.blobstore.options.ListContainerOptions; import org.jclouds.blobstore.util.BlobUtils; -import org.jclouds.filesystem.strategy.FilesystemStorageStrategy; +import org.jclouds.filesystem.strategy.internal.FilesystemStorageStrategyImpl; import com.google.inject.Inject; /** * Implements the {@link BlobUtils} interfaced and act as a bridge to - * {@link FilesystemStorageStrategy} when used inside {@link AsyncBlobStore} + * {@link LocalStorageStrategy} when used inside {@link AsyncBlobStore} * * @author Alfredo "Rainbowbreeze" Morresi */ public class FileSystemBlobUtilsImpl implements BlobUtils { - protected final FilesystemStorageStrategy storageStrategy; + protected final FilesystemStorageStrategyImpl storageStrategy; protected final Provider blobBuilders; @Inject - public FileSystemBlobUtilsImpl(FilesystemStorageStrategy storageStrategy, Provider blobBuilders) { - this.storageStrategy = checkNotNull(storageStrategy, "Filesystem Storage Strategy"); + public FileSystemBlobUtilsImpl(LocalStorageStrategy storageStrategy, Provider blobBuilders) { + this.storageStrategy = (FilesystemStorageStrategyImpl) checkNotNull(storageStrategy, "Filesystem Storage Strategy"); this.blobBuilders = checkNotNull(blobBuilders, "Filesystem blobBuilders"); } diff --git a/apis/filesystem/src/test/java/org/jclouds/filesystem/FilesystemAsyncBlobStoreTest.java b/apis/filesystem/src/test/java/org/jclouds/filesystem/FilesystemAsyncBlobStoreTest.java index aa6bbabcc0..7eeaad5ed3 100644 --- a/apis/filesystem/src/test/java/org/jclouds/filesystem/FilesystemAsyncBlobStoreTest.java +++ b/apis/filesystem/src/test/java/org/jclouds/filesystem/FilesystemAsyncBlobStoreTest.java @@ -656,7 +656,7 @@ public class FilesystemAsyncBlobStoreTest { assertEquals(metadata.getUserMetadata().size(), 0, "Wrong blob UserMetadata"); // metadata.getLastModified() File file = new File(TARGET_CONTAINER_NAME + File.separator + BLOB_KEY); - assertEquals(metadata.getContentMetadata().getContentLength(), new Long(file.length()), "Wrong blob size"); + assertEquals(metadata.getContentMetadata().getContentLength(), Long.valueOf(file.length()), "Wrong blob size"); } public void testDeleteContainer_NotExistingContainer() { diff --git a/apis/filesystem/src/test/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImplTest.java b/apis/filesystem/src/test/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImplTest.java index 69c6ce1a05..203cce78f5 100644 --- a/apis/filesystem/src/test/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImplTest.java +++ b/apis/filesystem/src/test/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImplTest.java @@ -42,7 +42,6 @@ import org.jclouds.blobstore.options.ListContainerOptions; import org.jclouds.encryption.internal.JCECrypto; import org.jclouds.filesystem.predicates.validators.internal.FilesystemBlobKeyValidatorImpl; import org.jclouds.filesystem.predicates.validators.internal.FilesystemContainerNameValidatorImpl; -import org.jclouds.filesystem.strategy.FilesystemStorageStrategy; import org.jclouds.filesystem.utils.TestUtils; import org.jclouds.io.payloads.FilePayload; import org.testng.annotations.AfterMethod; @@ -73,7 +72,7 @@ public class FilesystemStorageStrategyImplTest { System.setProperty(LOGGING_CONFIG_KEY, LOGGING_CONFIG_VALUE); } - private FilesystemStorageStrategy storageStrategy; + private FilesystemStorageStrategyImpl storageStrategy; @BeforeMethod protected void setUp() throws Exception { @@ -87,7 +86,7 @@ public class FilesystemStorageStrategyImplTest { } } - }, TestUtils.TARGET_BASE_DIR, new FilesystemContainerNameValidatorImpl(), new FilesystemBlobKeyValidatorImpl()); + }, TestUtils.TARGET_BASE_DIR, new FilesystemContainerNameValidatorImpl(), new FilesystemBlobKeyValidatorImpl(), new JCECrypto()); TestUtils.cleanDirectoryContent(TestUtils.TARGET_BASE_DIR); } @@ -409,12 +408,12 @@ public class FilesystemStorageStrategyImplTest { assertEquals(fileForPayload.getAbsolutePath(), fullPath + blobKey, "Wrong file path"); } - public void testGetFileForBlobKey_AbsolutePath() throws IOException { + public void testGetFileForBlobKey_AbsolutePath() throws Exception { String absoluteBasePath = (new File(getAbsoluteDirectory(), "basedir")).getAbsolutePath() + FS; String absoluteContainerPath = absoluteBasePath + CONTAINER_NAME + FS; // create storageStrategy with an absolute path - FilesystemStorageStrategy storageStrategyAbsolute = new FilesystemStorageStrategyImpl( + FilesystemStorageStrategyImpl storageStrategyAbsolute = new FilesystemStorageStrategyImpl( new Provider() { @Override public BlobBuilder get() { @@ -424,7 +423,7 @@ public class FilesystemStorageStrategyImplTest { return null; } } - }, absoluteBasePath, new FilesystemContainerNameValidatorImpl(), new FilesystemBlobKeyValidatorImpl()); + }, absoluteBasePath, new FilesystemContainerNameValidatorImpl(), new FilesystemBlobKeyValidatorImpl(), new JCECrypto()); TestUtils.cleanDirectoryContent(absoluteContainerPath); String blobKey; diff --git a/apis/nova/src/main/java/org/jclouds/openstack/nova/handlers/ParseNovaErrorFromHttpResponse.java b/apis/nova/src/main/java/org/jclouds/openstack/nova/handlers/ParseNovaErrorFromHttpResponse.java index 8f3d08322e..496d8328c8 100644 --- a/apis/nova/src/main/java/org/jclouds/openstack/nova/handlers/ParseNovaErrorFromHttpResponse.java +++ b/apis/nova/src/main/java/org/jclouds/openstack/nova/handlers/ParseNovaErrorFromHttpResponse.java @@ -85,7 +85,7 @@ public class ParseNovaErrorFromHttpResponse implements HttpErrorHandler { String parseErrorFromContentOrNull(HttpCommand command, HttpResponse response) { if (response.getPayload() != null) { try { - return Strings2.toStringAndClose(response.getPayload().getInput()); + return Strings2.toString(response.getPayload()); } catch (IOException e) { logger.warn(e, "exception reading error from response", response); } diff --git a/apis/nova/src/test/java/org/jclouds/openstack/nova/NovaClientLiveTest.java b/apis/nova/src/test/java/org/jclouds/openstack/nova/NovaClientLiveTest.java index 397ee7e907..bde2f8788f 100644 --- a/apis/nova/src/test/java/org/jclouds/openstack/nova/NovaClientLiveTest.java +++ b/apis/nova/src/test/java/org/jclouds/openstack/nova/NovaClientLiveTest.java @@ -264,8 +264,8 @@ public class NovaClientLiveTest extends BaseComputeServiceContextLiveTest { assertNotNull(server.getHostId()); assertEquals(server.getStatus(), ServerStatus.ACTIVE); assert server.getProgress() >= 0 : "newDetails.getProgress()" + server.getProgress(); - assertEquals(new Integer(14362), server.getImage()); - assertEquals(new Integer(1), server.getFlavor()); + assertEquals(Integer.valueOf(14362), server.getImage()); + assertEquals(Integer.valueOf(1), server.getFlavor()); assertNotNull(server.getAddresses()); // listAddresses tests.. assertEquals(client.getAddresses(serverId), server.getAddresses()); @@ -303,7 +303,7 @@ public class NovaClientLiveTest extends BaseComputeServiceContextLiveTest { try { client.connect(); Payload etcPasswd = client.get("/etc/jclouds.txt"); - String etcPasswdContents = Strings2.toStringAndClose(etcPasswd.getInput()); + String etcPasswdContents = Strings2.toString(etcPasswd); assertEquals("nova", etcPasswdContents.trim()); } finally { if (client != null) @@ -332,7 +332,7 @@ public class NovaClientLiveTest extends BaseComputeServiceContextLiveTest { public void testCreateImage() throws Exception { Image image = client.createImageFromServer("hoofie", serverId); assertEquals("hoofie", image.getName()); - assertEquals(new Integer(serverId), image.getServerRef()); + assertEquals(Integer.valueOf(serverId), image.getServerRef()); createdImageRef = image.getId()+""; blockUntilImageActive(createdImageRef); } @@ -341,7 +341,7 @@ public class NovaClientLiveTest extends BaseComputeServiceContextLiveTest { public void testRebuildServer() throws Exception { client.rebuildServer(serverId, new RebuildServerOptions().withImage(createdImageRef)); blockUntilServerActive(serverId); - assertEquals(new Integer(createdImageRef).intValue(),client.getServer(serverId).getImage().getId()); + assertEquals(Integer.valueOf(createdImageRef).intValue(),client.getServer(serverId).getImage().getId()); } @Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "testRebuildServer") @@ -362,7 +362,7 @@ public class NovaClientLiveTest extends BaseComputeServiceContextLiveTest { blockUntilServerVerifyResize(serverId); client.revertResizeServer(serverId); blockUntilServerActive(serverId); - assertEquals(new Integer(1), client.getServer(serverId).getFlavorRef()); + assertEquals(Integer.valueOf(1), client.getServer(serverId).getFlavorRef()); } @Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "testRebootSoft") @@ -371,7 +371,7 @@ public class NovaClientLiveTest extends BaseComputeServiceContextLiveTest { blockUntilServerVerifyResize(serverId2); client.confirmResizeServer(serverId2); blockUntilServerActive(serverId2); - assertEquals(new Integer(2), client.getServer(serverId2).getFlavorRef()); + assertEquals(Integer.valueOf(2), client.getServer(serverId2).getFlavorRef()); } @Test(timeOut = 10 * 60 * 1000, dependsOnMethods = { "testRebootSoft", "testRevertResize", "testConfirmResize" }) diff --git a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseImageFromJsonResponseTest.java b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseImageFromJsonResponseTest.java index 90db416d06..b127379861 100644 --- a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseImageFromJsonResponseTest.java +++ b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseImageFromJsonResponseTest.java @@ -64,7 +64,7 @@ public class ParseImageFromJsonResponseTest { assertEquals(response.getId(), 2); assertEquals(response.getName(), "CentOS 5.2"); assertEquals(response.getCreated(), dateService.iso8601SecondsDateParse("2010-08-10T12:00:00Z")); - assertEquals(response.getProgress(), new Integer(80)); + assertEquals(response.getProgress(), Integer.valueOf(80)); assertEquals(response.getStatus(), ImageStatus.SAVING); assertEquals(response.getUpdated(), dateService.iso8601SecondsDateParse(("2010-10-10T12:00:00Z"))); assertEquals(response.getServerRef(), "http://servers.api.openstack.org/v1.1/1234/servers/12"); diff --git a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseImageListFromJsonResponseTest.java b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseImageListFromJsonResponseTest.java index 5da9c57105..95233c2d2c 100644 --- a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseImageListFromJsonResponseTest.java +++ b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseImageListFromJsonResponseTest.java @@ -96,7 +96,7 @@ public class ParseImageListFromJsonResponseTest { assertEquals(response.get(1).getName(), "My Server Backup"); assertEquals(response.get(1).getCreated(), dateService.iso8601SecondsDateParse("2009-07-07T09:56:16Z")); - assertEquals(response.get(1).getProgress(), new Integer(80)); + assertEquals(response.get(1).getProgress(), Integer.valueOf(80)); assertEquals(response.get(1).getStatus(), ImageStatus.SAVING); assertEquals(response.get(1).getUpdated(), dateService.iso8601SecondsDateParse("2010-10-10T12:00:00Z")); assertEquals(response.get(1).getServerRef(), "http://servers.api.openstack.org/v1.1/1234/servers/12"); diff --git a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerFromJsonResponseDiabloTest.java b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerFromJsonResponseDiabloTest.java index 2d94c79498..baf95ccb25 100644 --- a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerFromJsonResponseDiabloTest.java +++ b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerFromJsonResponseDiabloTest.java @@ -64,7 +64,7 @@ public class ParseServerFromJsonResponseDiabloTest { assertEquals(response.getFlavor().getURI(), new URI("http://servers.api.openstack.org/1234/flavors/1")); assertEquals(response.getHostId(), "e4d909c290d0fb1ca068ffaddf22cbd0"); assertEquals(response.getStatus(), ServerStatus.BUILD); - assertEquals(response.getProgress(), new Integer(60)); + assertEquals(response.getProgress(), Integer.valueOf(60)); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US); dateFormat.setTimeZone(new SimpleTimeZone(0, "GMT")); assertEquals(response.getCreated(), dateFormat.parse("2010-08-10T12:00:00Z")); diff --git a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerFromJsonResponseTest.java b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerFromJsonResponseTest.java index 6f282f8347..3821b23899 100644 --- a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerFromJsonResponseTest.java +++ b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerFromJsonResponseTest.java @@ -65,7 +65,7 @@ public class ParseServerFromJsonResponseTest { assertEquals(response.getFlavorRef(), "http://servers.api.openstack.org/1234/flavors/1"); assertEquals(response.getHostId(), "e4d909c290d0fb1ca068ffaddf22cbd0"); assertEquals(response.getStatus(), ServerStatus.BUILD); - assertEquals(response.getProgress(), new Integer(60)); + assertEquals(response.getProgress(), Integer.valueOf(60)); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US); dateFormat.setTimeZone(new SimpleTimeZone(0, "GMT")); assertEquals(response.getCreated(), dateFormat.parse("2010-08-10T12:00:00Z")); diff --git a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerListFromJsonResponseTest.java b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerListFromJsonResponseTest.java index d5f45c074b..e9f255b7b6 100644 --- a/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerListFromJsonResponseTest.java +++ b/apis/nova/src/test/java/org/jclouds/openstack/nova/functions/ParseServerListFromJsonResponseTest.java @@ -88,7 +88,7 @@ public class ParseServerListFromJsonResponseTest { assertEquals(response.get(0).getHostId(), "e4d909c290d0fb1ca068ffaddf22cbd0"); assertEquals(response.get(0).getUuid(), "d84e2086-fc0d-11e0-8e08-2837371c69ae"); assertEquals(response.get(0).getStatus(), ServerStatus.BUILD); - assertEquals(response.get(0).getProgress(), new Integer(60)); + assertEquals(response.get(0).getProgress(), Integer.valueOf(60)); List
publicAddresses = ImmutableList.copyOf(Iterables.transform( ImmutableList.of("67.23.10.132", "::babe:67.23.10.132", "67.23.10.131", "::babe:4317:0A83"), diff --git a/apis/s3/src/main/java/org/jclouds/s3/options/ListBucketOptions.java b/apis/s3/src/main/java/org/jclouds/s3/options/ListBucketOptions.java index d7da77c382..53f48c7b62 100644 --- a/apis/s3/src/main/java/org/jclouds/s3/options/ListBucketOptions.java +++ b/apis/s3/src/main/java/org/jclouds/s3/options/ListBucketOptions.java @@ -85,7 +85,7 @@ public class ListBucketOptions extends BaseHttpRequestOptions { public Integer getMaxResults() { String returnVal = getFirstQueryOrNull("max-keys"); - return (returnVal != null) ? new Integer(returnVal) : null; + return (returnVal != null) ? Integer.valueOf(returnVal) : null; } /** diff --git a/apis/s3/src/main/java/org/jclouds/s3/xml/ListBucketHandler.java b/apis/s3/src/main/java/org/jclouds/s3/xml/ListBucketHandler.java index 95e8eef42b..ef902bd055 100644 --- a/apis/s3/src/main/java/org/jclouds/s3/xml/ListBucketHandler.java +++ b/apis/s3/src/main/java/org/jclouds/s3/xml/ListBucketHandler.java @@ -104,7 +104,7 @@ public class ListBucketHandler extends ParseSax.HandlerWithResult> containerToBlobs, + LocalAsyncBlobStore blobStore, ConcurrentMap> containerToBlobs, ConcurrentMap containerToLocation, DateService dateService, S3Object.Factory objectProvider, Blob.Factory blobProvider, HttpGetOptionsListToGetOptions httpGetOptionsConverter, ObjectToBlob object2Blob, BlobToObject blob2Object, @@ -157,25 +158,25 @@ public class StubS3AsyncClient implements S3AsyncClient { Blob object = source.get(sourceObject); if (options.getIfMatch() != null) { if (!object.getMetadata().getETag().equals(options.getIfMatch())) - return immediateFailedFuture(TransientAsyncBlobStore.returnResponseException(412)); + return immediateFailedFuture(LocalAsyncBlobStore.returnResponseException(412)); } if (options.getIfNoneMatch() != null) { if (object.getMetadata().getETag().equals(options.getIfNoneMatch())) - return immediateFailedFuture(TransientAsyncBlobStore.returnResponseException(412)); + return immediateFailedFuture(LocalAsyncBlobStore.returnResponseException(412)); } if (options.getIfModifiedSince() != null) { Date modifiedSince = dateService.rfc822DateParse(options.getIfModifiedSince()); if (modifiedSince.after(object.getMetadata().getLastModified())) - return immediateFailedFuture(TransientAsyncBlobStore.returnResponseException(412)); + return immediateFailedFuture(LocalAsyncBlobStore.returnResponseException(412)); } if (options.getIfUnmodifiedSince() != null) { Date unmodifiedSince = dateService.rfc822DateParse(options.getIfUnmodifiedSince()); if (unmodifiedSince.before(object.getMetadata().getLastModified())) - return immediateFailedFuture(TransientAsyncBlobStore.returnResponseException(412)); + return immediateFailedFuture(LocalAsyncBlobStore.returnResponseException(412)); } Blob sourceS3 = source.get(sourceObject); - MutableBlobMetadata newMd = TransientAsyncBlobStore.copy(sourceS3.getMetadata(), destinationObject); + MutableBlobMetadata newMd = BlobStoreUtils.copy(sourceS3.getMetadata(), destinationObject); if (options.getAcl() != null) keyToAcl.put(destinationBucket + "/" + destinationObject, options.getAcl()); @@ -183,7 +184,7 @@ public class StubS3AsyncClient implements S3AsyncClient { Blob newBlob = blobProvider.create(newMd); newBlob.setPayload(sourceS3.getPayload()); dest.put(destinationObject, newBlob); - return immediateFuture((ObjectMetadata) blob2ObjectMetadata.apply(TransientAsyncBlobStore.copy(newMd))); + return immediateFuture((ObjectMetadata) blob2ObjectMetadata.apply(BlobStoreUtils.copy(newMd))); } return immediateFailedFuture(new KeyNotFoundException(sourceBucket, sourceObject, sourceBucket + "/" + sourceObject)); diff --git a/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java b/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java index 12481c2116..f546f4d47b 100644 --- a/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java +++ b/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java @@ -164,7 +164,7 @@ public class ParallelMultipartUploadStrategy implements AsyncMultipartUploadStra CountDownLatch latch = new CountDownLatch(effectiveParts); int part; while ((part = algorithm.getNextPart()) <= parts) { - Integer partKey = new Integer(part); + Integer partKey = Integer.valueOf(part); activeParts.put(partKey); prepareUploadPart(container, blob, key, partKey, payload, @@ -173,7 +173,7 @@ public class ParallelMultipartUploadStrategy implements AsyncMultipartUploadStra blob2Object); } if (remaining > 0) { - Integer partKey = new Integer(part); + Integer partKey = Integer.valueOf(part); activeParts.put(partKey); prepareUploadPart(container, blob, key, partKey, payload, algorithm.getNextChunkOffset(), remaining, etags, @@ -187,7 +187,7 @@ public class ParallelMultipartUploadStrategy implements AsyncMultipartUploadStra CountDownLatch retryLatch = new CountDownLatch(atOnce); for (int i = 0; i < atOnce; i++) { Part failedPart = toRetry.poll(); - Integer partKey = new Integer(failedPart.getPart()); + Integer partKey = Integer.valueOf(failedPart.getPart()); activeParts.put(partKey); prepareUploadPart(container, blob, key, partKey, payload, failedPart.getOffset(), failedPart.getSize(), etags, diff --git a/apis/swift/src/main/java/org/jclouds/openstack/swift/options/ListContainerOptions.java b/apis/swift/src/main/java/org/jclouds/openstack/swift/options/ListContainerOptions.java index 28f88a5cad..c6dfd07ff3 100644 --- a/apis/swift/src/main/java/org/jclouds/openstack/swift/options/ListContainerOptions.java +++ b/apis/swift/src/main/java/org/jclouds/openstack/swift/options/ListContainerOptions.java @@ -57,7 +57,7 @@ public class ListContainerOptions extends BaseHttpRequestOptions { public int getMaxResults() { String val = getFirstQueryOrNull("limit"); - return val != null ? new Integer(val) : 10000; + return val != null ? Integer.valueOf(val) : 10000; } /** diff --git a/apis/swift/src/test/java/org/jclouds/openstack/swift/CommonSwiftClientLiveTest.java b/apis/swift/src/test/java/org/jclouds/openstack/swift/CommonSwiftClientLiveTest.java index fb11ec3570..504b8334af 100644 --- a/apis/swift/src/test/java/org/jclouds/openstack/swift/CommonSwiftClientLiveTest.java +++ b/apis/swift/src/test/java/org/jclouds/openstack/swift/CommonSwiftClientLiveTest.java @@ -204,7 +204,7 @@ public abstract class CommonSwiftClientLiveTest ext MutableObjectInfoWithMetadata metadata = getApi().getObjectInfo(containerName, object.getInfo().getName()); assertEquals(metadata.getName(), object.getInfo().getName()); - assertEquals(metadata.getBytes(), new Long(data.length())); + assertEquals(metadata.getBytes(), Long.valueOf(data.length())); assert metadata.getContentType().startsWith("text/plain") : metadata.getContentType(); assertEquals(CryptoStreams.hex(md5), CryptoStreams.hex(metadata.getHash())); @@ -222,10 +222,10 @@ public abstract class CommonSwiftClientLiveTest ext assert getApi().getObject(containerName, "non-existent-object") == null; // Test GET of object (including updated metadata) SwiftObject getBlob = getApi().getObject(containerName, object.getInfo().getName()); - assertEquals(Strings2.toStringAndClose(getBlob.getPayload().getInput()), data); + assertEquals(Strings2.toString(getBlob.getPayload()), data); // TODO assertEquals(getBlob.getName(), // object.getMetadata().getName()); - assertEquals(getBlob.getInfo().getBytes(), new Long(data.length())); + assertEquals(getBlob.getInfo().getBytes(), Long.valueOf(data.length())); testGetObjectContentType(getBlob); assertEquals(CryptoStreams.hex(md5), CryptoStreams.hex(getBlob.getInfo().getHash())); assertEquals(CryptoStreams.hex(newEtag), getBlob.getInfo().getHash()); @@ -267,7 +267,7 @@ public abstract class CommonSwiftClientLiveTest ext GetOptions.Builder.ifETagMatches(newEtag)); assertEquals(getBlob.getInfo().getHash(), CryptoStreams.hex(newEtag)); getBlob = getApi().getObject(containerName, object.getInfo().getName(), GetOptions.Builder.startAt(8)); - assertEquals(Strings2.toStringAndClose(getBlob.getPayload().getInput()), data.substring(8)); + assertEquals(Strings2.toString(getBlob.getPayload()), data.substring(8)); } finally { returnContainer(containerName); diff --git a/apis/swift/src/test/java/org/jclouds/openstack/swift/internal/StubSwiftAsyncClient.java b/apis/swift/src/test/java/org/jclouds/openstack/swift/internal/StubSwiftAsyncClient.java index 00a889a2fe..354ffee1c4 100644 --- a/apis/swift/src/test/java/org/jclouds/openstack/swift/internal/StubSwiftAsyncClient.java +++ b/apis/swift/src/test/java/org/jclouds/openstack/swift/internal/StubSwiftAsyncClient.java @@ -33,7 +33,7 @@ import javax.inject.Named; import javax.inject.Singleton; import org.jclouds.Constants; -import org.jclouds.blobstore.TransientAsyncBlobStore; +import org.jclouds.blobstore.LocalAsyncBlobStore; import org.jclouds.blobstore.domain.BlobMetadata; import org.jclouds.blobstore.domain.PageSet; import org.jclouds.blobstore.domain.StorageMetadata; @@ -68,7 +68,7 @@ import com.google.common.util.concurrent.ListenableFuture; @Singleton public class StubSwiftAsyncClient implements CommonSwiftAsyncClient { private final HttpGetOptionsListToGetOptions httpGetOptionsConverter; - private final TransientAsyncBlobStore blobStore; + private final LocalAsyncBlobStore blobStore; private final SwiftObject.Factory objectProvider; private final ObjectToBlob object2Blob; private final BlobToObject blob2Object; @@ -79,7 +79,7 @@ public class StubSwiftAsyncClient implements CommonSwiftAsyncClient { @Inject private StubSwiftAsyncClient(@Named(Constants.PROPERTY_USER_THREADS) ExecutorService service, - TransientAsyncBlobStore blobStore, + LocalAsyncBlobStore blobStore, SwiftObject.Factory objectProvider, HttpGetOptionsListToGetOptions httpGetOptionsConverter, ObjectToBlob object2Blob, BlobToObject blob2Object, ResourceToObjectInfo blob2ObjectInfo, ListContainerOptionsToBlobStoreListContainerOptions container2ContainerListOptions, diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/VCloudAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/VCloudAsyncClient.java index de290b823d..7fb5498b7b 100644 --- a/apis/vcloud/src/main/java/org/jclouds/vcloud/VCloudAsyncClient.java +++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/VCloudAsyncClient.java @@ -28,7 +28,7 @@ import org.jclouds.vcloud.features.VAppAsyncClient; import org.jclouds.vcloud.features.VAppTemplateAsyncClient; import org.jclouds.vcloud.features.VDCAsyncClient; import org.jclouds.vcloud.features.VmAsyncClient; -import org.jclouds.vcloud.filters.SetVCloudTokenCookie; +import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest; /** * Provides access to VCloud resources via their REST API. @@ -38,7 +38,7 @@ import org.jclouds.vcloud.filters.SetVCloudTokenCookie; * /> * @author Adrian Cole */ -@RequestFilters(SetVCloudTokenCookie.class) +@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) public interface VCloudAsyncClient { /** diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/CatalogAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/CatalogAsyncClient.java index dc1bf0d64f..0f4b23301b 100644 --- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/CatalogAsyncClient.java +++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/CatalogAsyncClient.java @@ -42,7 +42,7 @@ import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404; import org.jclouds.vcloud.binders.BindCatalogItemToXmlPayload; import org.jclouds.vcloud.domain.Catalog; import org.jclouds.vcloud.domain.CatalogItem; -import org.jclouds.vcloud.filters.SetVCloudTokenCookie; +import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest; import org.jclouds.vcloud.functions.OrgNameAndCatalogNameToEndpoint; import org.jclouds.vcloud.functions.OrgNameCatalogNameItemNameToEndpoint; import org.jclouds.vcloud.options.CatalogItemOptions; @@ -57,7 +57,7 @@ import com.google.common.util.concurrent.ListenableFuture; * * @author Adrian Cole */ -@RequestFilters(SetVCloudTokenCookie.class) +@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) public interface CatalogAsyncClient { /** diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkAsyncClient.java index 9834f5095a..e57c1a87da 100644 --- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkAsyncClient.java +++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkAsyncClient.java @@ -32,7 +32,7 @@ import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.rest.annotations.XMLResponseParser; import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404; import org.jclouds.vcloud.domain.network.OrgNetwork; -import org.jclouds.vcloud.filters.SetVCloudTokenCookie; +import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest; import org.jclouds.vcloud.functions.OrgNameVDCNameResourceEntityNameToEndpoint; import org.jclouds.vcloud.xml.OrgNetworkHandler; @@ -44,7 +44,7 @@ import com.google.common.util.concurrent.ListenableFuture; * * @author Adrian Cole */ -@RequestFilters(SetVCloudTokenCookie.class) +@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) public interface NetworkAsyncClient { /** diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgAsyncClient.java index 688b3223cd..792dc73ddc 100644 --- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgAsyncClient.java +++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgAsyncClient.java @@ -37,7 +37,7 @@ import org.jclouds.vcloud.VCloudMediaType; import org.jclouds.vcloud.domain.Org; import org.jclouds.vcloud.domain.ReferenceType; import org.jclouds.vcloud.endpoints.OrgList; -import org.jclouds.vcloud.filters.SetVCloudTokenCookie; +import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest; import org.jclouds.vcloud.functions.OrgNameToEndpoint; import org.jclouds.vcloud.xml.OrgHandler; import org.jclouds.vcloud.xml.OrgListHandler; @@ -50,7 +50,7 @@ import com.google.common.util.concurrent.ListenableFuture; * * @author Adrian Cole */ -@RequestFilters(SetVCloudTokenCookie.class) +@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) public interface OrgAsyncClient { /** diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskAsyncClient.java index 3b2d0e5362..dbbf5ddbc4 100644 --- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskAsyncClient.java +++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskAsyncClient.java @@ -36,7 +36,7 @@ import org.jclouds.rest.annotations.XMLResponseParser; import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404; import org.jclouds.vcloud.domain.Task; import org.jclouds.vcloud.domain.TasksList; -import org.jclouds.vcloud.filters.SetVCloudTokenCookie; +import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest; import org.jclouds.vcloud.functions.OrgNameToTasksListEndpoint; import org.jclouds.vcloud.xml.TaskHandler; import org.jclouds.vcloud.xml.TasksListHandler; @@ -49,7 +49,7 @@ import com.google.common.util.concurrent.ListenableFuture; * * @author Adrian Cole */ -@RequestFilters(SetVCloudTokenCookie.class) +@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) public interface TaskAsyncClient { /** diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppAsyncClient.java index fa35cada47..523cb8c943 100644 --- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppAsyncClient.java +++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppAsyncClient.java @@ -49,7 +49,7 @@ import org.jclouds.vcloud.binders.BindDeployVAppParamsToXmlPayload; import org.jclouds.vcloud.binders.BindUndeployVAppParamsToXmlPayload; import org.jclouds.vcloud.domain.Task; import org.jclouds.vcloud.domain.VApp; -import org.jclouds.vcloud.filters.SetVCloudTokenCookie; +import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest; import org.jclouds.vcloud.functions.OrgNameVDCNameResourceEntityNameToEndpoint; import org.jclouds.vcloud.options.CloneVAppOptions; import org.jclouds.vcloud.xml.TaskHandler; @@ -63,7 +63,7 @@ import com.google.common.util.concurrent.ListenableFuture; * * @author Adrian Cole */ -@RequestFilters(SetVCloudTokenCookie.class) +@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) public interface VAppAsyncClient { /** diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateAsyncClient.java index 664952ea1d..5859888396 100644 --- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateAsyncClient.java +++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateAsyncClient.java @@ -52,7 +52,7 @@ import org.jclouds.vcloud.binders.BindInstantiateVAppTemplateParamsToXmlPayload; import org.jclouds.vcloud.domain.Task; import org.jclouds.vcloud.domain.VApp; import org.jclouds.vcloud.domain.VAppTemplate; -import org.jclouds.vcloud.filters.SetVCloudTokenCookie; +import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest; import org.jclouds.vcloud.functions.OrgNameCatalogNameVAppTemplateNameToEndpoint; import org.jclouds.vcloud.options.CaptureVAppOptions; import org.jclouds.vcloud.options.CloneVAppTemplateOptions; @@ -69,7 +69,7 @@ import com.google.common.util.concurrent.ListenableFuture; * * @author Adrian Cole */ -@RequestFilters(SetVCloudTokenCookie.class) +@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) public interface VAppTemplateAsyncClient { /** diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VDCAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VDCAsyncClient.java index f2228d8db8..365455b40b 100644 --- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VDCAsyncClient.java +++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VDCAsyncClient.java @@ -32,7 +32,7 @@ import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.rest.annotations.XMLResponseParser; import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404; import org.jclouds.vcloud.domain.VDC; -import org.jclouds.vcloud.filters.SetVCloudTokenCookie; +import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest; import org.jclouds.vcloud.functions.OrgNameAndVDCNameToEndpoint; import org.jclouds.vcloud.xml.VDCHandler; @@ -44,7 +44,7 @@ import com.google.common.util.concurrent.ListenableFuture; * * @author Adrian Cole */ -@RequestFilters(SetVCloudTokenCookie.class) +@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) public interface VDCAsyncClient { /** diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VmAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VmAsyncClient.java index 9227a69f12..2239ac8a37 100644 --- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VmAsyncClient.java +++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VmAsyncClient.java @@ -54,7 +54,7 @@ import org.jclouds.vcloud.domain.GuestCustomizationSection; import org.jclouds.vcloud.domain.NetworkConnectionSection; import org.jclouds.vcloud.domain.Task; import org.jclouds.vcloud.domain.Vm; -import org.jclouds.vcloud.filters.SetVCloudTokenCookie; +import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest; import org.jclouds.vcloud.xml.TaskHandler; import org.jclouds.vcloud.xml.VmHandler; @@ -66,7 +66,7 @@ import com.google.common.util.concurrent.ListenableFuture; * * @author Adrian Cole */ -@RequestFilters(SetVCloudTokenCookie.class) +@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) public interface VmAsyncClient { /** diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/filters/SetVCloudTokenCookie.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/filters/AddVCloudAuthorizationAndCookieToRequest.java similarity index 72% rename from apis/vcloud/src/main/java/org/jclouds/vcloud/filters/SetVCloudTokenCookie.java rename to apis/vcloud/src/main/java/org/jclouds/vcloud/filters/AddVCloudAuthorizationAndCookieToRequest.java index 18dd5cb3d2..aa4380e210 100644 --- a/apis/vcloud/src/main/java/org/jclouds/vcloud/filters/SetVCloudTokenCookie.java +++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/filters/AddVCloudAuthorizationAndCookieToRequest.java @@ -28,6 +28,7 @@ import org.jclouds.http.HttpRequestFilter; import org.jclouds.vcloud.VCloudToken; import com.google.common.base.Supplier; +import com.google.common.collect.ImmutableMultimap; /** * Adds the VCloud Token to the request as a cookie @@ -36,17 +37,21 @@ import com.google.common.base.Supplier; * */ @Singleton -public class SetVCloudTokenCookie implements HttpRequestFilter { +public class AddVCloudAuthorizationAndCookieToRequest implements HttpRequestFilter { private Supplier vcloudTokenProvider; @Inject - public SetVCloudTokenCookie(@VCloudToken Supplier authTokenProvider) { + public AddVCloudAuthorizationAndCookieToRequest(@VCloudToken Supplier authTokenProvider) { this.vcloudTokenProvider = authTokenProvider; } @Override public HttpRequest filter(HttpRequest request) throws HttpException { - return request.toBuilder().replaceHeader(HttpHeaders.COOKIE, "vcloud-token=" + vcloudTokenProvider.get()).build(); + String token = vcloudTokenProvider.get(); + return request + .toBuilder() + .replaceHeaders( + ImmutableMultimap.of("x-vcloud-authorization", token, HttpHeaders.COOKIE, "vcloud-token=" + + token)).build(); } - } \ No newline at end of file diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/handlers/ParseVCloudErrorFromHttpResponse.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/handlers/ParseVCloudErrorFromHttpResponse.java index d67e9114f3..3f206490b6 100644 --- a/apis/vcloud/src/main/java/org/jclouds/vcloud/handlers/ParseVCloudErrorFromHttpResponse.java +++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/handlers/ParseVCloudErrorFromHttpResponse.java @@ -73,7 +73,7 @@ public class ParseVCloudErrorFromHttpResponse implements HttpErrorHandler { message = error.getMessage(); exception = new VCloudResponseException(command, response, error); } else { - message = Strings2.toStringAndClose(response.getPayload().getInput()); + message = Strings2.toString(response.getPayload()); exception = message != null ? new HttpResponseException(command, response, message) : exception; } } catch (IOException e) { diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/xml/NetworkConnectionSectionHandler.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/xml/NetworkConnectionSectionHandler.java index a4601c80b1..487fd8766d 100644 --- a/apis/vcloud/src/main/java/org/jclouds/vcloud/xml/NetworkConnectionSectionHandler.java +++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/xml/NetworkConnectionSectionHandler.java @@ -85,7 +85,7 @@ public class NetworkConnectionSectionHandler extends ParseSax.HandlerWithResult< } else if (qName.endsWith("Info")) { this.info = currentOrNull(); } else if (qName.endsWith("PrimaryNetworkConnectionIndex")) { - this.primaryNetworkConnectionIndex = new Integer(currentOrNull()); + this.primaryNetworkConnectionIndex = Integer.valueOf(currentOrNull()); } currentText = new StringBuilder(); } diff --git a/apis/vcloud/src/test/java/org/jclouds/vcloud/compute/BaseVCloudComputeServiceExpectTest.java b/apis/vcloud/src/test/java/org/jclouds/vcloud/compute/BaseVCloudComputeServiceExpectTest.java index 73ac7b9060..142bdec7e4 100644 --- a/apis/vcloud/src/test/java/org/jclouds/vcloud/compute/BaseVCloudComputeServiceExpectTest.java +++ b/apis/vcloud/src/test/java/org/jclouds/vcloud/compute/BaseVCloudComputeServiceExpectTest.java @@ -32,7 +32,6 @@ import org.jclouds.vcloud.VCloudApiMetadata; import org.jclouds.vcloud.VCloudMediaType; import com.google.common.base.Function; -import com.google.common.collect.ImmutableMultimap; import com.google.common.net.HttpHeaders; import com.google.inject.Module; @@ -52,11 +51,9 @@ public abstract class BaseVCloudComputeServiceExpectTest extends BaseRestClientE .build(); // initial auth is using basic - protected HttpRequest version1_0LoginRequest = HttpRequest.builder().method("POST").endpoint( - URI.create(ENDPOINT + "/v1.0/login")) - .headers(ImmutableMultimap. builder() - .put(HttpHeaders.ACCEPT, VCloudMediaType.ORGLIST_XML) - .put(HttpHeaders.AUTHORIZATION, "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build()).build(); + protected HttpRequest version1_0LoginRequest = HttpRequest.builder().method("POST").endpoint(ENDPOINT + "/v1.0/login") + .addHeader(HttpHeaders.ACCEPT, VCloudMediaType.ORGLIST_XML) + .addHeader(HttpHeaders.AUTHORIZATION, "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build(); protected String sessionToken = "AtatAgvJMrwOc9pDQq4RRCRLazThpnTKJDxSVH9oB2I="; @@ -64,18 +61,16 @@ public abstract class BaseVCloudComputeServiceExpectTest extends BaseRestClientE // NOTE: vCloud Director 1.5 returns ;version=1.0 on responses to requests made in 1.0 format. protected HttpResponse successfulVersion1_0LoginResponseFromVCD1_5WithSingleOrg = HttpResponse.builder().statusCode(200) .message("HTTP/1.1 200 OK").payload(payloadFromResourceWithContentType("/orgList1.0-vcd15.xml", VCloudMediaType.ORGLIST_XML +";version=1.0")) - .headers(ImmutableMultimap. builder() - .put("x-vcloud-authorization", sessionToken) - .put(HttpHeaders.SET_COOKIE, String.format("vcloud-token=%s; Secure; Path=/", sessionToken)).build()).build(); + .addHeader("x-vcloud-authorization", sessionToken) + .addHeader(HttpHeaders.SET_COOKIE, String.format("vcloud-token=%s; Secure; Path=/", sessionToken)).build(); // objects are looked up by id and the format of the id is hex-hyphen protected String orgId = "c076f90a-397a-49fa-89b8-b294c1599cd0"; - protected HttpRequest version1_0GetOrgRequest = HttpRequest.builder().method("GET").endpoint( - URI.create(ENDPOINT + "/v1.0/org/" + orgId)) - .headers(ImmutableMultimap. builder() - .put(HttpHeaders.ACCEPT, VCloudMediaType.ORG_XML) - .put(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build()).build(); + protected HttpRequest version1_0GetOrgRequest = HttpRequest.builder().method("GET").endpoint(ENDPOINT + "/v1.0/org/" + orgId) + .addHeader(HttpHeaders.ACCEPT, VCloudMediaType.ORG_XML) + .addHeader("x-vcloud-authorization", sessionToken) + .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build(); protected HttpResponse successfulVersion1_0GetOrgResponseFromVCD1_5WithSingleTasksListVDCAndNetwork = HttpResponse.builder().statusCode(200) .message("HTTP/1.1 200 OK").payload(payloadFromResourceWithContentType("/org1.0-vcd15.xml", VCloudMediaType.ORG_XML +";version=1.0")) @@ -84,11 +79,10 @@ public abstract class BaseVCloudComputeServiceExpectTest extends BaseRestClientE protected String catalogId = "3155f393-1e1d-4572-8c9c-d76f72ddb658"; protected String vdcId = "e9cd3387-ac57-4d27-a481-9bee75e0690f"; - protected HttpRequest version1_0GetCatalogRequest = HttpRequest.builder().method("GET").endpoint( - URI.create(ENDPOINT + "/v1.0/catalog/" + catalogId)) - .headers(ImmutableMultimap. builder() - .put(HttpHeaders.ACCEPT, VCloudMediaType.CATALOG_XML) - .put(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build()).build(); + protected HttpRequest version1_0GetCatalogRequest = HttpRequest.builder().method("GET").endpoint(ENDPOINT + "/v1.0/catalog/" + catalogId) + .addHeader(HttpHeaders.ACCEPT, VCloudMediaType.CATALOG_XML) + .addHeader("x-vcloud-authorization", sessionToken) + .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build(); protected HttpResponse successfulVersion1_0GetCatalogResponseFromVCD1_5WithSingleTemplate = HttpResponse.builder().statusCode(200) .message("HTTP/1.1 200 OK").payload(payloadFromResourceWithContentType("/catalog1.0-vcd15.xml", VCloudMediaType.CATALOG_XML +";version=1.0")) @@ -96,11 +90,10 @@ public abstract class BaseVCloudComputeServiceExpectTest extends BaseRestClientE protected String catalogItemId = "ceb369f7-1d07-4e32-9dbd-ebb5aa6ca55c"; - protected HttpRequest version1_0GetCatalogItemRequest = HttpRequest.builder().method("GET").endpoint( - URI.create(ENDPOINT + "/v1.0/catalogItem/" + catalogItemId)) - .headers(ImmutableMultimap. builder() - .put(HttpHeaders.ACCEPT, VCloudMediaType.CATALOGITEM_XML) - .put(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build()).build(); + protected HttpRequest version1_0GetCatalogItemRequest = HttpRequest.builder().method("GET").endpoint(ENDPOINT + "/v1.0/catalogItem/" + catalogItemId) + .addHeader(HttpHeaders.ACCEPT, VCloudMediaType.CATALOGITEM_XML) + .addHeader("x-vcloud-authorization", sessionToken) + .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build(); protected HttpResponse successfulVersion1_0GetCatalogItemResponseFromVCD1_5ForTemplate = HttpResponse.builder().statusCode(200) .message("HTTP/1.1 200 OK").payload(payloadFromResourceWithContentType("/catalogItem1.0-vcd15.xml", VCloudMediaType.CATALOGITEM_XML +";version=1.0")) @@ -109,23 +102,21 @@ public abstract class BaseVCloudComputeServiceExpectTest extends BaseRestClientE // note vAppTemplate has a prefix in its id protected String templateId = "vappTemplate-51891b97-c5dd-47dc-a687-aabae354f728"; - protected HttpRequest version1_0GetVDCRequest = HttpRequest.builder().method("GET").endpoint( - URI.create(ENDPOINT + "/v1.0/vdc/" + vdcId)) - .headers(ImmutableMultimap. builder() - .put(HttpHeaders.ACCEPT, VCloudMediaType.VDC_XML) - .put(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build()).build(); - + protected HttpRequest version1_0GetVDCRequest = HttpRequest.builder().method("GET").endpoint(ENDPOINT + "/v1.0/vdc/" + vdcId) + .addHeader(HttpHeaders.ACCEPT, VCloudMediaType.VDC_XML) + .addHeader("x-vcloud-authorization", sessionToken) + .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build(); + protected HttpResponse successfulVersion1_0GetVDCResponseFromVCD1_5WithSingleTemplateAndNetwork = HttpResponse.builder().statusCode(200) .message("HTTP/1.1 200 OK").payload(payloadFromResourceWithContentType("/vdc1.0-vcd15.xml", VCloudMediaType.VDC_XML +";version=1.0")) .build(); protected String networkId = "b466c0c5-8a5c-4335-b703-a2e2e6b5f3e1"; - protected HttpRequest version1_0GetVAppTemplateRequest = HttpRequest.builder().method("GET").endpoint( - URI.create(ENDPOINT + "/v1.0/vAppTemplate/" + templateId)) - .headers(ImmutableMultimap. builder() - .put(HttpHeaders.ACCEPT, VCloudMediaType.VAPPTEMPLATE_XML) - .put(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build()).build(); + protected HttpRequest version1_0GetVAppTemplateRequest = HttpRequest.builder().method("GET").endpoint(ENDPOINT + "/v1.0/vAppTemplate/" + templateId) + .addHeader(HttpHeaders.ACCEPT, VCloudMediaType.VAPPTEMPLATE_XML) + .addHeader("x-vcloud-authorization", sessionToken) + .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build(); protected HttpResponse successfulVersion1_0GetVAppTemplateResponseFromVCD1_5WithSingleVMAndVDCParent = HttpResponse.builder().statusCode(200) .message("HTTP/1.1 200 OK").payload(payloadFromResourceWithContentType("/template1.0-vcd15.xml", VCloudMediaType.VAPPTEMPLATE_XML +";version=1.0")) @@ -135,11 +126,10 @@ public abstract class BaseVCloudComputeServiceExpectTest extends BaseRestClientE .message("HTTP/1.1 200 OK").payload(payloadFromResourceWithContentType("/template1.0-vcd15-multi-vm.xml", VCloudMediaType.VAPPTEMPLATE_XML +";version=1.0")) .build(); - protected HttpRequest version1_0GetOVFForVAppTemplateRequest = HttpRequest.builder().method("GET").endpoint( - URI.create(ENDPOINT + "/v1.0/vAppTemplate/" + templateId + "/ovf")) - .headers(ImmutableMultimap. builder() - .put(HttpHeaders.ACCEPT, MediaType.TEXT_XML) - .put(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build()).build(); + protected HttpRequest version1_0GetOVFForVAppTemplateRequest = HttpRequest.builder().method("GET").endpoint(ENDPOINT + "/v1.0/vAppTemplate/" + templateId + "/ovf") + .addHeader(HttpHeaders.ACCEPT, MediaType.TEXT_XML) + .addHeader("x-vcloud-authorization", sessionToken) + .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken).build(); protected HttpResponse successfulVersion1_0GetOVFForVAppTemplateResponseFromVCD1_5WithSingleVM = HttpResponse.builder().statusCode(200) .message("HTTP/1.1 200 OK").payload(payloadFromResourceWithContentType("/ovf-ubuntu64.xml", MediaType.TEXT_XML +";version=1.0")) diff --git a/apis/vcloud/src/test/java/org/jclouds/vcloud/compute/strategy/InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOnExpectTest.java b/apis/vcloud/src/test/java/org/jclouds/vcloud/compute/strategy/InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOnExpectTest.java index 42b16bfac3..176e82aded 100644 --- a/apis/vcloud/src/test/java/org/jclouds/vcloud/compute/strategy/InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOnExpectTest.java +++ b/apis/vcloud/src/test/java/org/jclouds/vcloud/compute/strategy/InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOnExpectTest.java @@ -86,10 +86,10 @@ public class InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployA .e("AllEULAsAccepted").t("true").up() .asString(outputProperties); - HttpRequest version1_0InstantiateWithNetworkNamedSameAsOrgNetwork = HttpRequest.builder() - .method("POST") + HttpRequest version1_0InstantiateWithNetworkNamedSameAsOrgNetwork = HttpRequest.builder().method("POST") .endpoint(ENDPOINT + "/v1.0/vdc/" + vdcId + "/action/instantiateVAppTemplate") .addHeader(HttpHeaders.ACCEPT, "application/vnd.vmware.vcloud.vApp+xml") + .addHeader("x-vcloud-authorization", sessionToken) .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken) .payload(payloadFromStringWithContentType(instantiateXML, "application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml")).build(); @@ -143,12 +143,12 @@ public class InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployA .e("AllEULAsAccepted").t("true").up() .asString(outputProperties); - HttpRequest version1_0InstantiateWithCustomizedNetwork = HttpRequest.builder() - .method("POST") - .endpoint(ENDPOINT + "/v1.0/vdc/" + vdcId + "/action/instantiateVAppTemplate") - .addHeader(HttpHeaders.ACCEPT, "application/vnd.vmware.vcloud.vApp+xml") - .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken) - .payload(payloadFromStringWithContentType(instantiateXML, "application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml")).build(); + HttpRequest version1_0InstantiateWithCustomizedNetwork = HttpRequest.builder().method("POST") + .endpoint(ENDPOINT + "/v1.0/vdc/" + vdcId + "/action/instantiateVAppTemplate") + .addHeader(HttpHeaders.ACCEPT, "application/vnd.vmware.vcloud.vApp+xml") + .addHeader("x-vcloud-authorization", sessionToken) + .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + sessionToken) + .payload(payloadFromStringWithContentType(instantiateXML, "application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml")).build(); ComputeService compute = requestsSendResponses(ImmutableMap. builder() .put(versionsRequest, versionsResponseFromVCD1_5) diff --git a/apis/vcloud/src/test/java/org/jclouds/vcloud/filters/SetVCloudTokenCookieTest.java b/apis/vcloud/src/test/java/org/jclouds/vcloud/filters/AddVCloudAuthorizationAndCookieToRequestTest.java similarity index 78% rename from apis/vcloud/src/test/java/org/jclouds/vcloud/filters/SetVCloudTokenCookieTest.java rename to apis/vcloud/src/test/java/org/jclouds/vcloud/filters/AddVCloudAuthorizationAndCookieToRequestTest.java index 818b6a6b73..298e1ac2e1 100644 --- a/apis/vcloud/src/test/java/org/jclouds/vcloud/filters/SetVCloudTokenCookieTest.java +++ b/apis/vcloud/src/test/java/org/jclouds/vcloud/filters/AddVCloudAuthorizationAndCookieToRequestTest.java @@ -31,14 +31,14 @@ import com.google.common.base.Supplier; /** * @author Adrian Cole */ -@Test -public class SetVCloudTokenCookieTest { +@Test(testName = "AddVCloudAuthorizationAndCookieToRequestTest") +public class AddVCloudAuthorizationAndCookieToRequestTest { - private SetVCloudTokenCookie filter; + private AddVCloudAuthorizationAndCookieToRequest filter; @BeforeTest void setUp() { - filter = new SetVCloudTokenCookie(new Supplier() { + filter = new AddVCloudAuthorizationAndCookieToRequest(new Supplier() { public String get() { return "token"; } @@ -49,9 +49,9 @@ public class SetVCloudTokenCookieTest { public void testApply() { HttpRequest request = HttpRequest.builder().method("GET").endpoint("http://localhost").build(); request = filter.filter(request); - assertEquals(request.getHeaders().size(), 1); + assertEquals(request.getHeaders().size(), 2); assertEquals(request.getFirstHeaderOrNull(HttpHeaders.COOKIE), "vcloud-token=token"); - + assertEquals(request.getFirstHeaderOrNull("x-vcloud-authorization"), "token"); } } diff --git a/apis/vcloud/src/test/java/org/jclouds/vcloud/internal/BaseVCloudAsyncClientTest.java b/apis/vcloud/src/test/java/org/jclouds/vcloud/internal/BaseVCloudAsyncClientTest.java index 920d5c9dae..22fb8a00bc 100644 --- a/apis/vcloud/src/test/java/org/jclouds/vcloud/internal/BaseVCloudAsyncClientTest.java +++ b/apis/vcloud/src/test/java/org/jclouds/vcloud/internal/BaseVCloudAsyncClientTest.java @@ -55,7 +55,7 @@ import org.jclouds.vcloud.domain.internal.CatalogItemImpl; import org.jclouds.vcloud.domain.internal.OrgImpl; import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl; import org.jclouds.vcloud.domain.internal.VDCImpl; -import org.jclouds.vcloud.filters.SetVCloudTokenCookie; +import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest; import org.jclouds.vcloud.xml.VAppTemplateHandlerTest; import org.testng.annotations.Test; @@ -82,7 +82,7 @@ public abstract class BaseVCloudAsyncClientTest extends BaseAsyncClientTest /root/foo.txt< defaultLocation, @Memoized Supplier> locations, - Factory blobFactory, FilesystemStorageStrategy storageStrategy) { + ContentMetadataCodec contentMetadataCodec, + IfDirectoryReturnNameStrategy ifDirectoryReturnName, + Factory blobFactory, LocalStorageStrategy storageStrategy) { super(context, blobUtils, service, defaultLocation, locations); this.blobFactory = blobFactory; - this.dateService = dateService; - this.crypto = crypto; - this.httpGetOptionsConverter = httpGetOptionsConverter; this.contentMetadataCodec = contentMetadataCodec; this.ifDirectoryReturnName = ifDirectoryReturnName; - this.storageStrategy = checkNotNull(storageStrategy, "Storage strategy"); + this.storageStrategy = storageStrategy; } /** @@ -170,7 +143,7 @@ public class FilesystemAsyncBlobStore extends BaseAsyncBlobStore { checkState(oldBlob != null, "blob " + key + " is not present although it was in the list of " + container); checkState(oldBlob.getMetadata() != null, "blob " + container + "/" + key + " has no metadata"); - MutableBlobMetadata md = copy(oldBlob.getMetadata()); + MutableBlobMetadata md = BlobStoreUtils.copy(oldBlob.getMetadata()); String directoryName = ifDirectoryReturnName.execute(md); if (directoryName != null) { md.setName(directoryName); @@ -211,7 +184,7 @@ public class FilesystemAsyncBlobStore extends BaseAsyncBlobStore { } } - final String delimiter = options.isRecursive() ? null : File.separator; + final String delimiter = options.isRecursive() ? null : storageStrategy.getSeparator(); if (delimiter != null) { SortedSet commonPrefixes = newTreeSet( transform(contents, new CommonPrefixes(prefix, delimiter))); @@ -249,37 +222,6 @@ public class FilesystemAsyncBlobStore extends BaseAsyncBlobStore { storageStrategy.getAllContainerNames())); } - public static MutableBlobMetadata copy(MutableBlobMetadata in) { - ByteArrayOutputStream bout = new ByteArrayOutputStream(); - ObjectOutput os; - try { - os = new ObjectOutputStream(bout); - os.writeObject(in); - ObjectInput is = new ObjectInputStream(new ByteArrayInputStream(bout.toByteArray())); - MutableBlobMetadata metadata = (MutableBlobMetadata) is.readObject(); - convertUserMetadataKeysToLowercase(metadata); - metadata.setContentMetadata(BaseMutableContentMetadata.fromContentMetadata(in.getContentMetadata().toBuilder() - .build())); - return metadata; - } catch (Exception e) { - throw propagate(e); - } - } - - private static void convertUserMetadataKeysToLowercase(MutableBlobMetadata metadata) { - Map lowerCaseUserMetadata = newHashMap(); - for (Entry entry : metadata.getUserMetadata().entrySet()) { - lowerCaseUserMetadata.put(entry.getKey().toLowerCase(), entry.getValue()); - } - metadata.setUserMetadata(lowerCaseUserMetadata); - } - - public static MutableBlobMetadata copy(MutableBlobMetadata in, String newKey) { - MutableBlobMetadata newMd = copy(in); - newMd.setName(newKey); - return newMd; - } - /** * {@inheritDoc} */ @@ -289,6 +231,15 @@ public class FilesystemAsyncBlobStore extends BaseAsyncBlobStore { return immediateFuture(null); } + /** + * {@inheritDoc} + */ + @Override + public ListenableFuture clearContainer(final String container) { + storageStrategy.clearContainer(container); + return immediateFuture(null); + } + /** * Override parent method because it uses strange futures and listenables * that creates problem in the test if more than one test that deletes the @@ -303,6 +254,22 @@ public class FilesystemAsyncBlobStore extends BaseAsyncBlobStore { return immediateFuture(null); } + public ListenableFuture deleteContainerIfEmpty(final String container) { + Boolean returnVal = true; + if (storageStrategy.containerExists(container)) { + try { + if (Iterables.isEmpty(storageStrategy.getBlobKeysInsideContainer(container))) + storageStrategy.deleteContainer(container); + else + returnVal = false; + } catch (IOException e) { + logger.error(e, "An error occurred loading blobs contained into container %s", container); + Throwables.propagate(e); + } + } + return immediateFuture(returnVal); + } + /** * {@inheritDoc} */ @@ -324,6 +291,7 @@ public class FilesystemAsyncBlobStore extends BaseAsyncBlobStore { MutableStorageMetadata cmd = create(); cmd.setName(name); cmd.setType(StorageType.CONTAINER); + cmd.setLocation(storageStrategy.getLocation(name)); return cmd; } }), null)); @@ -336,11 +304,10 @@ public class FilesystemAsyncBlobStore extends BaseAsyncBlobStore { /** * {@inheritDoc} */ - @Path("{container}") @Override public ListenableFuture createContainerInLocation(final Location location, - @PathParam("container") @ParamValidators({ FilesystemContainerNameValidator.class }) String name) { - boolean result = storageStrategy.createContainer(name); + final String name) { + boolean result = storageStrategy.createContainerInLocation(name, location); return immediateFuture(result); } @@ -461,18 +428,12 @@ public class FilesystemAsyncBlobStore extends BaseAsyncBlobStore { } try { - // TODO - // must override existing file? - - storageStrategy.putBlob(containerName, blob); + return immediateFuture(storageStrategy.putBlob(containerName, blob)); } catch (IOException e) { logger.error(e, "An error occurred storing the new blob with name [%s] to container [%s].", blobKey, containerName); - Throwables.propagate(e); + throw Throwables.propagate(e); } - - String eTag = getEtag(blob); - return immediateFuture(eTag); } private void copyPayloadHeadersToBlob(Payload payload, Blob blob) { @@ -573,7 +534,7 @@ public class FilesystemAsyncBlobStore extends BaseAsyncBlobStore { byte[] byteArray = out.toByteArray(); blob.setPayload(byteArray); HttpUtils.copy(cmd, blob.getPayload().getContentMetadata()); - blob.getPayload().getContentMetadata().setContentLength(new Long(byteArray.length)); + blob.getPayload().getContentMetadata().setContentLength(Long.valueOf(byteArray.length)); } } checkNotNull(blob.getPayload(), "payload " + blob); @@ -587,7 +548,7 @@ public class FilesystemAsyncBlobStore extends BaseAsyncBlobStore { public ListenableFuture blobMetadata(final String container, final String key) { try { Blob blob = getBlob(container, key).get(); - return immediateFuture(blob != null ? (BlobMetadata) copy(blob.getMetadata()) : null); + return immediateFuture(blob != null ? (BlobMetadata) BlobStoreUtils.copy(blob.getMetadata()) : null); } catch (Exception e) { if (size(filter(getCausalChain(e), KeyNotFoundException.class)) >= 1) return immediateFuture(null); @@ -595,26 +556,8 @@ public class FilesystemAsyncBlobStore extends BaseAsyncBlobStore { } } - /** - * Calculates the object MD5 and returns it as eTag - * - * @param object - * @return - */ - private String getEtag(Blob object) { - try { - Payloads.calculateMD5(object, crypto.md5()); - } catch (IOException ex) { - logger.error(ex, "An error occurred calculating MD5 for object with name %s.", object.getMetadata().getName()); - Throwables.propagate(ex); - } - - String eTag = CryptoStreams.hex(object.getPayload().getContentMetadata().getContentMD5()); - return eTag; - } - private Blob copyBlob(Blob blob) { - Blob returnVal = blobFactory.create(copy(blob.getMetadata())); + Blob returnVal = blobFactory.create(BlobStoreUtils.copy(blob.getMetadata())); returnVal.setPayload(blob.getPayload()); copyPayloadHeadersToBlob(blob.getPayload(), returnVal); return returnVal; diff --git a/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/FilesystemStorageStrategy.java b/blobstore/src/main/java/org/jclouds/blobstore/LocalStorageStrategy.java similarity index 50% rename from apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/FilesystemStorageStrategy.java rename to blobstore/src/main/java/org/jclouds/blobstore/LocalStorageStrategy.java index fc648f1092..a6a6ec7b4c 100644 --- a/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/FilesystemStorageStrategy.java +++ b/blobstore/src/main/java/org/jclouds/blobstore/LocalStorageStrategy.java @@ -16,21 +16,20 @@ * specific language governing permissions and limitations * under the License. */ -package org.jclouds.filesystem.strategy; +package org.jclouds.blobstore; -import java.io.File; import java.io.IOException; import org.jclouds.blobstore.domain.Blob; import org.jclouds.blobstore.options.ListContainerOptions; -import org.jclouds.io.Payload; +import org.jclouds.domain.Location; /** - * Strategy for filesystem operations related to container and blob + * Strategy for local operations related to container and blob * * @author Alfredo "Rainbowbreeze" Morresi */ -public interface FilesystemStorageStrategy { +public interface LocalStorageStrategy { /** * Creates a new container @@ -38,7 +37,7 @@ public interface FilesystemStorageStrategy { * @param container * @return */ - boolean createContainer(String container); + boolean createContainerInLocation(String container, Location location); /** * Deletes a container and all its content @@ -58,17 +57,17 @@ public interface FilesystemStorageStrategy { * delete the container itself * @param container */ - void clearContainer(final String container); + void clearContainer(String container); /** - * Like {@link #clearContainer(String)} except you can use options to do things like recursive - * deletes, or clear at a different path than root. - * - * @param container - * what to clear - * @param options - * recursion and path to clear - */ + * Like {@link #clearContainer(String)} except you can use options to do things like recursive + * deletes, or clear at a different path than root. + * + * @param container + * what to clear + * @param options + * recursion and path to clear + */ void clearContainer(String container, ListContainerOptions options); /** @@ -78,64 +77,26 @@ public interface FilesystemStorageStrategy { Iterable getAllContainerNames(); /** - * Determines if a directory exists - * - * @param container - * container where the directory resides - * @param directory - * full path to the directory - */ - boolean directoryExists(String container, String directory); - - /** - * Creates a folder or a directory marker depending on the service - * - * @param container - * container to create the directory in - * @param directory - * full path to the directory - */ - void createDirectory(String container, String directory); - - /** - * Deletes a folder or a directory marker depending on the service - * - * @param container - * container to delete the directory from - * @param directory - * full path to the directory to delete - */ - void deleteDirectory(String container, String directory); - - - /** - * Creates a new blob - * @param name - * @return - */ - Blob newBlob(String name); - - /** - * + * Return true if a blob named by key exists * @param container * @param key * @return */ boolean blobExists(String container, String key); - /** - * Load the blob with the given key belonging to the container with the given - * name. There must exist a resource on the file system whose complete name - * is given concatenating the container name and the key - * - * @param container - * it's the name of the container the blob belongs to - * @param key - * it's the key of the blob - * - * @return the blob belonging to the given container with the given key - */ - Blob getBlob(final String containerName, final String blobName); + /** + * Load the blob with the given key belonging to the container with the given + * name. There must exist a resource on the file system whose complete name + * is given concatenating the container name and the key + * + * @param container + * it's the name of the container the blob belongs to + * @param key + * it's the key of the blob + * + * @return the blob belonging to the given container with the given key + */ + Blob getBlob(String containerName, String blobName); /** * Returns all the blobs key inside a container @@ -146,23 +107,7 @@ public interface FilesystemStorageStrategy { Iterable getBlobKeysInsideContainer(String container) throws IOException; /** - * Counts number of blobs inside a container - * @param container - * @param options - * @return - */ - long countBlobs(String container, ListContainerOptions options); - - /** - * Returns a {@link File} object that links to the blob - * @param container - * @param key - * @return - */ - File getFileForBlobKey(String container, String key); - - /** - * + * Remove blob named by the given key * @param container * @param key */ @@ -172,8 +117,17 @@ public interface FilesystemStorageStrategy { * Write a {@link Blob} into a file * @param container * @param blob + * @return etag of blob * @throws IOException */ - void putBlob(String containerName, Blob blob) throws IOException; + String putBlob(String containerName, Blob blob) throws IOException; + /** + * @param containerName name of container + * @return Location of container or null + */ + Location getLocation(String containerName); + + /** @return path separator, either / or \ */ + String getSeparator(); } diff --git a/blobstore/src/main/java/org/jclouds/blobstore/TransientAsyncBlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/TransientAsyncBlobStore.java deleted file mode 100644 index 4e6074a6a6..0000000000 --- a/blobstore/src/main/java/org/jclouds/blobstore/TransientAsyncBlobStore.java +++ /dev/null @@ -1,683 +0,0 @@ -/** - * Licensed to jclouds, Inc. (jclouds) under one or more - * contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. jclouds 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.jclouds.blobstore; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; -import static com.google.common.base.Throwables.getCausalChain; -import static com.google.common.base.Throwables.propagate; -import static com.google.common.collect.Iterables.filter; -import static com.google.common.collect.Iterables.find; -import static com.google.common.collect.Iterables.size; -import static com.google.common.collect.Iterables.transform; -import static com.google.common.collect.Maps.newHashMap; -import static com.google.common.collect.Sets.filter; -import static com.google.common.collect.Sets.newTreeSet; -import static com.google.common.io.ByteStreams.toByteArray; -import static com.google.common.util.concurrent.Futures.immediateFailedFuture; -import static com.google.common.util.concurrent.Futures.immediateFuture; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ObjectInput; -import java.io.ObjectInputStream; -import java.io.ObjectOutput; -import java.io.ObjectOutputStream; -import java.util.Collections; -import java.util.Date; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.SortedSet; -import java.util.concurrent.ExecutorService; - -import javax.annotation.Resource; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Provider; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.UriBuilder; - -import org.jclouds.Constants; -import org.jclouds.blobstore.domain.Blob; -import org.jclouds.blobstore.domain.Blob.Factory; -import org.jclouds.blobstore.domain.BlobMetadata; -import org.jclouds.blobstore.domain.MutableBlobMetadata; -import org.jclouds.blobstore.domain.MutableStorageMetadata; -import org.jclouds.blobstore.domain.PageSet; -import org.jclouds.blobstore.domain.StorageMetadata; -import org.jclouds.blobstore.domain.StorageType; -import org.jclouds.blobstore.domain.internal.MutableStorageMetadataImpl; -import org.jclouds.blobstore.domain.internal.PageSetImpl; -import org.jclouds.blobstore.functions.HttpGetOptionsListToGetOptions; -import org.jclouds.blobstore.internal.BaseAsyncBlobStore; -import org.jclouds.blobstore.options.CreateContainerOptions; -import org.jclouds.blobstore.options.GetOptions; -import org.jclouds.blobstore.options.ListContainerOptions; -import org.jclouds.blobstore.options.PutOptions; -import org.jclouds.blobstore.strategy.IfDirectoryReturnNameStrategy; -import org.jclouds.blobstore.util.BlobUtils; -import org.jclouds.collect.Memoized; -import org.jclouds.crypto.Crypto; -import org.jclouds.crypto.CryptoStreams; -import org.jclouds.date.DateService; -import org.jclouds.domain.Location; -import org.jclouds.http.HttpCommand; -import org.jclouds.http.HttpRequest; -import org.jclouds.http.HttpResponse; -import org.jclouds.http.HttpResponseException; -import org.jclouds.http.HttpUtils; -import org.jclouds.io.ContentMetadata; -import org.jclouds.io.ContentMetadataCodec; -import org.jclouds.io.MutableContentMetadata; -import org.jclouds.io.Payload; -import org.jclouds.io.Payloads; -import org.jclouds.io.payloads.ByteArrayPayload; -import org.jclouds.io.payloads.DelegatingPayload; -import org.jclouds.logging.Logger; - -import com.google.common.base.Function; -import com.google.common.base.Predicate; -import com.google.common.base.Supplier; -import com.google.common.base.Throwables; -import com.google.common.collect.Iterables; -import com.google.common.collect.Multimaps; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; - -/** - * Implementation of {@link BaseAsyncBlobStore} which keeps all data in a local Map object. - * - * @author Adrian Cole - * @author James Murty - */ -public class TransientAsyncBlobStore extends BaseAsyncBlobStore { - - @Resource - protected Logger logger = Logger.NULL; - - protected final DateService dateService; - protected final Crypto crypto; - protected final HttpGetOptionsListToGetOptions httpGetOptionsConverter; - protected final ContentMetadataCodec contentMetadataCodec; - protected final IfDirectoryReturnNameStrategy ifDirectoryReturnName; - protected final Factory blobFactory; - protected final TransientStorageStrategy storageStrategy; - protected final Provider uriBuilders; - - @Inject - protected TransientAsyncBlobStore(BlobStoreContext context, - DateService dateService, Crypto crypto, - HttpGetOptionsListToGetOptions httpGetOptionsConverter, - ContentMetadataCodec contentMetadataCodec, - IfDirectoryReturnNameStrategy ifDirectoryReturnName, - BlobUtils blobUtils, - @Named(Constants.PROPERTY_USER_THREADS) ExecutorService service, - Supplier defaultLocation, - @Memoized Supplier> locations, - Factory blobFactory, Provider uriBuilders) { - super(context, blobUtils, service, defaultLocation, locations); - this.blobFactory = blobFactory; - this.dateService = dateService; - this.crypto = crypto; - this.httpGetOptionsConverter = httpGetOptionsConverter; - this.contentMetadataCodec = contentMetadataCodec; - this.ifDirectoryReturnName = ifDirectoryReturnName; - this.storageStrategy = new TransientStorageStrategy(defaultLocation); - this.uriBuilders = uriBuilders; - } - - /** - * default maxResults is 1000 - */ - @Override - public ListenableFuture> list(final String container, ListContainerOptions options) { - - // Check if the container exists - if (!storageStrategy.containerExists(container)) - return immediateFailedFuture(cnfe(container)); - - // Loading blobs from container - Iterable blobBelongingToContainer = storageStrategy.getBlobKeysInsideContainer(container); - - SortedSet contents = newTreeSet(transform(blobBelongingToContainer, - new Function() { - public StorageMetadata apply(String key) { - Blob oldBlob = loadBlob(container, key); - checkState(oldBlob != null, "blob " + key + " is not present although it was in the list of " - + container); - checkState(oldBlob.getMetadata() != null, "blob " + container + "/" + key + " has no metadata"); - MutableBlobMetadata md = copy(oldBlob.getMetadata()); - String directoryName = ifDirectoryReturnName.execute(md); - if (directoryName != null) { - md.setName(directoryName); - md.setType(StorageType.RELATIVE_PATH); - } - return md; - } - })); - - String marker = null; - if (options != null) { - if (options.getMarker() != null) { - final String finalMarker = options.getMarker(); - StorageMetadata lastMarkerMetadata = find(contents, new Predicate() { - public boolean apply(StorageMetadata metadata) { - return metadata.getName().compareTo(finalMarker) > 0; - } - }); - contents = contents.tailSet(lastMarkerMetadata); - } - - final String prefix = options.getDir(); - if (prefix != null) { - contents = newTreeSet(filter(contents, new Predicate() { - public boolean apply(StorageMetadata o) { - return (o != null && o.getName().startsWith(prefix) && !o.getName().equals(prefix)); - } - })); - } - - int maxResults = options.getMaxResults() != null ? options.getMaxResults() : 1000; - if (!contents.isEmpty()) { - StorageMetadata lastElement = contents.last(); - contents = newTreeSet(Iterables.limit(contents, maxResults)); - if (!contents.contains(lastElement)) { - // Partial listing - marker = contents.last().getName(); - } - } - - final String delimiter = options.isRecursive() ? null : "/"; - if (delimiter != null) { - SortedSet commonPrefixes = newTreeSet( - transform(contents, new CommonPrefixes(prefix, delimiter))); - commonPrefixes.remove(CommonPrefixes.NO_PREFIX); - - contents = newTreeSet(filter(contents, new DelimiterFilter(prefix, delimiter))); - - Iterables. addAll(contents, transform(commonPrefixes, - new Function() { - public StorageMetadata apply(String o) { - MutableStorageMetadata md = new MutableStorageMetadataImpl(); - md.setType(StorageType.RELATIVE_PATH); - md.setName(o); - return md; - } - })); - } - - // trim metadata, if the response isn't supposed to be detailed. - if (!options.isDetailed()) { - for (StorageMetadata md : contents) { - md.getUserMetadata().clear(); - } - } - } - - return Futures.> immediateFuture(new PageSetImpl(contents, - marker)); - - } - - private ContainerNotFoundException cnfe(final String name) { - return new ContainerNotFoundException(name, String.format( - "container %s not in %s", name, - storageStrategy.getAllContainerNames())); - } - - public static MutableBlobMetadata copy(MutableBlobMetadata in) { - ByteArrayOutputStream bout = new ByteArrayOutputStream(); - ObjectOutput os; - try { - os = new ObjectOutputStream(bout); - os.writeObject(in); - ObjectInput is = new ObjectInputStream(new ByteArrayInputStream(bout.toByteArray())); - MutableBlobMetadata metadata = (MutableBlobMetadata) is.readObject(); - convertUserMetadataKeysToLowercase(metadata); - HttpUtils.copy(in.getContentMetadata(), metadata.getContentMetadata()); - return metadata; - } catch (Exception e) { - throw propagate(e); - } - } - - private static void convertUserMetadataKeysToLowercase(MutableBlobMetadata metadata) { - Map lowerCaseUserMetadata = newHashMap(); - for (Entry entry : metadata.getUserMetadata().entrySet()) { - lowerCaseUserMetadata.put(entry.getKey().toLowerCase(), entry.getValue()); - } - metadata.setUserMetadata(lowerCaseUserMetadata); - } - - public static MutableBlobMetadata copy(MutableBlobMetadata in, String newKey) { - MutableBlobMetadata newMd = copy(in); - newMd.setName(newKey); - return newMd; - } - - /** - * {@inheritDoc} - */ - @Override - public ListenableFuture removeBlob(final String container, final String key) { - storageStrategy.removeBlob(container, key); - return immediateFuture(null); - } - - /** - * {@inheritDoc} - */ - @Override - public ListenableFuture clearContainer(final String container) { - storageStrategy.clearContainer(container); - return immediateFuture(null); - } - - /** - * {@inheritDoc} - */ - @Override - public ListenableFuture deleteContainer(final String container) { - deleteAndVerifyContainerGone(container); - return immediateFuture(null); - } - - public ListenableFuture deleteContainerIfEmpty(final String container) { - Boolean returnVal = true; - if (storageStrategy.containerExists(container)) { - if (Iterables.isEmpty(storageStrategy.getBlobKeysInsideContainer(container))) - storageStrategy.deleteContainer(container); - else - returnVal = false; - } - return immediateFuture(returnVal); - } - - /** - * {@inheritDoc} - */ - @Override - public ListenableFuture containerExists(final String containerName) { - return immediateFuture(storageStrategy.containerExists(containerName)); - } - - /** - * {@inheritDoc} - */ - @Override - public ListenableFuture> list() { - Iterable containers = storageStrategy.getAllContainerNames(); - - return Futures.> immediateFuture(new PageSetImpl(transform( - containers, new Function() { - public StorageMetadata apply(String name) { - MutableStorageMetadata cmd = create(); - cmd.setName(name); - cmd.setType(StorageType.CONTAINER); - cmd.setLocation(storageStrategy.getLocation(name)); - return cmd; - } - }), null)); - } - - protected MutableStorageMetadata create() { - return new MutableStorageMetadataImpl(); - } - - /** - * {@inheritDoc} - */ - @Override - public ListenableFuture createContainerInLocation(final Location location, - final String name) { - boolean result = storageStrategy.createContainerInLocation(name, location); - return immediateFuture(result); - } - - private Blob loadBlob(final String container, final String key) { - logger.debug("Opening blob in container: %s - %s", container, key); - return storageStrategy.getBlob(container, key); - } - - protected static class DelimiterFilter implements Predicate { - private final String prefix; - private final String delimiter; - - public DelimiterFilter(String prefix, String delimiter) { - this.prefix = prefix; - this.delimiter = delimiter; - } - - public boolean apply(StorageMetadata metadata) { - if (prefix == null) - return metadata.getName().indexOf(delimiter) == -1; - // ensure we don't accidentally append twice - String toMatch = prefix.endsWith("/") ? prefix : prefix + delimiter; - if (metadata.getName().startsWith(toMatch)) { - String unprefixedName = metadata.getName().replaceFirst(toMatch, ""); - if (unprefixedName.equals("")) { - // we are the prefix in this case, return false - return false; - } - return unprefixedName.indexOf(delimiter) == -1; - } - return false; - } - } - - protected static class CommonPrefixes implements Function { - private final String prefix; - private final String delimiter; - public static final String NO_PREFIX = "NO_PREFIX"; - - public CommonPrefixes(String prefix, String delimiter) { - this.prefix = prefix; - this.delimiter = delimiter; - } - - public String apply(StorageMetadata metadata) { - String working = metadata.getName(); - if (prefix != null) { - // ensure we don't accidentally append twice - String toMatch = prefix.endsWith("/") ? prefix : prefix + delimiter; - if (working.startsWith(toMatch)) { - working = working.replaceFirst(toMatch, ""); - } - } - if (working.contains(delimiter)) { - return working.substring(0, working.indexOf(delimiter)); - } - return NO_PREFIX; - } - } - - public static HttpResponseException returnResponseException(int code) { - HttpResponse response = HttpResponse.builder().statusCode(code).build(); - return new HttpResponseException(new HttpCommand() { - - public int getRedirectCount() { - return 0; - } - - public int incrementRedirectCount() { - return 0; - } - - public boolean isReplayable() { - return false; - } - - public Exception getException() { - return null; - } - - public int getFailureCount() { - return 0; - } - - public int incrementFailureCount() { - return 0; - } - - public void setException(Exception exception) { - - } - - @Override - public HttpRequest getCurrentRequest() { - return HttpRequest.builder().method("GET").endpoint("http://stub").build(); - } - - @Override - public void setCurrentRequest(HttpRequest request) { - - } - - }, response); - } - - /** - * {@inheritDoc} - */ - @Override - public ListenableFuture putBlob(String containerName, Blob blob) { - checkNotNull(containerName, "containerName must be set"); - checkNotNull(blob, "blob must be set"); - String blobKey = blob.getMetadata().getName(); - - logger.debug("Put blob with key [%s] to container [%s]", blobKey, containerName); - if (!storageStrategy.containerExists(containerName)) { - return Futures.immediateFailedFuture(new IllegalStateException("containerName not found: " + containerName)); - } - - blob = createUpdatedCopyOfBlobInContainer(containerName, blob); - - storageStrategy.putBlob(containerName, blob); - - String eTag = getEtag(blob); - return immediateFuture(eTag); - } - - private Blob createUpdatedCopyOfBlobInContainer(String containerName, Blob in) { - checkNotNull(in, "blob"); - checkNotNull(in.getPayload(), "blob.payload"); - ByteArrayPayload payload = (in.getPayload() instanceof ByteArrayPayload) ? ByteArrayPayload.class.cast(in - .getPayload()) : null; - if (payload == null) - payload = (in.getPayload() instanceof DelegatingPayload) ? (DelegatingPayload.class.cast(in.getPayload()) - .getDelegate() instanceof ByteArrayPayload) ? ByteArrayPayload.class.cast(DelegatingPayload.class - .cast(in.getPayload()).getDelegate()) : null : null; - try { - if (payload == null || !(payload instanceof ByteArrayPayload)) { - MutableContentMetadata oldMd = in.getPayload().getContentMetadata(); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - in.getPayload().writeTo(out); - payload = (ByteArrayPayload) Payloads.calculateMD5(Payloads.newPayload(out.toByteArray())); - HttpUtils.copy(oldMd, payload.getContentMetadata()); - } else { - if (payload.getContentMetadata().getContentMD5() == null) - Payloads.calculateMD5(in, crypto.md5()); - } - } catch (IOException e) { - Throwables.propagate(e); - } - Blob blob = blobFactory.create(copy(in.getMetadata())); - blob.setPayload(payload); - blob.getMetadata().setContainer(containerName); - blob.getMetadata().setUri( - uriBuilders.get().scheme("mem").host(containerName).path(in.getMetadata().getName()).build()); - blob.getMetadata().setLastModified(new Date()); - String eTag = CryptoStreams.hex(payload.getContentMetadata().getContentMD5()); - blob.getMetadata().setETag(eTag); - // Set HTTP headers to match metadata - blob.getAllHeaders().replaceValues(HttpHeaders.LAST_MODIFIED, - Collections.singleton(dateService.rfc822DateFormat(blob.getMetadata().getLastModified()))); - blob.getAllHeaders().replaceValues(HttpHeaders.ETAG, Collections.singleton(eTag)); - copyPayloadHeadersToBlob(payload, blob); - blob.getAllHeaders().putAll(Multimaps.forMap(blob.getMetadata().getUserMetadata())); - return blob; - } - - private void copyPayloadHeadersToBlob(Payload payload, Blob blob) { - blob.getAllHeaders().putAll(contentMetadataCodec.toHeaders(payload.getContentMetadata())); - } - - /** - * {@inheritDoc} - */ - @Override - public ListenableFuture blobExists(final String containerName, final String key) { - if (!storageStrategy.containerExists(containerName)) - return immediateFailedFuture(cnfe(containerName)); - return immediateFuture(storageStrategy.blobExists(containerName, key)); - } - - /** - * {@inheritDoc} - */ - @Override - public ListenableFuture getBlob(final String containerName, final String key, GetOptions options) { - logger.debug("Retrieving blob with key %s from container %s", key, containerName); - // If the container doesn't exist, an exception is thrown - if (!storageStrategy.containerExists(containerName)) { - logger.debug("Container %s does not exist", containerName); - return immediateFailedFuture(cnfe(containerName)); - } - // If the blob doesn't exist, a null object is returned - if (!storageStrategy.blobExists(containerName, key)) { - logger.debug("Item %s does not exist in container %s", key, containerName); - return immediateFuture(null); - } - - Blob blob = loadBlob(containerName, key); - - if (options != null) { - if (options.getIfMatch() != null) { - if (!blob.getMetadata().getETag().equals(options.getIfMatch())) - return immediateFailedFuture(returnResponseException(412)); - } - if (options.getIfNoneMatch() != null) { - if (blob.getMetadata().getETag().equals(options.getIfNoneMatch())) - return immediateFailedFuture(returnResponseException(304)); - } - if (options.getIfModifiedSince() != null) { - Date modifiedSince = options.getIfModifiedSince(); - if (blob.getMetadata().getLastModified().before(modifiedSince)) { - HttpResponse response = HttpResponse.builder().statusCode(304).build(); - return immediateFailedFuture(new HttpResponseException(String.format("%1$s is before %2$s", blob - .getMetadata().getLastModified(), modifiedSince), null, response)); - } - - } - if (options.getIfUnmodifiedSince() != null) { - Date unmodifiedSince = options.getIfUnmodifiedSince(); - if (blob.getMetadata().getLastModified().after(unmodifiedSince)) { - HttpResponse response = HttpResponse.builder().statusCode(412).build(); - return immediateFailedFuture(new HttpResponseException(String.format("%1$s is after %2$s", blob - .getMetadata().getLastModified(), unmodifiedSince), null, response)); - } - } - blob = copyBlob(blob); - - if (options.getRanges() != null && options.getRanges().size() > 0) { - byte[] data; - try { - data = toByteArray(blob.getPayload()); - } catch (IOException e) { - return immediateFailedFuture(new RuntimeException(e)); - } - ByteArrayOutputStream out = new ByteArrayOutputStream(); - for (String s : options.getRanges()) { - // HTTP uses a closed interval while Java array indexing uses a - // half-open interval. - int offset = 0; - int last = data.length - 1; - if (s.startsWith("-")) { - offset = last - Integer.parseInt(s.substring(1)) + 1; - } else if (s.endsWith("-")) { - offset = Integer.parseInt(s.substring(0, s.length() - 1)); - } else if (s.contains("-")) { - String[] firstLast = s.split("\\-"); - offset = Integer.parseInt(firstLast[0]); - last = Integer.parseInt(firstLast[1]); - } else { - return immediateFailedFuture(new IllegalArgumentException("illegal range: " + s)); - } - - if (offset > last) { - return immediateFailedFuture(new IllegalArgumentException("illegal range: " + s)); - } - if (last + 1 > data.length) { - last = data.length - 1; - } - out.write(data, offset, last - offset + 1); - } - ContentMetadata cmd = blob.getPayload().getContentMetadata(); - byte[] byteArray = out.toByteArray(); - blob.setPayload(byteArray); - HttpUtils.copy(cmd, blob.getPayload().getContentMetadata()); - blob.getPayload().getContentMetadata().setContentLength(new Long(byteArray.length)); - } - } - checkNotNull(blob.getPayload(), "payload " + blob); - return immediateFuture(blob); - } - - /** - * {@inheritDoc} - */ - @Override - public ListenableFuture blobMetadata(final String container, final String key) { - try { - Blob blob = getBlob(container, key).get(); - return immediateFuture(blob != null ? (BlobMetadata) copy(blob.getMetadata()) : null); - } catch (Exception e) { - if (size(filter(getCausalChain(e), KeyNotFoundException.class)) >= 1) - return immediateFuture(null); - return immediateFailedFuture(e); - } - } - - /** - * Calculates the object MD5 and returns it as eTag - * - * @param object - * @return - */ - private String getEtag(Blob object) { - try { - Payloads.calculateMD5(object, crypto.md5()); - } catch (IOException ex) { - logger.error(ex, "An error occurred calculating MD5 for object with name %s.", object.getMetadata().getName()); - Throwables.propagate(ex); - } - - String eTag = CryptoStreams.hex(object.getPayload().getContentMetadata().getContentMD5()); - return eTag; - } - - private Blob copyBlob(Blob blob) { - Blob returnVal = blobFactory.create(copy(blob.getMetadata())); - returnVal.setPayload(blob.getPayload()); - copyPayloadHeadersToBlob(blob.getPayload(), returnVal); - return returnVal; - } - - @Override - protected boolean deleteAndVerifyContainerGone(final String container) { - storageStrategy.deleteContainer(container); - return storageStrategy.containerExists(container); - } - - @Override - public ListenableFuture putBlob(String container, Blob blob, PutOptions options) { - // TODO implement options - return putBlob(container, blob); - } - - @Override - public ListenableFuture createContainerInLocation(Location location, String container, - CreateContainerOptions options) { - if (options.isPublicRead()) - throw new UnsupportedOperationException("publicRead"); - return createContainerInLocation(location, container); - } -} diff --git a/blobstore/src/main/java/org/jclouds/blobstore/TransientStorageStrategy.java b/blobstore/src/main/java/org/jclouds/blobstore/TransientStorageStrategy.java index 611e93ba25..54d90677f8 100644 --- a/blobstore/src/main/java/org/jclouds/blobstore/TransientStorageStrategy.java +++ b/blobstore/src/main/java/org/jclouds/blobstore/TransientStorageStrategy.java @@ -18,37 +18,87 @@ */ package org.jclouds.blobstore; +import static com.google.common.base.Preconditions.checkNotNull; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Collections; +import java.util.Date; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import javax.inject.Provider; +import javax.inject.Inject; +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.UriBuilder; import com.google.common.base.Preconditions; import com.google.common.base.Supplier; +import com.google.common.base.Throwables; +import com.google.common.collect.Multimaps; import org.jclouds.blobstore.domain.Blob; +import org.jclouds.blobstore.domain.Blob.Factory; +import org.jclouds.blobstore.domain.MutableBlobMetadata; +import org.jclouds.blobstore.options.ListContainerOptions; +import org.jclouds.blobstore.util.BlobStoreUtils; +import org.jclouds.crypto.Crypto; +import org.jclouds.crypto.CryptoStreams; +import org.jclouds.date.DateService; import org.jclouds.domain.Location; +import org.jclouds.http.HttpUtils; +import org.jclouds.io.ContentMetadataCodec; +import org.jclouds.io.MutableContentMetadata; +import org.jclouds.io.Payload; +import org.jclouds.io.Payloads; +import org.jclouds.io.payloads.ByteArrayPayload; +import org.jclouds.io.payloads.DelegatingPayload; -public class TransientStorageStrategy { +public class TransientStorageStrategy implements LocalStorageStrategy { private final ConcurrentMap> containerToBlobs = new ConcurrentHashMap>(); private final ConcurrentMap containerToLocation = new ConcurrentHashMap(); private final Supplier defaultLocation; + private final DateService dateService; + private final Factory blobFactory; + private final Crypto crypto; + private final ContentMetadataCodec contentMetadataCodec; + private final Provider uriBuilders; - public TransientStorageStrategy(final Supplier defaultLocation) { - this.defaultLocation = Preconditions.checkNotNull(defaultLocation); + @Inject + TransientStorageStrategy(final Supplier defaultLocation, + DateService dateService, Factory blobFactory, Crypto crypto, + ContentMetadataCodec contentMetadataCodec, + Provider uriBuilders) { + this.defaultLocation = defaultLocation; + this.dateService = dateService; + this.blobFactory = blobFactory; + this.crypto = crypto; + this.contentMetadataCodec = contentMetadataCodec; + this.uriBuilders = uriBuilders; } + @Override public Iterable getAllContainerNames() { return containerToBlobs.keySet(); } + @Override public boolean containerExists(final String containerName) { return containerToBlobs.containsKey(containerName); } + @Override public void clearContainer(final String containerName) { containerToBlobs.get(containerName).clear(); } + @Override + public void clearContainer(String container, ListContainerOptions options) { + // TODO implement options + clearContainer(container); + } + + @Override public boolean createContainerInLocation(final String containerName, final Location location) { ConcurrentMap origValue = containerToBlobs.putIfAbsent( containerName, new ConcurrentHashMap()); @@ -59,36 +109,96 @@ public class TransientStorageStrategy { return true; } + @Override public void deleteContainer(final String containerName) { containerToBlobs.remove(containerName); } + @Override public boolean blobExists(final String containerName, final String blobName) { Map map = containerToBlobs.get(containerName); return map != null && map.containsKey(blobName); } + @Override public Blob getBlob(final String containerName, final String blobName) { Map map = containerToBlobs.get(containerName); return map == null ? null : map.get(blobName); } - public void putBlob(final String containerName, final Blob blob) { + @Override + public String putBlob(final String containerName, final Blob blob) throws IOException { + Blob newBlob = createUpdatedCopyOfBlobInContainer(containerName, blob); Map map = containerToBlobs.get(containerName); - map.put(blob.getMetadata().getName(), blob); + map.put(newBlob.getMetadata().getName(), newBlob); + Payloads.calculateMD5(newBlob, crypto.md5()); + String eTag = CryptoStreams.hex(newBlob.getPayload().getContentMetadata().getContentMD5()); + return eTag; } + @Override public void removeBlob(final String containerName, final String blobName) { Map map = containerToBlobs.get(containerName); if (map != null) map.remove(blobName); } + @Override public Iterable getBlobKeysInsideContainer(final String containerName) { return containerToBlobs.get(containerName).keySet(); } + @Override public Location getLocation(final String containerName) { return containerToLocation.get(containerName); } + + @Override + public String getSeparator() { + return "/"; + } + + private Blob createUpdatedCopyOfBlobInContainer(String containerName, Blob in) { + checkNotNull(in, "blob"); + checkNotNull(in.getPayload(), "blob.payload"); + ByteArrayPayload payload = (in.getPayload() instanceof ByteArrayPayload) ? ByteArrayPayload.class.cast(in + .getPayload()) : null; + if (payload == null) + payload = (in.getPayload() instanceof DelegatingPayload) ? (DelegatingPayload.class.cast(in.getPayload()) + .getDelegate() instanceof ByteArrayPayload) ? ByteArrayPayload.class.cast(DelegatingPayload.class + .cast(in.getPayload()).getDelegate()) : null : null; + try { + if (payload == null || !(payload instanceof ByteArrayPayload)) { + MutableContentMetadata oldMd = in.getPayload().getContentMetadata(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + in.getPayload().writeTo(out); + payload = (ByteArrayPayload) Payloads.calculateMD5(Payloads.newPayload(out.toByteArray())); + HttpUtils.copy(oldMd, payload.getContentMetadata()); + } else { + if (payload.getContentMetadata().getContentMD5() == null) + Payloads.calculateMD5(in, crypto.md5()); + } + } catch (IOException e) { + Throwables.propagate(e); + } + Blob blob = blobFactory.create(BlobStoreUtils.copy(in.getMetadata())); + blob.setPayload(payload); + blob.getMetadata().setContainer(containerName); + blob.getMetadata().setUri( + uriBuilders.get().scheme("mem").host(containerName).path(in.getMetadata().getName()).build()); + blob.getMetadata().setLastModified(new Date()); + String eTag = CryptoStreams.hex(payload.getContentMetadata().getContentMD5()); + blob.getMetadata().setETag(eTag); + // Set HTTP headers to match metadata + blob.getAllHeaders().replaceValues(HttpHeaders.LAST_MODIFIED, + Collections.singleton(dateService.rfc822DateFormat(blob.getMetadata().getLastModified()))); + blob.getAllHeaders().replaceValues(HttpHeaders.ETAG, Collections.singleton(eTag)); + copyPayloadHeadersToBlob(payload, blob); + blob.getAllHeaders().putAll(Multimaps.forMap(blob.getMetadata().getUserMetadata())); + return blob; + } + + private void copyPayloadHeadersToBlob(Payload payload, Blob blob) { + blob.getAllHeaders().putAll(contentMetadataCodec.toHeaders(payload.getContentMetadata())); + } } diff --git a/blobstore/src/main/java/org/jclouds/blobstore/config/TransientBlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java similarity index 94% rename from blobstore/src/main/java/org/jclouds/blobstore/config/TransientBlobStore.java rename to blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java index b088d5fa28..3c33c23f45 100644 --- a/blobstore/src/main/java/org/jclouds/blobstore/config/TransientBlobStore.java +++ b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java @@ -24,6 +24,6 @@ import org.jclouds.blobstore.BlobStore; import org.jclouds.concurrent.Timeout; @Timeout(duration = 2, timeUnit = TimeUnit.MINUTES) -public interface TransientBlobStore extends BlobStore { +public interface LocalBlobStore extends BlobStore { -} \ No newline at end of file +} diff --git a/blobstore/src/main/java/org/jclouds/blobstore/config/TransientBlobStoreContextModule.java b/blobstore/src/main/java/org/jclouds/blobstore/config/TransientBlobStoreContextModule.java index 659d27344b..e5bdb32cd6 100644 --- a/blobstore/src/main/java/org/jclouds/blobstore/config/TransientBlobStoreContextModule.java +++ b/blobstore/src/main/java/org/jclouds/blobstore/config/TransientBlobStoreContextModule.java @@ -21,8 +21,10 @@ package org.jclouds.blobstore.config; import org.jclouds.blobstore.AsyncBlobStore; import org.jclouds.blobstore.BlobRequestSigner; import org.jclouds.blobstore.BlobStore; -import org.jclouds.blobstore.TransientAsyncBlobStore; +import org.jclouds.blobstore.LocalAsyncBlobStore; +import org.jclouds.blobstore.LocalStorageStrategy; import org.jclouds.blobstore.TransientBlobRequestSigner; +import org.jclouds.blobstore.TransientStorageStrategy; import org.jclouds.blobstore.attr.ConsistencyModel; import org.jclouds.rest.config.BinderUtils; @@ -37,13 +39,14 @@ import com.google.inject.AbstractModule; public class TransientBlobStoreContextModule extends AbstractModule { @Override protected void configure() { - bind(AsyncBlobStore.class).to(TransientAsyncBlobStore.class).asEagerSingleton(); + bind(AsyncBlobStore.class).to(LocalAsyncBlobStore.class).asEagerSingleton(); // forward all requests from TransientBlobStore to TransientAsyncBlobStore. needs above binding as cannot proxy a class - BinderUtils.bindClient(binder(), TransientBlobStore.class, AsyncBlobStore.class, ImmutableMap., Class>of()); + BinderUtils.bindClient(binder(), LocalBlobStore.class, AsyncBlobStore.class, ImmutableMap., Class>of()); install(new BlobStoreObjectModule()); install(new BlobStoreMapModule()); - bind(BlobStore.class).to(TransientBlobStore.class); + bind(BlobStore.class).to(LocalBlobStore.class); bind(ConsistencyModel.class).toInstance(ConsistencyModel.STRICT); + bind(LocalStorageStrategy.class).to(TransientStorageStrategy.class); bind(BlobRequestSigner.class).to(TransientBlobRequestSigner.class); } diff --git a/blobstore/src/main/java/org/jclouds/blobstore/util/BlobStoreUtils.java b/blobstore/src/main/java/org/jclouds/blobstore/util/BlobStoreUtils.java index 15e3554864..bc1bd98f41 100644 --- a/blobstore/src/main/java/org/jclouds/blobstore/util/BlobStoreUtils.java +++ b/blobstore/src/main/java/org/jclouds/blobstore/util/BlobStoreUtils.java @@ -20,8 +20,15 @@ package org.jclouds.blobstore.util; import static com.google.common.base.Preconditions.checkNotNull; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.ObjectInput; +import java.io.ObjectInputStream; +import java.io.ObjectOutput; +import java.io.ObjectOutputStream; +import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -32,6 +39,7 @@ import org.jclouds.blobstore.ContainerNotFoundException; import org.jclouds.blobstore.KeyNotFoundException; import org.jclouds.blobstore.domain.Blob; import org.jclouds.blobstore.domain.BlobMetadata; +import org.jclouds.blobstore.domain.MutableBlobMetadata; import org.jclouds.blobstore.domain.StorageMetadata; import org.jclouds.blobstore.functions.BlobName; import org.jclouds.functions.ExceptionToValueOrPropagate; @@ -41,6 +49,8 @@ import org.jclouds.http.HttpUtils; import org.jclouds.rest.internal.GeneratedHttpRequest; import org.jclouds.util.Strings2; +import com.google.common.base.Throwables; +import com.google.common.collect.Maps; import com.google.common.reflect.TypeToken; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; @@ -159,4 +169,34 @@ public class BlobStoreUtils { public static Iterable getSupportedProviders() { return org.jclouds.rest.Providers.getSupportedProvidersOfType(TypeToken.of(BlobStoreContext.class)); } -} \ No newline at end of file + + public static MutableBlobMetadata copy(MutableBlobMetadata in) { + ByteArrayOutputStream bout = new ByteArrayOutputStream(); + ObjectOutput os; + try { + os = new ObjectOutputStream(bout); + os.writeObject(in); + ObjectInput is = new ObjectInputStream(new ByteArrayInputStream(bout.toByteArray())); + MutableBlobMetadata metadata = (MutableBlobMetadata) is.readObject(); + convertUserMetadataKeysToLowercase(metadata); + HttpUtils.copy(in.getContentMetadata(), metadata.getContentMetadata()); + return metadata; + } catch (Exception e) { + throw Throwables.propagate(e); + } + } + + public static MutableBlobMetadata copy(MutableBlobMetadata in, String newKey) { + MutableBlobMetadata newMd = BlobStoreUtils.copy(in); + newMd.setName(newKey); + return newMd; + } + + private static void convertUserMetadataKeysToLowercase(MutableBlobMetadata metadata) { + Map lowerCaseUserMetadata = Maps.newHashMap(); + for (Map.Entry entry : metadata.getUserMetadata().entrySet()) { + lowerCaseUserMetadata.put(entry.getKey().toLowerCase(), entry.getValue()); + } + metadata.setUserMetadata(lowerCaseUserMetadata); + } +} diff --git a/blobstore/src/test/java/org/jclouds/blobstore/TransientBlobRequestSignerTest.java b/blobstore/src/test/java/org/jclouds/blobstore/TransientBlobRequestSignerTest.java index 39a0679a32..445accb319 100644 --- a/blobstore/src/test/java/org/jclouds/blobstore/TransientBlobRequestSignerTest.java +++ b/blobstore/src/test/java/org/jclouds/blobstore/TransientBlobRequestSignerTest.java @@ -42,7 +42,7 @@ import com.google.inject.TypeLiteral; */ // NOTE:without testName, this will not call @Before* and fail w/NPE during surefire @Test(groups = "unit", testName = "TransientBlobRequestSignerTest") -public class TransientBlobRequestSignerTest extends BaseAsyncClientTest { +public class TransientBlobRequestSignerTest extends BaseAsyncClientTest { private BlobRequestSigner signer; private Provider blobFactory; @@ -121,8 +121,8 @@ public class TransientBlobRequestSignerTest extends BaseAsyncClientTest> createTypeLiteral() { - return new TypeLiteral>() { + protected TypeLiteral> createTypeLiteral() { + return new TypeLiteral>() { }; } diff --git a/blobstore/src/test/java/org/jclouds/blobstore/binders/BindBlobToMultipartFormTest.java b/blobstore/src/test/java/org/jclouds/blobstore/binders/BindBlobToMultipartFormTest.java index 94a37faecc..f5325516b0 100644 --- a/blobstore/src/test/java/org/jclouds/blobstore/binders/BindBlobToMultipartFormTest.java +++ b/blobstore/src/test/java/org/jclouds/blobstore/binders/BindBlobToMultipartFormTest.java @@ -65,8 +65,8 @@ public class BindBlobToMultipartFormTest { HttpRequest request = HttpRequest.builder().method("GET").endpoint("http://localhost:8001").build(); binder.bindToRequest(request, TEST_BLOB); - assertEquals(Strings2.toStringAndClose(request.getPayload().getInput()), EXPECTS); - assertEquals(request.getPayload().getContentMetadata().getContentLength(), new Long(113)); + assertEquals(Strings2.toString(request.getPayload()), EXPECTS); + assertEquals(request.getPayload().getContentMetadata().getContentLength(), Long.valueOf(113)); assertEquals(request.getPayload().getContentMetadata().getContentType(), "multipart/form-data; boundary=" + BOUNDARY); diff --git a/blobstore/src/test/java/org/jclouds/blobstore/functions/ParseBlobFromHeadersAndHttpContentTest.java b/blobstore/src/test/java/org/jclouds/blobstore/functions/ParseBlobFromHeadersAndHttpContentTest.java index 1cc15cda35..693087bc76 100644 --- a/blobstore/src/test/java/org/jclouds/blobstore/functions/ParseBlobFromHeadersAndHttpContentTest.java +++ b/blobstore/src/test/java/org/jclouds/blobstore/functions/ParseBlobFromHeadersAndHttpContentTest.java @@ -85,7 +85,7 @@ public class ParseBlobFromHeadersAndHttpContentTest { replay(metadataParser); Blob object = callable.apply(response); - assertEquals(object.getPayload().getContentMetadata().getContentLength(), new Long(10485760)); + assertEquals(object.getPayload().getContentMetadata().getContentLength(), Long.valueOf(10485760)); assertEquals(object.getAllHeaders().get("Content-Range"), Collections.singletonList("0-10485759/20232760")); } diff --git a/blobstore/src/test/java/org/jclouds/blobstore/functions/ReturnFalseOnContainerNotFoundTest.java b/blobstore/src/test/java/org/jclouds/blobstore/functions/ReturnFalseOnContainerNotFoundTest.java index 8742cc1172..ae094c7a31 100644 --- a/blobstore/src/test/java/org/jclouds/blobstore/functions/ReturnFalseOnContainerNotFoundTest.java +++ b/blobstore/src/test/java/org/jclouds/blobstore/functions/ReturnFalseOnContainerNotFoundTest.java @@ -33,7 +33,7 @@ public class ReturnFalseOnContainerNotFoundTest { @Test public void testFoundIsFalse() throws SecurityException, NoSuchMethodException { - assertEquals(fn.apply(new ContainerNotFoundException()), new Boolean(false)); + assertEquals(fn.apply(new ContainerNotFoundException()), Boolean.FALSE); } @Test(expectedExceptions = { RuntimeException.class }) diff --git a/blobstore/src/test/java/org/jclouds/blobstore/functions/ReturnFalseOnKeyNotFoundTest.java b/blobstore/src/test/java/org/jclouds/blobstore/functions/ReturnFalseOnKeyNotFoundTest.java index efd19bfae3..a6f02fcbd0 100644 --- a/blobstore/src/test/java/org/jclouds/blobstore/functions/ReturnFalseOnKeyNotFoundTest.java +++ b/blobstore/src/test/java/org/jclouds/blobstore/functions/ReturnFalseOnKeyNotFoundTest.java @@ -33,7 +33,7 @@ public class ReturnFalseOnKeyNotFoundTest { @Test public void testFoundIsFalse() throws SecurityException, NoSuchMethodException { - assertEquals(fn.apply(new KeyNotFoundException()), new Boolean(false)); + assertEquals(fn.apply(new KeyNotFoundException()), Boolean.FALSE); } @Test(expectedExceptions = { RuntimeException.class }) diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java index 20616a16b0..68e7cc41a2 100644 --- a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java +++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java @@ -637,7 +637,7 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest { protected void validateMetadata(BlobMetadata metadata) throws IOException { assert metadata.getContentMetadata().getContentType().startsWith("text/plain") : metadata.getContentMetadata() .getContentType(); - assertEquals(metadata.getContentMetadata().getContentLength(), new Long(TEST_STRING.length())); + assertEquals(metadata.getContentMetadata().getContentLength(), Long.valueOf(TEST_STRING.length())); assertEquals(metadata.getUserMetadata().get("adrian"), "powderpuff"); checkMD5(metadata); } diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobSignerLiveTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobSignerLiveTest.java index 9b9a1402af..200f4399b6 100644 --- a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobSignerLiveTest.java +++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobSignerLiveTest.java @@ -67,7 +67,7 @@ public class BaseBlobSignerLiveTest extends BaseBlobStoreIntegrationTest { assertConsistencyAwareContainerSize(container, 1); HttpRequest request = view.getSigner().signGetBlob(container, name); assertEquals(request.getFilters().size(), 0); - assertEquals(Strings2.toStringAndClose(view.utils().http().invoke(request).getPayload().getInput()), text); + assertEquals(Strings2.toString(view.utils().http().invoke(request).getPayload()), text); } finally { returnContainer(container); } @@ -85,7 +85,7 @@ public class BaseBlobSignerLiveTest extends BaseBlobStoreIntegrationTest { assertConsistencyAwareContainerSize(container, 1); HttpRequest request = view.getSigner().signGetBlob(container, name, range(0, 1)); assertEquals(request.getFilters().size(), 0); - assertEquals(Strings2.toStringAndClose(view.utils().http().invoke(request).getPayload().getInput()), "fo"); + assertEquals(Strings2.toString(view.utils().http().invoke(request).getPayload()), "fo"); } finally { returnContainer(container); } @@ -101,7 +101,7 @@ public class BaseBlobSignerLiveTest extends BaseBlobStoreIntegrationTest { try { HttpRequest request = view.getSigner().signPutBlob(container, blob); assertEquals(request.getFilters().size(), 0); - Strings2.toStringAndClose(view.utils().http().invoke(request).getPayload().getInput()); + Strings2.toString(view.utils().http().invoke(request).getPayload()); assertConsistencyAwareContainerSize(container, 1); } finally { returnContainer(container); diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java index 5ed397cb01..6a4ec3da1a 100644 --- a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java +++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java @@ -88,7 +88,7 @@ public class BaseContainerIntegrationTest extends BaseBlobStoreIntegrationTest { assert metadata.getContentMetadata().getContentType().startsWith("text/plain") : metadata.getContentMetadata() .getContentType(); - assertEquals(metadata.getContentMetadata().getContentLength(), new Long(TEST_STRING.length())); + assertEquals(metadata.getContentMetadata().getContentLength(), Long.valueOf(TEST_STRING.length())); assertEquals(metadata.getUserMetadata().get("adrian"), "powderpuff"); checkMD5(metadata); } finally { diff --git a/blobstore/src/test/java/org/jclouds/blobstore/options/ListOptionsTest.java b/blobstore/src/test/java/org/jclouds/blobstore/options/ListOptionsTest.java index 7965112505..db2e5b09bc 100644 --- a/blobstore/src/test/java/org/jclouds/blobstore/options/ListOptionsTest.java +++ b/blobstore/src/test/java/org/jclouds/blobstore/options/ListOptionsTest.java @@ -64,7 +64,7 @@ public class ListOptionsTest { ListContainerOptions options = new ListContainerOptions(); options.inDirectory("test").maxResults(1); assertEquals(options.getDir(), "test"); - assertEquals(options.getMaxResults(), new Integer(1)); + assertEquals(options.getMaxResults(), Integer.valueOf(1)); } @@ -108,7 +108,7 @@ public class ListOptionsTest { public void testMaxResults() { ListContainerOptions options = new ListContainerOptions(); options.maxResults(1000); - assertEquals(options.getMaxResults(), new Integer(1000)); + assertEquals(options.getMaxResults(), Integer.valueOf(1000)); } @Test @@ -120,7 +120,7 @@ public class ListOptionsTest { @Test public void testMaxResultsStatic() { ListContainerOptions options = maxResults(1000); - assertEquals(options.getMaxResults(), new Integer(1000)); + assertEquals(options.getMaxResults(), Integer.valueOf(1000)); } @Test(expectedExceptions = IllegalArgumentException.class) diff --git a/common/aws/src/main/java/org/jclouds/aws/handlers/ParseAWSErrorFromXmlContent.java b/common/aws/src/main/java/org/jclouds/aws/handlers/ParseAWSErrorFromXmlContent.java index 615801b439..fa4b7da7e5 100644 --- a/common/aws/src/main/java/org/jclouds/aws/handlers/ParseAWSErrorFromXmlContent.java +++ b/common/aws/src/main/java/org/jclouds/aws/handlers/ParseAWSErrorFromXmlContent.java @@ -81,7 +81,7 @@ public class ParseAWSErrorFromXmlContent implements HttpErrorHandler { } } else { try { - message = Strings2.toStringAndClose(response.getPayload().getInput()); + message = Strings2.toString(response.getPayload()); exception = new HttpResponseException(command, response, message); } catch (IOException e) { } diff --git a/common/azure/src/main/java/org/jclouds/azure/storage/handlers/ParseAzureStorageErrorFromXmlContent.java b/common/azure/src/main/java/org/jclouds/azure/storage/handlers/ParseAzureStorageErrorFromXmlContent.java index 017d29356a..6da5961e33 100644 --- a/common/azure/src/main/java/org/jclouds/azure/storage/handlers/ParseAzureStorageErrorFromXmlContent.java +++ b/common/azure/src/main/java/org/jclouds/azure/storage/handlers/ParseAzureStorageErrorFromXmlContent.java @@ -67,7 +67,7 @@ public class ParseAzureStorageErrorFromXmlContent implements HttpErrorHandler { if (response.getPayload() != null) { String contentType = response.getPayload().getContentMetadata().getContentType(); if (contentType != null && (contentType.indexOf("xml") != -1 || contentType.indexOf("unknown") != -1) - && !new Long(0).equals(response.getPayload().getContentMetadata().getContentLength())) { + && !Long.valueOf(0).equals(response.getPayload().getContentMetadata().getContentLength())) { try { error = utils.parseAzureStorageErrorFromContent(command, response, response.getPayload().getInput()); if (error != null) { @@ -76,14 +76,14 @@ public class ParseAzureStorageErrorFromXmlContent implements HttpErrorHandler { } } catch (RuntimeException e) { try { - message = Strings2.toStringAndClose(response.getPayload().getInput()); + message = Strings2.toString(response.getPayload()); exception = new HttpResponseException(command, response, message); } catch (IOException e1) { } } } else { try { - message = Strings2.toStringAndClose(response.getPayload().getInput()); + message = Strings2.toString(response.getPayload()); exception = new HttpResponseException(command, response, message); } catch (IOException e) { } diff --git a/common/azure/src/main/java/org/jclouds/azure/storage/options/ListOptions.java b/common/azure/src/main/java/org/jclouds/azure/storage/options/ListOptions.java index c84edab33b..d58a868e3b 100644 --- a/common/azure/src/main/java/org/jclouds/azure/storage/options/ListOptions.java +++ b/common/azure/src/main/java/org/jclouds/azure/storage/options/ListOptions.java @@ -94,7 +94,7 @@ public class ListOptions extends BaseHttpRequestOptions { public Integer getMaxResults() { String maxresults = getFirstQueryOrNull("maxresults"); - return (maxresults != null) ? new Integer(maxresults) : null; + return (maxresults != null) ? Integer.valueOf(maxresults) : null; } public static class Builder { diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/binders/BindVAppConfigurationToXmlPayload.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/binders/BindVAppConfigurationToXmlPayload.java index 9fdd47ae96..f551a1ec7a 100644 --- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/binders/BindVAppConfigurationToXmlPayload.java +++ b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/binders/BindVAppConfigurationToXmlPayload.java @@ -137,7 +137,7 @@ public class BindVAppConfigurationToXmlPayload implements MapBinder, Function { String statusString = attributes.get("status"); status = Status.fromValue(statusString); if (attributes.containsKey("size")) - size = new Long(attributes.get("size")); + size = Long.valueOf(attributes.get("size")); } else if (qName.equals("Link")) { // type should never be missing if (attributes.containsKey("type")) { if (attributes.get("type").equals(TerremarkVCloudMediaType.VDC_XML)) { diff --git a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/options/InstantiateVAppTemplateOptionsTest.java b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/options/InstantiateVAppTemplateOptionsTest.java index 3cde149530..7dd3f43618 100644 --- a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/options/InstantiateVAppTemplateOptionsTest.java +++ b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/options/InstantiateVAppTemplateOptionsTest.java @@ -52,13 +52,13 @@ public class InstantiateVAppTemplateOptionsTest { public void testCustomizeOnInstantiate() { InstantiateVAppTemplateOptions options = new InstantiateVAppTemplateOptions(); options.customizeOnInstantiate(true); - assertEquals(options.shouldCustomizeOnInstantiate(), new Boolean(true)); + assertEquals(options.shouldCustomizeOnInstantiate(), Boolean.TRUE); } @Test public void testCustomizeOnInstantiateStatic() { InstantiateVAppTemplateOptions options = customizeOnInstantiate(true); - assertEquals(options.shouldCustomizeOnInstantiate(), new Boolean(true)); + assertEquals(options.shouldCustomizeOnInstantiate(), Boolean.TRUE); } @Test diff --git a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/xml/ovf/VAppHandlerTest.java b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/xml/ovf/VAppHandlerTest.java index cabc10efaa..2495dab46b 100644 --- a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/xml/ovf/VAppHandlerTest.java +++ b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/xml/ovf/VAppHandlerTest.java @@ -119,7 +119,7 @@ public class VAppHandlerTest extends BaseHandlerTest { .virtualQuantity(104857l).build()); VApp expects = new VAppImpl("centos53", URI - .create("http://10.150.4.49/api/v0.8/vApp/10"), Status.ON, new Long(104857), new ReferenceTypeImpl(null, + .create("http://10.150.4.49/api/v0.8/vApp/10"), Status.ON, Long.valueOf(104857), new ReferenceTypeImpl(null, "application/vnd.vmware.vcloud.vdc+xml", URI.create("http://10.150.4.49/api/v0.8/vdc/4")), networkToAddresses, null, "Other Linux (32-bit)", system, resourceAllocations); assertEquals(result.getHref(), expects.getHref()); @@ -167,7 +167,7 @@ public class VAppHandlerTest extends BaseHandlerTest { .virtualQuantity(10485760l).build()); VApp expects = new VAppImpl("m1", URI.create("http://localhost:8000/api/v0.8/vApp/80"), - Status.ON, new Long(10485760), new ReferenceTypeImpl(null, "application/vnd.vmware.vcloud.vdc+xml", URI + Status.ON, Long.valueOf(10485760), new ReferenceTypeImpl(null, "application/vnd.vmware.vcloud.vdc+xml", URI .create("http://localhost:8000/api/v0.8/vdc/28")), networkToAddresses, null, "Microsoft Windows XP Professional (32-bit)", system, resourceAllocations); assertEquals(result.getHref(), expects.getHref()); diff --git a/compute/src/main/java/org/jclouds/cim/ResourceAllocationSettingData.java b/compute/src/main/java/org/jclouds/cim/ResourceAllocationSettingData.java index 082418e6c5..f113f4cada 100644 --- a/compute/src/main/java/org/jclouds/cim/ResourceAllocationSettingData.java +++ b/compute/src/main/java/org/jclouds/cim/ResourceAllocationSettingData.java @@ -345,7 +345,7 @@ public class ResourceAllocationSettingData extends ManagedElement { }); public static ResourceType fromValue(String type) { - return RESOURCE_TYPE_BY_ID.get(new Integer(checkNotNull(type, "type"))); + return RESOURCE_TYPE_BY_ID.get(Integer.valueOf(checkNotNull(type, "type"))); } } @@ -394,7 +394,7 @@ public class ResourceAllocationSettingData extends ManagedElement { }); public static ConsumerVisibility fromValue(String behavior) { - return MAPPING_BEHAVIOR_BY_ID.get(new Integer(checkNotNull(behavior, "behavior"))); + return MAPPING_BEHAVIOR_BY_ID.get(Integer.valueOf(checkNotNull(behavior, "behavior"))); } } @@ -428,7 +428,7 @@ public class ResourceAllocationSettingData extends ManagedElement { }); public static MappingBehavior fromValue(String behavior) { - return MAPPING_BEHAVIOR_BY_ID.get(new Integer(checkNotNull(behavior, "behavior"))); + return MAPPING_BEHAVIOR_BY_ID.get(Integer.valueOf(checkNotNull(behavior, "behavior"))); } } diff --git a/compute/src/main/java/org/jclouds/cim/VirtualSystemSettingData.java b/compute/src/main/java/org/jclouds/cim/VirtualSystemSettingData.java index 16ad25d4bd..81e5124b9e 100644 --- a/compute/src/main/java/org/jclouds/cim/VirtualSystemSettingData.java +++ b/compute/src/main/java/org/jclouds/cim/VirtualSystemSettingData.java @@ -270,7 +270,7 @@ public class VirtualSystemSettingData extends ManagedElement { }); public static AutomaticRecoveryAction fromValue(String automaticRecoveryAction) { - return AUTOMATIC_RECOVERY_ACTION_BY_ID.get(new Integer(checkNotNull(automaticRecoveryAction, + return AUTOMATIC_RECOVERY_ACTION_BY_ID.get(Integer.valueOf(checkNotNull(automaticRecoveryAction, "automaticRecoveryAction"))); } } @@ -307,7 +307,7 @@ public class VirtualSystemSettingData extends ManagedElement { }); public static AutomaticShutdownAction fromValue(String automaticShutdownAction) { - return AUTOMATIC_SHUTDOWN_ACTION_BY_ID.get(new Integer(checkNotNull(automaticShutdownAction, + return AUTOMATIC_SHUTDOWN_ACTION_BY_ID.get(Integer.valueOf(checkNotNull(automaticShutdownAction, "automaticShutdownAction"))); } } @@ -344,7 +344,7 @@ public class VirtualSystemSettingData extends ManagedElement { }); public static AutomaticStartupAction fromValue(String automaticStartupAction) { - return AUTOMATIC_STARTUP_ACTION_BY_ID.get(new Integer(checkNotNull(automaticStartupAction, + return AUTOMATIC_STARTUP_ACTION_BY_ID.get(Integer.valueOf(checkNotNull(automaticStartupAction, "automaticStartupAction"))); } } diff --git a/compute/src/main/java/org/jclouds/cim/xml/ResourceAllocationSettingDataHandler.java b/compute/src/main/java/org/jclouds/cim/xml/ResourceAllocationSettingDataHandler.java index 5a28216408..70b7dbe381 100644 --- a/compute/src/main/java/org/jclouds/cim/xml/ResourceAllocationSettingDataHandler.java +++ b/compute/src/main/java/org/jclouds/cim/xml/ResourceAllocationSettingDataHandler.java @@ -67,13 +67,13 @@ public class ResourceAllocationSettingDataHandler extends ParseSax.HandlerWithRe } else if (equalsOrSuffix(qName, "AllocationUnits")) { builder.allocationUnits(current); } else if (equalsOrSuffix(qName, "AutomaticAllocation")) { - builder.automaticAllocation(new Boolean(current)); + builder.automaticAllocation(Boolean.valueOf(current)); } else if (equalsOrSuffix(qName, "AutomaticDeallocation")) { - builder.automaticDeallocation(new Boolean(current)); + builder.automaticDeallocation(Boolean.valueOf(current)); } else if (equalsOrSuffix(qName, "ConsumerVisibility")) { builder.consumerVisibility(ConsumerVisibility.fromValue(current)); } else if (equalsOrSuffix(qName, "Limit")) { - builder.limit(new Long(current)); + builder.limit(Long.valueOf(current)); } else if (equalsOrSuffix(qName, "MappingBehavior")) { builder.mappingBehavior(MappingBehavior.fromValue(current)); } else if (equalsOrSuffix(qName, "OtherResourceType")) { @@ -83,17 +83,17 @@ public class ResourceAllocationSettingDataHandler extends ParseSax.HandlerWithRe } else if (equalsOrSuffix(qName, "PoolID")) { builder.poolID(current); } else if (equalsOrSuffix(qName, "Reservation")) { - builder.reservation(new Long(current)); + builder.reservation(Long.valueOf(current)); } else if (equalsOrSuffix(qName, "ResourceSubType")) { builder.resourceSubType(current); } else if (equalsOrSuffix(qName, "ResourceType")) { builder.resourceType(ResourceType.fromValue(current)); } else if (equalsOrSuffix(qName, "VirtualQuantity")) { - builder.virtualQuantity(new Long(current)); + builder.virtualQuantity(Long.valueOf(current)); } else if (equalsOrSuffix(qName, "VirtualQuantityUnits")) { builder.virtualQuantityUnits(current); } else if (equalsOrSuffix(qName, "Weight")) { - builder.weight(new Integer(current)); + builder.weight(Integer.valueOf(current)); } else if (equalsOrSuffix(qName, "Connection")) { builder.connection(current); } else if (equalsOrSuffix(qName, "HostResource")) { diff --git a/compute/src/main/java/org/jclouds/cim/xml/VirtualSystemSettingDataHandler.java b/compute/src/main/java/org/jclouds/cim/xml/VirtualSystemSettingDataHandler.java index 2a05e79d20..c537722ad9 100644 --- a/compute/src/main/java/org/jclouds/cim/xml/VirtualSystemSettingDataHandler.java +++ b/compute/src/main/java/org/jclouds/cim/xml/VirtualSystemSettingDataHandler.java @@ -79,7 +79,7 @@ public class VirtualSystemSettingDataHandler extends ParseSax.HandlerWithResult< // TODO parse the format for intervals: ddddddddhhmmss.mmmmmm:000 builder.automaticStartupActionDelay(null); } else if (equalsOrSuffix(qName, "AutomaticStartupActionSequenceNumber")) { - builder.automaticStartupActionSequenceNumber(new Integer(current)); + builder.automaticStartupActionSequenceNumber(Integer.valueOf(current)); } else if (equalsOrSuffix(qName, "ConfigurationDataRoot")) { builder.configurationDataRoot(URI.create(current)); } else if (equalsOrSuffix(qName, "ConfigurationFile")) { diff --git a/compute/src/main/java/org/jclouds/ovf/xml/DiskSectionHandler.java b/compute/src/main/java/org/jclouds/ovf/xml/DiskSectionHandler.java index 47c863e728..e7564f563d 100644 --- a/compute/src/main/java/org/jclouds/ovf/xml/DiskSectionHandler.java +++ b/compute/src/main/java/org/jclouds/ovf/xml/DiskSectionHandler.java @@ -67,7 +67,7 @@ public class DiskSectionHandler extends SectionHandler> /home/users/defaultAdminUsername/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE' publicKey diff --git a/compute/src/test/resources/initscript_with_jboss.sh b/compute/src/test/resources/initscript_with_jboss.sh index 5101010a90..786fc9b809 100644 --- a/compute/src/test/resources/initscript_with_jboss.sh +++ b/compute/src/test/resources/initscript_with_jboss.sh @@ -202,7 +202,7 @@ END_OF_JCLOUDS_SCRIPT chmod 0440 /etc/sudoers mkdir -p /home/users groupadd -f wheel - useradd -c web -s /bin/bash -g wheel -m -d /home/users/web -p 'crypt(randompassword)' web + useradd -c 'web' -s /bin/bash -g wheel -m -d /home/users/web -p 'crypt(randompassword)' web mkdir -p /home/users/web/.ssh cat >> /home/users/web/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE' publicKey diff --git a/compute/src/test/resources/runscript_adminUpdate.sh b/compute/src/test/resources/runscript_adminUpdate.sh index c9c7791e12..f3aa82e8e0 100644 --- a/compute/src/test/resources/runscript_adminUpdate.sh +++ b/compute/src/test/resources/runscript_adminUpdate.sh @@ -91,7 +91,7 @@ END_OF_JCLOUDS_SCRIPT chmod 0440 /etc/sudoers mkdir -p /over/ridden groupadd -f wheel - useradd -c foo -s /bin/bash -g wheel -m -d /over/ridden/foo -p 'crypt(randompassword)' foo + useradd -c 'foo' -s /bin/bash -g wheel -m -d /over/ridden/foo -p 'crypt(randompassword)' foo mkdir -p /over/ridden/foo/.ssh cat >> /over/ridden/foo/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE' publicKey diff --git a/core/src/main/java/org/jclouds/domain/LocationScope.java b/core/src/main/java/org/jclouds/domain/LocationScope.java index eefbbe3c1e..1ee8836829 100644 --- a/core/src/main/java/org/jclouds/domain/LocationScope.java +++ b/core/src/main/java/org/jclouds/domain/LocationScope.java @@ -25,6 +25,18 @@ package org.jclouds.domain; */ public enum LocationScope { - PROVIDER, REGION, ZONE, NETWORK, RACK, HOST; + PROVIDER, + REGION, + ZONE, + /** + * @see cimi system docs + */ + SYSTEM, + /** + * E.g. the DMZ segment, secure segment. + */ + NETWORK, + RACK, + HOST; } \ No newline at end of file diff --git a/core/src/main/java/org/jclouds/domain/LoginCredentials.java b/core/src/main/java/org/jclouds/domain/LoginCredentials.java index c22f013e99..68866b955c 100644 --- a/core/src/main/java/org/jclouds/domain/LoginCredentials.java +++ b/core/src/main/java/org/jclouds/domain/LoginCredentials.java @@ -64,6 +64,8 @@ public class LoginCredentials extends Credentials { public Builder password(String password) { this.password = Optional.fromNullable(password); + if (privateKey == null) + noPrivateKey(); return this; } @@ -74,6 +76,8 @@ public class LoginCredentials extends Credentials { public Builder privateKey(String privateKey) { this.privateKey = Optional.fromNullable(privateKey); + if (password == null) + noPassword(); return this; } diff --git a/core/src/main/java/org/jclouds/events/config/EventBusModule.java b/core/src/main/java/org/jclouds/events/config/EventBusModule.java index d7aa3fd864..6e215deb62 100644 --- a/core/src/main/java/org/jclouds/events/config/EventBusModule.java +++ b/core/src/main/java/org/jclouds/events/config/EventBusModule.java @@ -33,6 +33,7 @@ import com.google.common.eventbus.AsyncEventBus; import com.google.common.eventbus.EventBus; import com.google.inject.AbstractModule; import com.google.inject.Provides; +import com.google.inject.Scopes; /** * Configures the {@link EventBus} to be used in the platform. @@ -79,7 +80,7 @@ public class EventBusModule extends AbstractModule { */ @Override protected void configure() { - bind(EventBus.class).annotatedWith(AsyncBus.class).to(AsyncEventBus.class); + bind(EventBus.class).annotatedWith(AsyncBus.class).to(AsyncEventBus.class).in(Scopes.SINGLETON); } } diff --git a/core/src/main/java/org/jclouds/http/HttpResponseException.java b/core/src/main/java/org/jclouds/http/HttpResponseException.java index b1e03d4d03..f717a6f16d 100644 --- a/core/src/main/java/org/jclouds/http/HttpResponseException.java +++ b/core/src/main/java/org/jclouds/http/HttpResponseException.java @@ -88,7 +88,7 @@ public class HttpResponseException extends RuntimeException { && request.getPayload().getContentMetadata().getContentLength() < 1024) { try { return String.format(" [%s] ", request.getPayload() instanceof StringPayload ? request.getPayload() - .getRawContent() : Strings2.toStringAndClose(request.getPayload().getInput())); + .getRawContent() : Strings2.toString(request.getPayload())); } catch (IOException e) { } } diff --git a/core/src/main/java/org/jclouds/http/functions/ParseURIFromListOrLocationHeaderIf20x.java b/core/src/main/java/org/jclouds/http/functions/ParseURIFromListOrLocationHeaderIf20x.java index 64199b44c4..de47f00a68 100644 --- a/core/src/main/java/org/jclouds/http/functions/ParseURIFromListOrLocationHeaderIf20x.java +++ b/core/src/main/java/org/jclouds/http/functions/ParseURIFromListOrLocationHeaderIf20x.java @@ -61,7 +61,7 @@ public class ParseURIFromListOrLocationHeaderIf20x implements Function header : headers.entries()) { if (!chunked && CONTENT_LENGTH.equalsIgnoreCase(header.getKey())) { - contentMetadata.setContentLength(new Long(header.getValue())); + contentMetadata.setContentLength(Long.valueOf(header.getValue())); } else if ("Content-MD5".equalsIgnoreCase(header.getKey())) { contentMetadata.setContentMD5(CryptoStreams.base64(header.getValue())); } else if (CONTENT_TYPE.equalsIgnoreCase(header.getKey())) { diff --git a/core/src/main/java/org/jclouds/io/payloads/ByteArrayPayload.java b/core/src/main/java/org/jclouds/io/payloads/ByteArrayPayload.java index bd26bbdd84..3778666c14 100644 --- a/core/src/main/java/org/jclouds/io/payloads/ByteArrayPayload.java +++ b/core/src/main/java/org/jclouds/io/payloads/ByteArrayPayload.java @@ -34,7 +34,7 @@ public class ByteArrayPayload extends BasePayload { public ByteArrayPayload(byte[] content, byte[] md5) { super(content); - getContentMetadata().setContentLength(new Long(checkNotNull(content, "content").length)); + getContentMetadata().setContentLength(Long.valueOf(checkNotNull(content, "content").length)); getContentMetadata().setContentMD5(md5); checkArgument(content.length >= 0, "length cannot me negative"); } diff --git a/core/src/main/java/org/jclouds/io/payloads/StringPayload.java b/core/src/main/java/org/jclouds/io/payloads/StringPayload.java index 98f03d7365..272b4809b9 100644 --- a/core/src/main/java/org/jclouds/io/payloads/StringPayload.java +++ b/core/src/main/java/org/jclouds/io/payloads/StringPayload.java @@ -38,7 +38,7 @@ public class StringPayload extends BasePayload { public StringPayload(String content) { super(content); this.bytes = content.getBytes(Charsets.UTF_8); - getContentMetadata().setContentLength(new Long(bytes.length)); + getContentMetadata().setContentLength(Long.valueOf(bytes.length)); } /** diff --git a/core/src/main/java/org/jclouds/util/Strings2.java b/core/src/main/java/org/jclouds/util/Strings2.java index 71dd46631e..49fd1d657e 100644 --- a/core/src/main/java/org/jclouds/util/Strings2.java +++ b/core/src/main/java/org/jclouds/util/Strings2.java @@ -46,6 +46,8 @@ import javax.annotation.Resource; import org.jclouds.logging.Logger; import com.google.common.base.Charsets; +import com.google.common.io.CharStreams; +import com.google.common.io.InputSupplier; /** * @@ -123,7 +125,11 @@ public class Strings2 { return input; } - public static final String UTF8_ENCODING = "UTF-8"; + public static String toString(InputSupplier supplier) + throws IOException { + return CharStreams.toString(CharStreams.newReaderSupplier(supplier, + Charsets.UTF_8)); + } public static String toStringAndClose(InputStream input) throws IOException { checkNotNull(input, "input"); @@ -143,43 +149,9 @@ public class Strings2 { return new ByteArrayInputStream(in.getBytes(Charsets.UTF_8)); } - /** - * Encode the given string with the given encoding, if possible. If the encoding fails with - * {@link UnsupportedEncodingException}, log a warning and fall back to the system's default - * encoding. - * - * @param str - * what to encode - * @param charsetName - * the name of a supported {@link java.nio.charset.Charset charset} - * @return properly encoded String. - */ - public static byte[] encodeString(String str, String charsetName) { - try { - return str.getBytes(charsetName); - } catch (UnsupportedEncodingException e) { - logger.warn(e, "Failed to encode string to bytes with encoding " + charsetName - + ". Falling back to system's default encoding"); - return str.getBytes(); - } - } - @Resource private static Logger logger = Logger.NULL; - /** - * Encode the given string with the UTF-8 encoding, the sane default. In the very unlikely event - * the encoding fails with {@link UnsupportedEncodingException}, log a warning and fall back to - * the system's default encoding. - * - * @param str - * what to encode - * @return properly encoded String. - */ - public static byte[] encodeString(String str) { - return encodeString(str, UTF8_ENCODING); - } - /** * replaces tokens that are expressed as {token} * diff --git a/core/src/test/java/org/jclouds/domain/LoginCredentialsTest.java b/core/src/test/java/org/jclouds/domain/LoginCredentialsTest.java new file mode 100644 index 0000000000..b22e7a4b2a --- /dev/null +++ b/core/src/test/java/org/jclouds/domain/LoginCredentialsTest.java @@ -0,0 +1,56 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds 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.jclouds.domain; + +import static org.testng.Assert.assertEquals; + +import org.testng.annotations.Test; + +import com.google.common.base.Optional; + +/** + * @author Adrian Cole + */ +@Test(groups = "unit", testName = "LoginCredentialsTest") +public class LoginCredentialsTest { + + public void testPasswordSetsPrivateKeyToAbsentWhenUnset() { + LoginCredentials toTest = LoginCredentials.builder().user("user").password("password").build(); + assertEquals(toTest.getOptionalPassword(), Optional.of("password")); + assertEquals(toTest.getOptionalPrivateKey(), Optional.absent()); + } + + public void testPasswordLeavesPrivateKeyAloneWhenSet() { + LoginCredentials toTest = LoginCredentials.builder().user("user").privateKey("key").password("password").build(); + assertEquals(toTest.getOptionalPassword(), Optional.of("password")); + assertEquals(toTest.getOptionalPrivateKey(), Optional.of("key")); + } + + public void testPrivateKeySetsPasswordToAbsentWhenUnset() { + LoginCredentials toTest = LoginCredentials.builder().user("user").privateKey("key").build(); + assertEquals(toTest.getOptionalPassword(), Optional.absent()); + assertEquals(toTest.getOptionalPrivateKey(), Optional.of("key")); + } + + public void testPrivateKeyLeavesPasswordAloneWhenSet() { + LoginCredentials toTest = LoginCredentials.builder().user("user").password("password").privateKey("key").build(); + assertEquals(toTest.getOptionalPassword(), Optional.of("password")); + assertEquals(toTest.getOptionalPrivateKey(), Optional.of("key")); + } +} diff --git a/core/src/test/java/org/jclouds/io/payloads/MultipartFormTest.java b/core/src/test/java/org/jclouds/io/payloads/MultipartFormTest.java index 71e3f11436..6b6dce1004 100644 --- a/core/src/test/java/org/jclouds/io/payloads/MultipartFormTest.java +++ b/core/src/test/java/org/jclouds/io/payloads/MultipartFormTest.java @@ -54,8 +54,8 @@ public class MultipartFormTest { MultipartForm multipartForm = new MultipartForm(boundary, newPart("hello")); - assertEquals(Strings2.toStringAndClose(multipartForm.getInput()), expects); - assertEquals(multipartForm.getContentMetadata().getContentLength(), new Long(199)); + assertEquals(Strings2.toString(multipartForm), expects); + assertEquals(multipartForm.getContentMetadata().getContentLength(), Long.valueOf(199)); } public static class MockFilePayload extends FilePayload { @@ -119,12 +119,12 @@ public class MultipartFormTest { MultipartForm multipartForm = new MultipartForm(boundary, newPart("hello"), newPart("goodbye")); - assertEquals(Strings2.toStringAndClose(multipartForm.getInput()), expects); + assertEquals(Strings2.toString(multipartForm), expects); // test repeatable assert multipartForm.isRepeatable(); - assertEquals(Strings2.toStringAndClose(multipartForm.getInput()), expects); - assertEquals(multipartForm.getContentMetadata().getContentLength(), new Long(352)); + assertEquals(Strings2.toString(multipartForm), expects); + assertEquals(multipartForm.getContentMetadata().getContentLength(), Long.valueOf(352)); } } diff --git a/core/src/test/java/org/jclouds/io/payloads/StringPayloadTest.java b/core/src/test/java/org/jclouds/io/payloads/StringPayloadTest.java index ece2faf885..1cd3086c7c 100644 --- a/core/src/test/java/org/jclouds/io/payloads/StringPayloadTest.java +++ b/core/src/test/java/org/jclouds/io/payloads/StringPayloadTest.java @@ -33,7 +33,7 @@ import com.google.common.base.Charsets; public class StringPayloadTest { public void testLengthIsCorrectPerUTF8() { Payload stringPayload = new StringPayload("unic₪de"); - assertEquals(stringPayload.getContentMetadata().getContentLength(), new Long( + assertEquals(stringPayload.getContentMetadata().getContentLength(), Long.valueOf( "unic₪de".getBytes(Charsets.UTF_8).length)); } } diff --git a/core/src/test/java/org/jclouds/rest/internal/BaseRestApiExpectTest.java b/core/src/test/java/org/jclouds/rest/internal/BaseRestApiExpectTest.java index b1ad1f0eab..67afbf7606 100644 --- a/core/src/test/java/org/jclouds/rest/internal/BaseRestApiExpectTest.java +++ b/core/src/test/java/org/jclouds/rest/internal/BaseRestApiExpectTest.java @@ -386,8 +386,8 @@ public abstract class BaseRestApiExpectTest { switch (compareHttpRequestAsType(a)) { case XML: { - Diff diff = XMLUnit.compareXML(Strings2.toStringAndClose(a.getPayload().getInput()), Strings2 - .toStringAndClose(b.getPayload().getInput())); + Diff diff = XMLUnit.compareXML(Strings2.toString(a.getPayload()), Strings2 + .toString(b.getPayload())); // Ignoring whitespace in elements that have other children, xsi:schemaLocation and // differences in namespace prefixes @@ -419,8 +419,8 @@ public abstract class BaseRestApiExpectTest { } case JSON: { JsonParser parser = new JsonParser(); - JsonElement payloadA = parser.parse(Strings2.toStringAndClose(a.getPayload().getInput())); - JsonElement payloadB = parser.parse(Strings2.toStringAndClose(b.getPayload().getInput())); + JsonElement payloadA = parser.parse(Strings2.toString(a.getPayload())); + JsonElement payloadB = parser.parse(Strings2.toString(b.getPayload())); return Objects.equal(payloadA, payloadB); } default: { @@ -486,7 +486,7 @@ public abstract class BaseRestApiExpectTest { builder.append(header.getKey()).append(": ").append(header.getValue()).append('\n'); } try { - builder.append('\n').append(Strings2.toStringAndClose(request.getPayload().getInput())); + builder.append('\n').append(Strings2.toString(request.getPayload())); } catch (IOException e) { throw Throwables.propagate(e); } diff --git a/core/src/test/java/org/jclouds/rest/internal/BaseRestApiTest.java b/core/src/test/java/org/jclouds/rest/internal/BaseRestApiTest.java index ed363f52c1..82ac89bdf2 100644 --- a/core/src/test/java/org/jclouds/rest/internal/BaseRestApiTest.java +++ b/core/src/test/java/org/jclouds/rest/internal/BaseRestApiTest.java @@ -107,12 +107,12 @@ public abstract class BaseRestApiTest { } else { String payload = null; try { - payload = Strings2.toStringAndClose(request.getPayload().getInput()); + payload = Strings2.toString(request.getPayload()); } catch (IOException e) { propagate(e); } assertEquals(payload, toMatch); - Long length = new Long(payload.getBytes().length); + Long length = Long.valueOf(payload.getBytes().length); try { assertContentHeadersEqual(request, contentType, contentDispositon, contentEncoding, contentLanguage, length, contentMD5 ? CryptoStreams.md5(request.getPayload()) : null, expires); diff --git a/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java b/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java index 02258207d0..f14de94dd5 100644 --- a/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java +++ b/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java @@ -1274,7 +1274,7 @@ public class RestAnnotationProcessorTest extends BaseRestApiTest { .createResponseParser(parserFactory, injector, method, request); assertEquals(parser.apply(HttpResponse.builder().statusCode(200).message("ok") - .payload("{ \"destroyvirtualmachineresponse\" : {\"jobid\":4} }").build()), new Long(4)); + .payload("{ \"destroyvirtualmachineresponse\" : {\"jobid\":4} }").build()), Long.valueOf(4)); } @SuppressWarnings("unchecked") @@ -1286,7 +1286,7 @@ public class RestAnnotationProcessorTest extends BaseRestApiTest { .createResponseParser(parserFactory, injector, method, request); assertEquals(parser.apply(HttpResponse.builder().statusCode(200).message("ok") - .payload("{ \"destroyvirtualmachineresponse\" : {\"jobid\":4} }").build()), new Long(5)); + .payload("{ \"destroyvirtualmachineresponse\" : {\"jobid\":4} }").build()), Long.valueOf(5)); } static class TestRequestFilter1 implements HttpRequestFilter { diff --git a/demos/perftest/src/test/java/org/jclouds/aws/s3/BaseJCloudsPerformanceLiveTest.java b/demos/perftest/src/test/java/org/jclouds/aws/s3/BaseJCloudsPerformanceLiveTest.java index 0a0b8fb71e..8d23bbd640 100644 --- a/demos/perftest/src/test/java/org/jclouds/aws/s3/BaseJCloudsPerformanceLiveTest.java +++ b/demos/perftest/src/test/java/org/jclouds/aws/s3/BaseJCloudsPerformanceLiveTest.java @@ -77,7 +77,7 @@ public abstract class BaseJCloudsPerformanceLiveTest extends BasePerformanceLive S3Object object = newObject(key); object.setPayload(data); try { - object.getPayload().getContentMetadata().setContentLength(new Long(data.available())); + object.getPayload().getContentMetadata().setContentLength(Long.valueOf(data.available())); } catch (IOException e) { Throwables.propagate(e); } diff --git a/demos/tweetstore/cf-tweetstore-spring/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java b/demos/tweetstore/cf-tweetstore-spring/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java index 2a6ea0a69c..f831b9780f 100644 --- a/demos/tweetstore/cf-tweetstore-spring/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java +++ b/demos/tweetstore/cf-tweetstore-spring/src/main/java/org/jclouds/demo/tweetstore/functions/KeyToStoredTweetStatus.java @@ -18,8 +18,6 @@ */ package org.jclouds.demo.tweetstore.functions; -import static org.jclouds.util.Strings2.toStringAndClose; - import javax.annotation.Resource; import org.jclouds.blobstore.BlobMap; @@ -27,6 +25,7 @@ import org.jclouds.blobstore.domain.Blob; import org.jclouds.demo.tweetstore.domain.StoredTweetStatus; import org.jclouds.demo.tweetstore.reference.TweetStoreConstants; import org.jclouds.logging.Logger; +import org.jclouds.util.Strings2; import com.google.common.base.Function; @@ -59,7 +58,7 @@ public class KeyToStoredTweetStatus implements Function= 0 : "no root in " + contents; } @@ -276,6 +276,6 @@ public class JschSshClientLiveTest { } finally { Closeables.closeQuietly(response); } - assertEquals(response.getExitStatus().get(), new Integer(0)); + assertEquals(response.getExitStatus().get(), Integer.valueOf(0)); } } \ No newline at end of file diff --git a/drivers/sshj/src/test/java/org/jclouds/sshj/SshjSshClientLiveTest.java b/drivers/sshj/src/test/java/org/jclouds/sshj/SshjSshClientLiveTest.java index f0d78dd3c7..7f64209a2c 100644 --- a/drivers/sshj/src/test/java/org/jclouds/sshj/SshjSshClientLiveTest.java +++ b/drivers/sshj/src/test/java/org/jclouds/sshj/SshjSshClientLiveTest.java @@ -152,13 +152,13 @@ public class SshjSshClientLiveTest { SshClient client = setupClient(); client.put(temp.getAbsolutePath(), Payloads.newStringPayload("rabbit")); Payload input = client.get(temp.getAbsolutePath()); - String contents = Strings2.toStringAndClose(input.getInput()); + String contents = Strings2.toString(input); assertEquals(contents, "rabbit"); } public void testGetEtcPassword() throws IOException { Payload input = setupClient().get("/etc/passwd"); - String contents = Strings2.toStringAndClose(input.getInput()); + String contents = Strings2.toString(input); assert contents.indexOf("root") >= 0 : "no root in " + contents; } @@ -185,6 +185,6 @@ public class SshjSshClientLiveTest { } finally { Closeables.closeQuietly(response); } - assertEquals(response.getExitStatus().get(), new Integer(0)); + assertEquals(response.getExitStatus().get(), Integer.valueOf(0)); } } diff --git a/labs/cdmi/src/main/java/org/jclouds/snia/cdmi/v1/options/ListContainersOptions.java b/labs/cdmi/src/main/java/org/jclouds/snia/cdmi/v1/options/ListContainersOptions.java index efa468f48e..6aa1b48aab 100644 --- a/labs/cdmi/src/main/java/org/jclouds/snia/cdmi/v1/options/ListContainersOptions.java +++ b/labs/cdmi/src/main/java/org/jclouds/snia/cdmi/v1/options/ListContainersOptions.java @@ -53,7 +53,7 @@ public class ListContainersOptions extends BaseHttpRequestOptions { public int getLimit() { String val = getFirstQueryOrNull("limit"); - return val != null ? new Integer(val) : 10000; + return val != null ? Integer.valueOf(val) : 10000; } public static class Builder { diff --git a/labs/glesys/src/main/java/org/jclouds/glesys/handlers/GleSYSErrorHandler.java b/labs/glesys/src/main/java/org/jclouds/glesys/handlers/GleSYSErrorHandler.java index 9f5a37c309..82afc0fc17 100644 --- a/labs/glesys/src/main/java/org/jclouds/glesys/handlers/GleSYSErrorHandler.java +++ b/labs/glesys/src/main/java/org/jclouds/glesys/handlers/GleSYSErrorHandler.java @@ -80,7 +80,7 @@ public class GleSYSErrorHandler implements HttpErrorHandler { if (response.getPayload() == null) return null; try { - return Strings2.toStringAndClose(response.getPayload().getInput()); + return Strings2.toString(response.getPayload()); } catch (IOException e) { throw new RuntimeException(e); } finally { diff --git a/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/loaders/CreateUniqueKeyTest.java b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/loaders/CreateUniqueKeyTest.java index c264bcdca4..1eb3aa40b6 100644 --- a/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/loaders/CreateUniqueKeyTest.java +++ b/labs/joyent-cloudapi/src/test/java/org/jclouds/joyent/cloudapi/v6_5/compute/loaders/CreateUniqueKeyTest.java @@ -64,6 +64,8 @@ import com.google.inject.util.Providers; */ @Test(groups = "unit", testName = "CreateUniqueKeyTest") public class CreateUniqueKeyTest { + private static final String lineSeparator = System.getProperty("line.separator"); + private Factory namingConvention; private KeyPair keyPair; private String openSshKey; @@ -111,7 +113,7 @@ public class CreateUniqueKeyTest { CreateUniqueKey parser = new CreateUniqueKey(cloudApiApi, namingConvention, crypto, Providers.of(secureRandom)); assertEquals(parser.load(DatacenterAndName.fromDatacenterAndName("datacenter", "group")), - KeyAndPrivateKey.fromKeyAndPrivateKey(key, PRIVATE_KEY)); + KeyAndPrivateKey.fromKeyAndPrivateKey(key, PRIVATE_KEY.replaceAll("\n", lineSeparator))); verify(cloudApiApi, keyApi, crypto, rsaKeyPairGenerator, secureRandom); } diff --git a/labs/nodepool/src/main/java/org/jclouds/nodepool/NodePoolApiMetadata.java b/labs/nodepool/src/main/java/org/jclouds/nodepool/NodePoolApiMetadata.java index df6296cfad..98b53571fb 100644 --- a/labs/nodepool/src/main/java/org/jclouds/nodepool/NodePoolApiMetadata.java +++ b/labs/nodepool/src/main/java/org/jclouds/nodepool/NodePoolApiMetadata.java @@ -26,6 +26,7 @@ import static org.jclouds.nodepool.config.NodePoolProperties.MIN_SIZE; import static org.jclouds.nodepool.config.NodePoolProperties.POOL_ADMIN_ACCESS; import static org.jclouds.nodepool.config.NodePoolProperties.REMOVE_DESTROYED; +import java.io.File; import java.net.URI; import java.util.Properties; @@ -62,7 +63,6 @@ public class NodePoolApiMetadata extends BaseApiMetadata { public static Properties defaultProperties() { Properties properties = BaseRestApiMetadata.defaultProperties(); - properties.setProperty("nodepool.identity", "nodepool-user"); properties.setProperty(BACKEND_GROUP, "nodepool"); properties.setProperty(METADATA_CONTAINER, "nodes"); properties.setProperty(BACKEND_MODULES, @@ -70,9 +70,12 @@ public class NodePoolApiMetadata extends BaseApiMetadata { properties.setProperty(MAX_SIZE, 10 + ""); properties.setProperty(MIN_SIZE, 5 + ""); properties.setProperty(REMOVE_DESTROYED, "true"); - // by default use the current user's user and private key - properties.setProperty(POOL_ADMIN_ACCESS, "adminUsername=" + System.getProperty("user.name") - + ",adminPrivateKeyFile=" + System.getProperty("user.home") + "/.ssh/id_rsa"); + // by default use the current user's user and private key if one exists, if not the properties + // will need to be set (no default passwords) + if (new File(System.getProperty("user.home") + "/.ssh/id_rsa").exists()) { + properties.setProperty(POOL_ADMIN_ACCESS, "adminUsername=" + System.getProperty("user.name") + + ",adminPrivateKeyFile=" + System.getProperty("user.home") + "/.ssh/id_rsa"); + } return properties; } diff --git a/labs/nodepool/src/main/java/org/jclouds/nodepool/config/NodePoolComputeServiceContextModule.java b/labs/nodepool/src/main/java/org/jclouds/nodepool/config/NodePoolComputeServiceContextModule.java index e2cfc0d7e1..2adb63c229 100644 --- a/labs/nodepool/src/main/java/org/jclouds/nodepool/config/NodePoolComputeServiceContextModule.java +++ b/labs/nodepool/src/main/java/org/jclouds/nodepool/config/NodePoolComputeServiceContextModule.java @@ -1,3 +1,22 @@ +/* + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds 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.jclouds.nodepool.config; import javax.annotation.Nullable; @@ -44,6 +63,7 @@ public class NodePoolComputeServiceContextModule extends JCloudsNativeComputeSer bind(ComputeServiceContext.class).to(NodePoolComputeServiceContext.class); install(new LocationsFromComputeServiceAdapterModule() { }); + } @Override diff --git a/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/BaseNodePoolComputeServiceAdapter.java b/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/BaseNodePoolComputeServiceAdapter.java index ac3674abed..7073d8b04a 100644 --- a/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/BaseNodePoolComputeServiceAdapter.java +++ b/labs/nodepool/src/main/java/org/jclouds/nodepool/internal/BaseNodePoolComputeServiceAdapter.java @@ -61,8 +61,10 @@ public abstract class BaseNodePoolComputeServiceAdapter implements NodePoolCompu protected final AdminAccess.Builder initialCredentialsBuilder; public BaseNodePoolComputeServiceAdapter(@Backend Supplier backendComputeService, - @Backend Supplier