You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ad...@apache.org on 2014/10/24 18:08:43 UTC
[09/21] git commit: Cleanup output-only Disk object.
Cleanup output-only Disk object.
Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/615c745e
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/615c745e
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/615c745e
Branch: refs/heads/1.8.x
Commit: 615c745e5ec054b15564237630eabdd42eaca936
Parents: 7919efa
Author: Adrian Cole <ac...@twitter.com>
Authored: Sun Oct 19 10:34:30 2014 -0400
Committer: Adrian Cole <ad...@apache.org>
Committed: Fri Oct 24 08:48:05 2014 -0700
----------------------------------------------------------------------
.../org/jclouds/azurecompute/domain/Disk.java | 445 +++++--------------
.../azurecompute/xml/AttachmentHandler.java | 38 +-
.../jclouds/azurecompute/xml/DiskHandler.java | 151 ++++---
.../azurecompute/xml/ListDisksHandler.java | 35 +-
.../azurecompute/features/DiskApiLiveTest.java | 74 ++-
.../azurecompute/features/DiskApiMockTest.java | 19 +-
.../azurecompute/parse/ListDisksTest.java | 71 ---
.../azurecompute/xml/ListDisksHandlerTest.java | 67 +++
azurecompute/src/test/resources/disks.xml | 6 +-
9 files changed, 333 insertions(+), 573 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/615c745e/azurecompute/src/main/java/org/jclouds/azurecompute/domain/Disk.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/domain/Disk.java b/azurecompute/src/main/java/org/jclouds/azurecompute/domain/Disk.java
index 69a8c40..6590330 100644
--- a/azurecompute/src/main/java/org/jclouds/azurecompute/domain/Disk.java
+++ b/azurecompute/src/main/java/org/jclouds/azurecompute/domain/Disk.java
@@ -16,102 +16,56 @@
*/
package org.jclouds.azurecompute.domain;
-import com.google.common.base.Objects;
-import com.google.common.base.Objects.ToStringHelper;
-import com.google.common.base.Optional;
+import static com.google.common.base.Objects.equal;
+import static com.google.common.base.Objects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
+
import java.net.URI;
-import static com.google.common.base.Preconditions.checkNotNull;
+import org.jclouds.javax.annotation.Nullable;
+
+import com.google.common.base.Objects;
/**
- * disk in the image repository
+ * A disk in the image repository.
*
* @see <a href="http://msdn.microsoft.com/en-us/library/jj157176" >api</a>
*/
-public class Disk {
- public static class Attachment {
-
- public static Builder builder() {
- return new Builder();
+public final class Disk {
+ public static final class Attachment {
+ /** The deployment in which the disk is being used. */
+ public String deployment() {
+ return deployment;
}
- public Builder toBuilder() {
- return builder().fromAttachment(this);
+ /** The hosted service in which the disk is being used. */
+ public String hostedService() {
+ return hostedService;
}
- public static class Builder {
-
- private String hostedService;
- private String deployment;
- private String role;
-
- /**
- * @see Attachment#getHostedService()
- */
- public Builder hostedService(String hostedService) {
- this.hostedService = hostedService;
- return this;
- }
-
- /**
- * @see Attachment#getDeployment()
- */
- public Builder deployment(String deployment) {
- this.deployment = deployment;
- return this;
- }
-
- /**
- * @see Attachment#getRole()
- */
- public Builder role(String role) {
- this.role = role;
- return this;
- }
-
- public Attachment build() {
- return new Attachment(hostedService, deployment, role);
- }
-
- public Builder fromAttachment(Attachment in) {
- return this.hostedService(in.hostedService).deployment(in.deployment).role(in.role);
- }
+ /** The virtual machine that the disk is attached to. */
+ public String virtualMachine() {
+ return virtualMachine;
}
- private final String hostedService;
- private final String deployment;
- private final String role;
+ public static Attachment create(String hostedService, String deployment, String virtualMachine) {
+ return new Attachment(hostedService, deployment, virtualMachine);
+ }
- private Attachment(String hostedService, String deployment, String role) {
+ // TODO: Remove from here down with @AutoValue.
+ private Attachment(String hostedService, String deployment, String virtualMachine) {
this.hostedService = checkNotNull(hostedService, "hostedService");
this.deployment = checkNotNull(deployment, "deployment");
- this.role = checkNotNull(role, "role");
- }
-
- /**
- * The deployment in which the disk is being used.
- */
- public String getDeployment() {
- return deployment;
- }
-
- /**
- * The hosted service in which the disk is being used.
- */
- public String getHostedService() {
- return hostedService;
+ this.virtualMachine = checkNotNull(virtualMachine, "virtualMachine");
}
- /**
- * The virtual machine that the disk is attached to.
- */
- public String getRole() {
- return role;
- }
+ private final String hostedService;
+ private final String deployment;
+ private final String virtualMachine;
@Override
public int hashCode() {
- return Objects.hashCode(hostedService, deployment, role);
+ return Objects.hashCode(hostedService, deployment, virtualMachine);
}
@Override
@@ -126,316 +80,157 @@ public class Disk {
return false;
}
Attachment other = (Attachment) obj;
- return Objects.equal(this.hostedService, other.hostedService) && Objects
- .equal(this.deployment, other.deployment) && Objects.equal(this.role, other.role);
+ return equal(this.hostedService, other.hostedService) &&
+ equal(this.deployment, other.deployment) &&
+ equal(this.virtualMachine, other.virtualMachine);
}
@Override
public String toString() {
- return Objects.toStringHelper(this).omitNullValues().add("deployment", hostedService).add("role", role)
- .toString();
- }
-
- }
-
- public static Builder builder() {
- return new Builder();
- }
-
- public Builder toBuilder() {
- return new Builder().fromHostedService(this);
- }
-
- public static class Builder {
-
- private Optional<Attachment> attachedTo = Optional.absent();
- private OSType os;
- private String name;
- private Optional<Integer> logicalSizeInGB = Optional.absent();
- private Optional<String> description = Optional.absent();
- private Optional<String> location = Optional.absent();
- private Optional<String> affinityGroup = Optional.absent();
- private Optional<URI> mediaLink = Optional.absent();
- private Optional<String> sourceImage = Optional.absent();
- private Optional<String> label = Optional.absent();
- private boolean hasOperatingSystem;
- private boolean isCorrupted;
-
- /**
- * @see Disk#getAttachedTo()
- */
- public Builder attachedTo(Attachment attachedTo) {
- this.attachedTo = Optional.fromNullable(attachedTo);
- return this;
- }
-
- /**
- * @see Disk#getOS()
- */
- public Builder os(OSType os) {
- this.os = os;
- return this;
- }
-
- /**
- * @see Disk#getName()
- */
- public Builder name(String name) {
- this.name = name;
- return this;
- }
-
- /**
- * @see Disk#getDescription()
- */
- public Builder description(String description) {
- this.description = Optional.fromNullable(description);
- return this;
- }
-
- /**
- * @see Disk#getLogicalSizeInGB()
- */
- public Builder logicalSizeInGB(Integer logicalSizeInGB) {
- this.logicalSizeInGB = Optional.fromNullable(logicalSizeInGB);
- return this;
- }
-
- /**
- * @see Disk#getLocation()
- */
- public Builder location(String location) {
- this.location = Optional.fromNullable(location);
- return this;
- }
-
- /**
- * @see Disk#getAffinityGroup()
- */
- public Builder affinityGroup(String affinityGroup) {
- this.affinityGroup = Optional.fromNullable(affinityGroup);
- return this;
- }
-
- /**
- * @see Disk#getMediaLink()
- */
- public Builder mediaLink(URI mediaLink) {
- this.mediaLink = Optional.fromNullable(mediaLink);
- return this;
- }
-
- /**
- * @see Disk#getSourceImage()
- */
- public Builder sourceImage(String sourceImage) {
- this.sourceImage = Optional.fromNullable(sourceImage);
- return this;
- }
-
- /**
- * @see Disk#getLabel()
- */
- public Builder label(String label) {
- this.label = Optional.fromNullable(label);
- return this;
- }
-
- /**
- * @see Disk#hasOperatingSystem()
- */
- public Builder hasOperatingSystem(boolean hasOperatingSystem) {
- this.hasOperatingSystem = hasOperatingSystem;
- return this;
- }
-
- /**
- * @see Disk#isCorrupted()
- */
- public Builder isCorrupted(boolean isCorrupted) {
- this.isCorrupted = isCorrupted;
- return this;
- }
-
- public Disk build() {
- return new Disk(attachedTo, os, name, logicalSizeInGB, description, location, affinityGroup, mediaLink,
- sourceImage, label, hasOperatingSystem, isCorrupted);
- }
-
- public Builder fromHostedService(Disk in) {
- return this.attachedTo(in.attachedTo.orNull()).os(in.getOS()).name(in.getName())
- .logicalSizeInGB(in.getLogicalSizeInGB().orNull()).description(in.getDescription().orNull())
- .location(in.getLocation().orNull()).affinityGroup(in.getAffinityGroup().orNull())
- .mediaLink(in.getMediaLink().orNull()).sourceImage(in.getSourceImage().orNull())
- .label(in.getLabel().orNull()).hasOperatingSystem(in.hasOperatingSystem).isCorrupted(in.isCorrupted);
+ return Objects.toStringHelper(this)
+ .add("hostedService", hostedService)
+ .add("deployment", deployment)
+ .add("virtualMachine", virtualMachine).toString();
}
- }
-
- private final Optional<Attachment> attachedTo;
- private final OSType os;
- private final String name;
- private final Optional<Integer> logicalSizeInGB;
- private final Optional<String> description;
- private final Optional<String> location;
- private final Optional<String> affinityGroup;
- private final Optional<URI> mediaLink;
- private final Optional<String> sourceImage;
- private final Optional<String> label;
- private final boolean hasOperatingSystem;
- private final boolean isCorrupted;
-
- private Disk(Optional<Attachment> attachedTo, OSType os, String name, Optional<Integer> logicalSizeInGB,
- Optional<String> description, Optional<String> location, Optional<String> affinityGroup,
- Optional<URI> mediaLink, Optional<String> sourceImage, Optional<String> label, boolean hasOperatingSystem,
- boolean isCorrupted) {
- this.name = checkNotNull(name, "name");
- this.attachedTo = checkNotNull(attachedTo, "attachedTo for %s", name);
- this.logicalSizeInGB = checkNotNull(logicalSizeInGB, "logicalSizeInGB for %s", name);
- this.description = checkNotNull(description, "description for %s", name);
- this.os = checkNotNull(os, "os for %s", name);
- this.location = checkNotNull(location, "location for %s", name);
- this.affinityGroup = checkNotNull(affinityGroup, "affinityGroup for %s", name);
- this.mediaLink = checkNotNull(mediaLink, "mediaLink for %s", name);
- this.sourceImage = checkNotNull(sourceImage, "sourceImage for %s", name);
- this.label = checkNotNull(label, "label for %s", name);
- this.hasOperatingSystem = hasOperatingSystem;
- this.isCorrupted = isCorrupted;
- }
-
- /**
- * Contains properties that specify a virtual machine that currently using the disk. A disk
- * cannot be deleted as long as it is attached to a virtual machine.
- */
- public Optional<Attachment> getAttachedTo() {
- return attachedTo;
- }
- /**
- * The operating system type of the OS image.
- */
- public OSType getOS() {
- return os;
}
/**
* The name of the disk. This is the name that is used when creating one or more virtual machines
* using the disk.
*/
- public String getName() {
+ public String name() {
return name;
}
/**
- * The size, in GB, of the image.
+ * The geo-location of the disk in Windows Azure, if the disk is not
+ * associated with an affinity group. If a location has been specified, the AffinityGroup element
+ * is not returned.
*/
- public Optional<Integer> getLogicalSizeInGB() {
- return logicalSizeInGB;
+ @Nullable public String location() {
+ return location;
}
/**
- * The description for the image.
+ * The affinity group with which this disk is associated, if any. If the service is
+ * associated with an affinity group, the Location element is not returned.
*/
- public Optional<String> getDescription() {
- return description;
+ @Nullable public String affinityGroup() {
+ return affinityGroup;
}
- /**
- * The geo-location in which this media is located. The Location value is derived from storage
- * account that contains the blob in which the media is located. If the storage account belongs
- * to an affinity group the value is absent.
- */
- public Optional<String> getLocation() {
- return location;
+ @Nullable public String description() {
+ return description;
}
- /**
- * The affinity in which the media is located. The AffinityGroup value is derived from storage
- * account that contains the blob in which the media is located. If the storage account does not
- * belong to an affinity group the value is absent.
- */
- public Optional<String> getAffinityGroup() {
- return affinityGroup;
+ /** The operating system type of the OS image, or null if a data disk. */
+ @Nullable public OSType os() {
+ return os;
}
/**
- * The location of the blob in the blob store in which the media for the disk is located. The
+ * The location of the blob in the blob store in which the media for the image is located. The
* blob location belongs to a storage account in the subscription specified by the
* <subscription-id> value in the operation call.
*
* Example:
*
- * http://example.blob.core.windows.net/disks/mydisk.vhd
+ * http://example.blob.core.windows.net/disks/myimage.vhd
*/
- public Optional<URI> getMediaLink() {
+ @Nullable public URI mediaLink() {
return mediaLink;
}
- /**
- * The name of the OS Image from which the disk was created. This property is populated
- * automatically when a disk is created from an OS image by calling the Add Role, Create
- * Deployment, or Provision Disk operations.
- */
- public Optional<String> getSourceImage() {
- return sourceImage;
+ @Nullable public Integer logicalSizeInGB() {
+ return logicalSizeInGB;
}
/**
- * The description of the image.
+ * Contains properties that specify a virtual machine that currently using the disk. A disk
+ * cannot be deleted as long as it is attached to a virtual machine.
*/
- public Optional<String> getLabel() {
- return label;
+ @Nullable public Attachment attachedTo() {
+ return attachedTo;
}
/**
- * Returns whether this disk contains operation system. Only disks that have an operating system
- * installed can be mounted as an OS Drive.
+ * The name of the OS Image from which the disk was created. This property is populated
+ * automatically when a disk is created from an OS image by calling the Add Role, Create
+ * Deployment, or Provision Disk operations.
*/
- public boolean hasOperatingSystem() {
- return hasOperatingSystem;
+ @Nullable public String sourceImage() {
+ return sourceImage;
}
- /**
- * Returns whether there is a consistency failure detected with this disk. If a disk fails the
- * consistency check, you delete any virtual machines using it, delete the disk, and inspect the
- * blob media to see if the content is intact. You can then reregister the media in the blob as a
- * disk.
- */
- public boolean isCorrupted() {
- return isCorrupted;
+ public static Disk create(String name, String location, String affinityGroup, String description,
+ OSType os, URI mediaLink, Integer logicalSizeInGB, Attachment attachedTo, String sourceImage) {
+ return new Disk(name, location, affinityGroup, description, os, mediaLink, logicalSizeInGB, attachedTo,
+ sourceImage);
}
- @Override
- public int hashCode() {
- return Objects.hashCode(name);
+ // TODO: Remove from here down with @AutoValue.
+ private Disk(String name, String location, String affinityGroup, String description, OSType os, URI mediaLink,
+ Integer logicalSizeInGB, Attachment attachedTo, String sourceImage) {
+ this.name = checkNotNull(name, "name");
+ this.location = location;
+ this.affinityGroup = affinityGroup;
+ this.description = description;
+ this.os = os;
+ this.mediaLink = mediaLink;
+ this.logicalSizeInGB = checkNotNull(logicalSizeInGB, "logicalSizeInGB of %s", name);
+ this.attachedTo = attachedTo;
+ this.sourceImage = sourceImage;
}
+ private final String name;
+ private final String location;
+ private final String affinityGroup;
+ private final String description;
+ private final OSType os;
+ private final URI mediaLink;
+ private final Integer logicalSizeInGB;
+ private final Attachment attachedTo;
+ private final String sourceImage;
+
@Override
- public boolean equals(Object obj) {
- if (this == obj) {
+ public boolean equals(Object object) {
+ if (this == object) {
return true;
}
- if (obj == null) {
+ if (object instanceof Disk) {
+ Disk that = Disk.class.cast(object);
+ return equal(name, that.name) &&
+ equal(location, that.location) &&
+ equal(affinityGroup, that.affinityGroup) &&
+ equal(description, that.description) &&
+ equal(os, that.os) &&
+ equal(mediaLink, that.mediaLink) &&
+ equal(logicalSizeInGB, that.logicalSizeInGB) &&
+ equal(attachedTo, that.attachedTo) &&
+ equal(sourceImage, that.sourceImage);
+ } else {
return false;
}
- if (getClass() != obj.getClass()) {
- return false;
- }
- Disk other = (Disk) obj;
- return Objects.equal(this.name, other.name);
}
@Override
- public String toString() {
- return string().toString();
+ public int hashCode() {
+ return Objects.hashCode(name, location, affinityGroup, description, os, mediaLink, logicalSizeInGB,
+ attachedTo, sourceImage);
}
- private ToStringHelper string() {
- return Objects.toStringHelper(this).omitNullValues().add("os", os).add("name", name)
- .add("attachedTo", attachedTo.orNull()).add("logicalSizeInGB", logicalSizeInGB.orNull())
- .add("description", description).add("location", location.orNull())
- .add("affinityGroup", affinityGroup.orNull()).add("mediaLink", mediaLink.orNull())
- .add("sourceImage", sourceImage.orNull()).add("label", label.orNull())
- .add("hasOperatingSystem", hasOperatingSystem).add("isCorrupted", isCorrupted);
+ @Override
+ public String toString() {
+ return toStringHelper(this)
+ .add("name", name)
+ .add("location", location)
+ .add("affinityGroup", affinityGroup)
+ .add("description", description)
+ .add("os", os)
+ .add("mediaLink", mediaLink)
+ .add("logicalSizeInGB", logicalSizeInGB)
+ .add("attachedTo", attachedTo)
+ .add("sourceImage", sourceImage).toString();
}
-
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/615c745e/azurecompute/src/main/java/org/jclouds/azurecompute/xml/AttachmentHandler.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/xml/AttachmentHandler.java b/azurecompute/src/main/java/org/jclouds/azurecompute/xml/AttachmentHandler.java
index 5bde45e..ccbe9c8 100644
--- a/azurecompute/src/main/java/org/jclouds/azurecompute/xml/AttachmentHandler.java
+++ b/azurecompute/src/main/java/org/jclouds/azurecompute/xml/AttachmentHandler.java
@@ -16,43 +16,39 @@
*/
package org.jclouds.azurecompute.xml;
+import static org.jclouds.util.SaxUtils.currentOrNull;
+
import org.jclouds.azurecompute.domain.Disk.Attachment;
import org.jclouds.http.functions.ParseSax;
-import org.jclouds.util.SaxUtils;
-import org.xml.sax.SAXException;
/**
* @see <a href="http://msdn.microsoft.com/en-us/library/jj157176" >api</a>
*/
-public class AttachmentHandler extends ParseSax.HandlerForGeneratedRequestWithResult<Attachment> {
+final class AttachmentHandler extends ParseSax.HandlerForGeneratedRequestWithResult<Attachment> {
+ private String hostedService;
+ private String deployment;
+ private String virtualMachine;
- private StringBuilder currentText = new StringBuilder();
- private Attachment.Builder builder = Attachment.builder();
+ private final StringBuilder currentText = new StringBuilder();
- @Override
- public Attachment getResult() {
- try {
- return builder.build();
- } finally {
- builder = Attachment.builder();
- }
+ @Override public Attachment getResult() {
+ Attachment result = Attachment.create(hostedService, deployment, virtualMachine);
+ hostedService = deployment = virtualMachine = null; // handler could be called in a loop.
+ return result;
}
- @Override
- public void endElement(String uri, String name, String qName) throws SAXException {
+ @Override public void endElement(String ignoredUri, String ignoredName, String qName) {
if (qName.equals("HostedServiceName")) {
- builder.hostedService(SaxUtils.currentOrNull(currentText));
+ hostedService = currentOrNull(currentText);
} else if (qName.equals("DeploymentName")) {
- builder.deployment(SaxUtils.currentOrNull(currentText));
+ deployment = currentOrNull(currentText);
} else if (qName.equals("RoleName")) {
- builder.role(SaxUtils.currentOrNull(currentText));
+ virtualMachine = currentOrNull(currentText);
}
- currentText = new StringBuilder();
+ currentText.setLength(0);
}
- @Override
- public void characters(char ch[], int start, int length) {
+ @Override public void characters(char ch[], int start, int length) {
currentText.append(ch, start, length);
}
-
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/615c745e/azurecompute/src/main/java/org/jclouds/azurecompute/xml/DiskHandler.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/xml/DiskHandler.java b/azurecompute/src/main/java/org/jclouds/azurecompute/xml/DiskHandler.java
index 3d933b2..0cc62c6 100644
--- a/azurecompute/src/main/java/org/jclouds/azurecompute/xml/DiskHandler.java
+++ b/azurecompute/src/main/java/org/jclouds/azurecompute/xml/DiskHandler.java
@@ -16,92 +16,97 @@
*/
package org.jclouds.azurecompute.xml;
+import static org.jclouds.util.SaxUtils.currentOrNull;
+
import java.net.URI;
-import javax.inject.Inject;
+
import org.jclouds.azurecompute.domain.Disk;
+import org.jclouds.azurecompute.domain.Disk.Attachment;
import org.jclouds.azurecompute.domain.OSType;
import org.jclouds.http.functions.ParseSax;
import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-import static org.jclouds.util.SaxUtils.currentOrNull;
-import static org.jclouds.util.SaxUtils.equalsOrSuffix;
/**
* @see <a href="http://msdn.microsoft.com/en-us/library/jj157176" >api</a>
*/
-public class DiskHandler extends
- ParseSax.HandlerForGeneratedRequestWithResult<Disk> {
-
- private final AttachmentHandler attachmentHandler;
-
- @Inject
- private DiskHandler(AttachmentHandler attachmentHandler) {
- this.attachmentHandler = attachmentHandler;
- }
+final class DiskHandler extends ParseSax.HandlerForGeneratedRequestWithResult<Disk> {
+ private String name;
+ private String location;
+ private String affinityGroup;
+ private String description;
+ private OSType os;
+ private URI mediaLink;
+ private Integer logicalSizeInGB;
+ private Attachment attachedTo;
+ private String sourceImage;
- private StringBuilder currentText = new StringBuilder();
- private Disk.Builder builder = Disk.builder();
+ private boolean inAttachment;
+ private final AttachmentHandler attachmentHandler = new AttachmentHandler();
+ private final StringBuilder currentText = new StringBuilder();
- private boolean inAttachment;
+ @Override public Disk getResult() {
+ Disk result = Disk.create(name, location, affinityGroup, description, os, mediaLink, logicalSizeInGB,
+ attachedTo, sourceImage);
+ resetState(); // handler is called in a loop.
+ return result;
+ }
- @Override
- public Disk getResult() {
- try {
- return builder.build();
- } finally {
- builder = Disk.builder();
- }
- }
+ private void resetState() {
+ name = location = affinityGroup = description = sourceImage = null;
+ os = null;
+ mediaLink = null;
+ logicalSizeInGB = null;
+ attachedTo = null;
+ }
- @Override
- public void startElement(String uri, String localName, String qName,
- Attributes attributes) throws SAXException {
- if (equalsOrSuffix(qName, "AttachedTo")) {
- inAttachment = true;
- }
- }
+ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) {
+ if (qName.equals("AttachedTo")) {
+ inAttachment = true;
+ }
+ }
- @Override
- public void endElement(String uri, String name, String qName)
- throws SAXException {
- if (equalsOrSuffix(qName, "AttachedTo")) {
- builder.attachedTo(attachmentHandler.getResult());
- inAttachment = false;
- } else if (inAttachment) {
- attachmentHandler.endElement(uri, name, qName);
- } else if (equalsOrSuffix(qName, "OS")) {
- builder.os(OSType.fromValue(currentOrNull(currentText)));
- } else if (equalsOrSuffix(qName, "Name")) {
- builder.name(currentOrNull(currentText));
- } else if (equalsOrSuffix(qName, "LogicalDiskSizeInGB")) {
- String gb = currentOrNull(currentText);
- if (gb != null)
- builder.logicalSizeInGB(Integer.parseInt(gb));
- } else if (equalsOrSuffix(qName, "Description")) {
- builder.description(currentOrNull(currentText));
- } else if (equalsOrSuffix(qName, "Location")) {
- builder.location(currentOrNull(currentText));
- } else if (equalsOrSuffix(qName, "AffinityGroup")) {
- builder.affinityGroup(currentOrNull(currentText));
- } else if (equalsOrSuffix(qName, "MediaLink")) {
- String link = currentOrNull(currentText);
- if (link != null)
- builder.mediaLink(URI.create(link));
- } else if (equalsOrSuffix(qName, "SourceImageName")) {
- builder.sourceImage(currentOrNull(currentText));
- } else if (equalsOrSuffix(qName, "Label")) {
- builder.label(currentOrNull(currentText));
- }
- currentText = new StringBuilder();
- }
+ @Override public void endElement(String ignoredUri, String ignoredName, String qName) {
+ if (qName.equals("AttachedTo")) {
+ attachedTo = attachmentHandler.getResult();
+ inAttachment = false;
+ } else if (inAttachment) {
+ attachmentHandler.endElement(ignoredUri, ignoredName, qName);
+ } else if (qName.equals("OS")) {
+ String osText = currentOrNull(currentText);
+ if (osText != null && osText.toUpperCase().equals("NULL")) {
+ os = null;
+ } else {
+ os = OSType.fromValue(currentOrNull(currentText));
+ }
+ } else if (qName.equals("Name")) {
+ name = currentOrNull(currentText);
+ } else if (qName.equals("LogicalDiskSizeInGB")) {
+ String gb = currentOrNull(currentText);
+ if (gb != null) {
+ logicalSizeInGB = Integer.parseInt(gb);
+ }
+ } else if (qName.equals("Description")) {
+ description = currentOrNull(currentText);
+ } else if (qName.equals("Location")) {
+ location = currentOrNull(currentText);
+ } else if (qName.equals("AffinityGroup")) {
+ affinityGroup = currentOrNull(currentText);
+ } else if (qName.equals("MediaLink")) {
+ String link = currentOrNull(currentText);
+ if (link != null) {
+ mediaLink = URI.create(link);
+ }
+ } else if (qName.equals("SourceImageName")) {
+ sourceImage = currentOrNull(currentText);
+ }
+ currentText.setLength(0);
+ }
- @Override
- public void characters(char ch[], int start, int length) {
- if (inAttachment) {
- attachmentHandler.characters(ch, start, length);
- } else {
- currentText.append(ch, start, length);
- }
- }
+ @Override public void characters(char ch[], int start, int length) {
+ if (inAttachment) {
+ attachmentHandler.characters(ch, start, length);
+ } else {
+ currentText.append(ch, start, length);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/615c745e/azurecompute/src/main/java/org/jclouds/azurecompute/xml/ListDisksHandler.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/xml/ListDisksHandler.java b/azurecompute/src/main/java/org/jclouds/azurecompute/xml/ListDisksHandler.java
index fb6ea13..acdc7b5 100644
--- a/azurecompute/src/main/java/org/jclouds/azurecompute/xml/ListDisksHandler.java
+++ b/azurecompute/src/main/java/org/jclouds/azurecompute/xml/ListDisksHandler.java
@@ -16,37 +16,26 @@
*/
package org.jclouds.azurecompute.xml;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableList.Builder;
-import com.google.inject.Inject;
import java.util.List;
+
import org.jclouds.azurecompute.domain.Disk;
import org.jclouds.http.functions.ParseSax;
-import org.jclouds.util.SaxUtils;
import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-public class ListDisksHandler extends ParseSax.HandlerForGeneratedRequestWithResult<List<Disk>> {
-
- private final DiskHandler diskHandler;
- private Builder<Disk> disks = ImmutableList.<Disk> builder();
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableList.Builder;
+public final class ListDisksHandler extends ParseSax.HandlerForGeneratedRequestWithResult<List<Disk>> {
private boolean inDisk;
+ private final DiskHandler diskHandler = new DiskHandler();
+ private final Builder<Disk> disks = ImmutableList.builder();
- @Inject
- public ListDisksHandler(final DiskHandler diskHandler) {
- this.diskHandler = diskHandler;
- }
-
- @Override
- public List<Disk> getResult() {
+ @Override public List<Disk> getResult() {
return disks.build();
}
- @Override
- public void startElement(String url, String name, String qName, Attributes attributes) throws SAXException {
- if (SaxUtils.equalsOrSuffix(qName, "Disk")) {
+ @Override public void startElement(String url, String name, String qName, Attributes attributes) {
+ if (qName.equals("Disk")) {
inDisk = true;
}
if (inDisk) {
@@ -54,8 +43,7 @@ public class ListDisksHandler extends ParseSax.HandlerForGeneratedRequestWithRes
}
}
- @Override
- public void endElement(String uri, String name, String qName) throws SAXException {
+ @Override public void endElement(String uri, String name, String qName) {
if (qName.equals("Disk")) {
inDisk = false;
disks.add(diskHandler.getResult());
@@ -64,8 +52,7 @@ public class ListDisksHandler extends ParseSax.HandlerForGeneratedRequestWithRes
}
}
- @Override
- public void characters(char ch[], int start, int length) {
+ @Override public void characters(char ch[], int start, int length) {
if (inDisk) {
diskHandler.characters(ch, start, length);
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/615c745e/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiLiveTest.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiLiveTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiLiveTest.java
index 478b1b3..53531de 100644
--- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiLiveTest.java
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiLiveTest.java
@@ -16,9 +16,11 @@
*/
package org.jclouds.azurecompute.features;
-import com.google.common.base.Function;
-import com.google.common.collect.ImmutableSet;
-import java.util.List;
+import static com.google.common.collect.Iterables.transform;
+import static org.testng.Assert.assertNotEquals;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+
import org.jclouds.azurecompute.domain.Disk;
import org.jclouds.azurecompute.domain.Image;
import org.jclouds.azurecompute.domain.Location;
@@ -27,10 +29,8 @@ import org.jclouds.azurecompute.internal.BaseAzureComputeApiLiveTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.collect.Iterables.transform;
-import static org.testng.Assert.assertNotEquals;
-import static org.testng.Assert.assertTrue;
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableSet;
@Test(groups = "live", testName = "DiskApiLiveTest")
public class DiskApiLiveTest extends BaseAzureComputeApiLiveTest {
@@ -44,73 +44,51 @@ public class DiskApiLiveTest extends BaseAzureComputeApiLiveTest {
locations = ImmutableSet.copyOf(transform(api.getLocationApi().list(),
new Function<Location, String>() {
- @Override
public String apply(Location in) {
return in.getName();
}
}));
images = ImmutableSet.copyOf(transform(api.getImageApi().list(), new Function<Image, String>() {
- @Override
public String apply(Image in) {
return in.name();
}
}));
}
- @Test
- protected void testList() {
- List<Disk> response = api().list();
-
- for (Disk disk : response) {
+ public void testList() {
+ for (Disk disk : api().list()) {
checkDisk(disk);
}
}
private void checkDisk(Disk disk) {
- checkNotNull(disk.getName(), "Name cannot be null for Disk %s", disk.getLabel());
- checkNotNull(disk.getOS(), "OS cannot be null for Disk: %s", disk);
- assertNotEquals(disk.getOS(), OSType.UNRECOGNIZED, "Status cannot be UNRECOGNIZED for Disk: " + disk);
+ assertNull(disk.name(), "Name cannot be null for: " + disk);
+ assertNull(disk.os(), "OS cannot be null for: " + disk);
+ assertNotEquals(disk.os(), OSType.UNRECOGNIZED, "Status cannot be UNRECOGNIZED for: " + disk);
- checkNotNull(disk.getAttachedTo(), "While AttachedTo can be null for Disk, its Optional wrapper cannot: %s", disk);
- if (disk.getAttachedTo().isPresent()) {
+ if (disk.attachedTo() != null) {
// TODO: verify you can lookup the role
}
- checkNotNull(disk.getLogicalSizeInGB(),
- "While LogicalSizeInGB can be null for Disk, its Optional wrapper cannot: %s", disk);
-
- if (disk.getLogicalSizeInGB().isPresent())
- assertTrue(disk.getLogicalSizeInGB().get() > 0, "LogicalSizeInGB should be positive, if set" + disk.toString());
-
- checkNotNull(disk.getMediaLink(), "While MediaLink can be null for Disk, its Optional wrapper cannot: %s", disk);
-
- if (disk.getMediaLink().isPresent())
- assertTrue(ImmutableSet.of("http", "https").contains(disk.getMediaLink().get().getScheme()),
- "MediaLink should be an http(s) url" + disk.toString());
-
- checkNotNull(disk.getLabel(), "While Label can be null for Disk, its Optional wrapper cannot: %s",
- disk);
+ if (disk.logicalSizeInGB() != null) {
+ assertTrue(disk.logicalSizeInGB() > 0, "LogicalSizeInGB should be positive, if set" + disk);
+ }
- checkNotNull(disk.getDescription(), "While Description can be null for Disk, its Optional wrapper cannot: %s",
- disk);
+ if (disk.mediaLink() != null) {
+ assertTrue(ImmutableSet.of("http", "https").contains(disk.mediaLink().getScheme()),
+ "MediaLink should be an http(s) url" + disk);
+ }
- checkNotNull(disk.getLocation(), "While Location can be null for Disk, its Optional wrapper cannot: %s", disk);
- if (disk.getLocation().isPresent()) {
- assertTrue(locations.contains(disk.getLocation().get()),
- "Location not in " + locations + " :" + disk.toString());
+ if (disk.location() != null) {
+ assertTrue(locations.contains(disk.location()), "Location not in " + locations + " :" + disk);
}
- checkNotNull(disk.getSourceImage(), "While SourceImage can be null for Disk, its Optional wrapper cannot: %s",
- disk);
- if (disk.getSourceImage().isPresent()) {
- assertTrue(images.contains(disk.getSourceImage().get()),
- "SourceImage not in " + images + " :" + disk.toString());
+ if (disk.sourceImage() != null) {
+ assertTrue(images.contains(disk.sourceImage()), "SourceImage not in " + images + " :" + disk);
}
- checkNotNull(disk.getAffinityGroup(),
- "While AffinityGroup can be null for Disk, its Optional wrapper cannot: %s", disk);
- if (disk.getAffinityGroup().isPresent()) {
- // TODO: list getAffinityGroups and check if there
+ if (disk.affinityGroup() != null) {
+ // TODO: list affinityGroups and check if there
}
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/615c745e/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiMockTest.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiMockTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiMockTest.java
index c6fab15..656428c 100644
--- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiMockTest.java
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/DiskApiMockTest.java
@@ -16,13 +16,16 @@
*/
package org.jclouds.azurecompute.features;
-import com.squareup.okhttp.mockwebserver.MockResponse;
-import com.squareup.okhttp.mockwebserver.MockWebServer;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+
import org.jclouds.azurecompute.internal.BaseAzureComputeApiMockTest;
-import org.jclouds.azurecompute.parse.ListDisksTest;
+import org.jclouds.azurecompute.xml.ListDisksHandlerTest;
import org.testng.annotations.Test;
-import static org.assertj.core.api.Assertions.assertThat;
+import com.squareup.okhttp.mockwebserver.MockResponse;
+import com.squareup.okhttp.mockwebserver.MockWebServer;
@Test(groups = "unit", testName = "DiskApiMockTest")
public class DiskApiMockTest extends BaseAzureComputeApiMockTest {
@@ -34,7 +37,7 @@ public class DiskApiMockTest extends BaseAzureComputeApiMockTest {
try {
DiskApi api = api(server.getUrl("/")).getDiskApi();
- assertThat(api.list()).containsExactlyElementsOf(ListDisksTest.expected());
+ assertEquals(api.list(), ListDisksHandlerTest.expected());
assertSent(server, "GET", "/services/disks");
} finally {
@@ -49,7 +52,7 @@ public class DiskApiMockTest extends BaseAzureComputeApiMockTest {
try {
DiskApi api = api(server.getUrl("/")).getDiskApi();
- assertThat(api.list()).isEmpty();
+ assertTrue(api.list().isEmpty());
assertSent(server, "GET", "/services/disks");
} finally {
@@ -64,7 +67,7 @@ public class DiskApiMockTest extends BaseAzureComputeApiMockTest {
try {
DiskApi api = api(server.getUrl("/")).getDiskApi();
- assertThat(api.delete("my-disk")).isEqualTo("request-1");
+ assertEquals(api.delete("my-disk"), "request-1");
assertSent(server, "DELETE", "/services/disks/my-disk");
} finally {
@@ -79,7 +82,7 @@ public class DiskApiMockTest extends BaseAzureComputeApiMockTest {
try {
DiskApi api = api(server.getUrl("/")).getDiskApi();
- assertThat(api.delete("my-disk")).isNull();
+ assertNull(api.delete("my-disk"));
assertSent(server, "DELETE", "/services/disks/my-disk");
} finally {
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/615c745e/azurecompute/src/test/java/org/jclouds/azurecompute/parse/ListDisksTest.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/parse/ListDisksTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/parse/ListDisksTest.java
deleted file mode 100644
index 390b007..0000000
--- a/azurecompute/src/test/java/org/jclouds/azurecompute/parse/ListDisksTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jclouds.azurecompute.parse;
-
-import com.google.common.collect.ImmutableSet;
-import java.io.InputStream;
-import java.net.URI;
-import java.util.List;
-import java.util.Set;
-import org.jclouds.azurecompute.domain.Disk;
-import org.jclouds.azurecompute.domain.Disk.Attachment;
-import org.jclouds.azurecompute.domain.OSType;
-import org.jclouds.azurecompute.xml.ListDisksHandler;
-import org.jclouds.http.functions.BaseHandlerTest;
-import org.testng.annotations.Test;
-
-import static org.testng.Assert.assertEquals;
-
-@Test(groups = "unit", testName = "ListDisksTest")
-public class ListDisksTest extends BaseHandlerTest {
-
- public void test() {
- InputStream is = getClass().getResourceAsStream("/disks.xml");
-
- Set<Disk> expected = expected();
-
- ListDisksHandler handler = injector.getInstance(ListDisksHandler.class);
- List<Disk> result = factory.create(handler).parse(is);
-
- assertEquals(result.toString(), expected.toString());
-
- }
-
- public static Set<Disk> expected() {
-
- return ImmutableSet.<Disk>builder()
- .add(Disk.builder()
- .os(OSType.LINUX)
- .location("West Europe")
- .logicalSizeInGB(30)
- .mediaLink(URI.create("http://neotysbucket1.blob.core.windows.net/vhds/testimage2-testimage2-2012-08-17.vhd"))
- .name("testimage2-testimage2-0-20120817095145")
- .sourceImage("OpenLogic__OpenLogic-CentOS-62-20120531-en-us-30GB.vhd")
- .build())
- .add(Disk.builder()
- .attachedTo(Attachment.builder().deployment("neotysss").hostedService("neotysss").role("neotysss").build())
- .os(OSType.WINDOWS)
- .location("West Europe")
- .logicalSizeInGB(30)
- .mediaLink(URI.create("http://portalvhds0g7xhnq2x7t21.blob.core.windows.net/disks/neotysss/MSFT__Win2K8R2SP1-120612-1520-121206-01-en-us-30GB.vhd"))
- .name("neotysss-neotysss-0-20120824091357")
- .sourceImage("MSFT__Win2K8R2SP1-120612-1520-121206-01-en-us-30GB.vhd")
- .build())
- .build();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/615c745e/azurecompute/src/test/java/org/jclouds/azurecompute/xml/ListDisksHandlerTest.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/xml/ListDisksHandlerTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/xml/ListDisksHandlerTest.java
new file mode 100644
index 0000000..f263567
--- /dev/null
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/xml/ListDisksHandlerTest.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.azurecompute.xml;
+
+import static org.testng.Assert.assertEquals;
+
+import java.io.InputStream;
+import java.net.URI;
+import java.util.List;
+
+import org.jclouds.azurecompute.domain.Disk;
+import org.jclouds.azurecompute.domain.Disk.Attachment;
+import org.jclouds.azurecompute.domain.OSType;
+import org.jclouds.http.functions.BaseHandlerTest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+
+@Test(groups = "unit", testName = "ListDisksHandlerTest")
+public class ListDisksHandlerTest extends BaseHandlerTest {
+
+ public void test() {
+ InputStream is = getClass().getResourceAsStream("/disks.xml");
+ List<Disk> result = factory.create(new ListDisksHandler()).parse(is);
+
+ assertEquals(result, expected());
+ }
+
+ public static List<Disk> expected() {
+ return ImmutableList.of( //
+ Disk.create( //
+ "testimage2-testimage2-0-20120817095145", // name
+ "West Europe", // location
+ null, // affinityGroup
+ null, //description
+ OSType.LINUX, // os
+ URI.create("http://blobs/vhds/testimage2-testimage2-2012-08-17.vhd"), // mediaLink
+ 30, // logicalSizeInGB
+ null, // attachedTo
+ "OpenLogic__OpenLogic-CentOS-62-20120531-en-us-30GB.vhd" // sourceImage
+ ), Disk.create( //
+ "neotysss-neotysss-0-20120824091357", // name
+ "West Europe", // location
+ null, // affinityGroup
+ null, //description
+ OSType.WINDOWS, // os
+ URI.create("http://blobs/disks/neotysss/MSFT__Win2K8R2SP1-ABCD-en-us-30GB.vhd"), // mediaLink
+ 30, // logicalSizeInGB
+ Attachment.create("neotysss", "neotysss", "neotysss"), // attachedTo
+ "MSFT__Win2K8R2SP1-ABCD-en-us-30GB.vhd" // sourceImage
+ ));
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/615c745e/azurecompute/src/test/resources/disks.xml
----------------------------------------------------------------------
diff --git a/azurecompute/src/test/resources/disks.xml b/azurecompute/src/test/resources/disks.xml
index afae399..2e9b453 100644
--- a/azurecompute/src/test/resources/disks.xml
+++ b/azurecompute/src/test/resources/disks.xml
@@ -3,7 +3,7 @@
<OS>Linux</OS>
<Location>West Europe</Location>
<LogicalDiskSizeInGB>30</LogicalDiskSizeInGB>
- <MediaLink>http://neotysbucket1.blob.core.windows.net/vhds/testimage2-testimage2-2012-08-17.vhd</MediaLink>
+ <MediaLink>http://blobs/vhds/testimage2-testimage2-2012-08-17.vhd</MediaLink>
<Name>testimage2-testimage2-0-20120817095145</Name>
<SourceImageName>OpenLogic__OpenLogic-CentOS-62-20120531-en-us-30GB.vhd</SourceImageName>
</Disk>
@@ -16,8 +16,8 @@
<OS>Windows</OS>
<Location>West Europe</Location>
<LogicalDiskSizeInGB>30</LogicalDiskSizeInGB>
- <MediaLink>http://portalvhds0g7xhnq2x7t21.blob.core.windows.net/disks/neotysss/MSFT__Win2K8R2SP1-120612-1520-121206-01-en-us-30GB.vhd</MediaLink>
+ <MediaLink>http://blobs/disks/neotysss/MSFT__Win2K8R2SP1-ABCD-en-us-30GB.vhd</MediaLink>
<Name>neotysss-neotysss-0-20120824091357</Name>
- <SourceImageName>MSFT__Win2K8R2SP1-120612-1520-121206-01-en-us-30GB.vhd</SourceImageName>
+ <SourceImageName>MSFT__Win2K8R2SP1-ABCD-en-us-30GB.vhd</SourceImageName>
</Disk>
</Disks>