All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openstack4j.openstack.storage.block.domain.CinderVolume Maven / Gradle / Ivy

There is a newer version: 3.2.0
Show newest version
package org.openstack4j.openstack.storage.block.domain;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.openstack4j.model.storage.block.Volume;
import org.openstack4j.model.storage.block.VolumeAttachment;
import org.openstack4j.model.storage.block.builder.VolumeBuilder;
import org.openstack4j.openstack.common.ListResult;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRootName;
import com.google.common.base.Objects;

/**
 * An OpenStack Volume
 * 
 * @author Jeremy Unruh
 */
@JsonRootName("volume")
public class CinderVolume implements Volume {

	private static final long serialVersionUID = 1L;
	
	private String id;
	@JsonProperty("display_name")
	private String name;
	@JsonProperty("display_description")
	private String description;
	private Status status;
	@JsonInclude(Include.NON_DEFAULT)
	@JsonProperty("size")
	private Integer size;
	@JsonProperty("availability_zone")
	private String zone;
	@JsonProperty("created_at")
	private Date created;
	@JsonProperty("volume_type")
	private String volumeType;
	@JsonProperty("imageRef")
	private String imageRef;
	@JsonProperty("source_volid")
	private String sourceVolid;
	@JsonProperty("snapshot_id")
	private String snapshotId;
	@JsonProperty("metadata")
	private Map metadata;
	@JsonProperty("bootable")
	private Boolean bootable;
	@JsonProperty("attachments")
	private List attachments;
	@JsonProperty("image_id")
	private String imageId;
	@JsonProperty("volume_image_metadata")
	private Map imageMetadata;
	@JsonProperty("os-vol-mig-status-attr:migstat")
	private MigrationStatus migrateStatus;
	@JsonProperty("os-vol-tenant-attr:tenant_id")
	private String tenantId;
	/**
	 * {@inheritDoc}
	 */
	@Override
	public VolumeBuilder toBuilder() {
		return new ConcreteVolumeBuilder(this);
	}

	/**
	 * @return the Volume Builder
	 */
	public static VolumeBuilder builder() {
		return new ConcreteVolumeBuilder();
	}
	
	/**
	 * {@inheritDoc}
	 */
	@Override
	public String getId() {
		return id;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public String getName() {
		return name;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public String getDescription() {
		return description;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Status getStatus() {
		return status;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public int getSize() {
		return (size == null) ? 0 : size;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public String getZone() {
		return zone;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Date getCreated() {
		return created;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public String getVolumeType() {
		return volumeType;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public String getSnapshotId() {
		return snapshotId;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public MigrationStatus getMigrateStatus() {
		return migrateStatus != null ? migrateStatus : MigrationStatus.NONE;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public String getImageRef() {
	    if (imageRef != null)
	        return imageRef;

	    // Depending on whether this is a Listing or a direct Get the information is different so we are smart 
	    // about returning the proper imageId if applicable
	    if (imageId == null && imageMetadata != null && imageMetadata.containsKey("image_id"))
	        imageId = String.valueOf(imageMetadata.get("image_id"));
	    
	    return imageId;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public String getSourceVolid() {
		return sourceVolid;
	}

	/**
	 * {@inheritDoc}
	 */
	@JsonIgnore
	@Override
	public Map getMetaData() {
		return metadata;
	}
	
	/**
	 * {@inheritDoc}
	 */
	@Override
	public List getAttachments() {
		return attachments;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public String getTenantId() {
		return tenantId;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public String toString() {
		return Objects.toStringHelper(this).omitNullValues()
				     .add("id", id).add("name", name).add("description", description)
				     .add("status", status).add("size", size).add("zone", zone).add("created", created)
				     .add("volumeType", volumeType).add("imageRef", getImageRef())
				     .add("sourceVolid", sourceVolid).add("snapshotId", snapshotId).add("metadata", metadata)
				     .add("bootable", bootable)
				     .toString();
	}
	
	public static class Volumes extends ListResult {

		private static final long serialVersionUID = 1L;
		
		@JsonProperty("volumes")
		private List volumes;
		
		@Override
		protected List value() {
			return volumes;
		}
	}
	
	public static class ConcreteVolumeBuilder implements VolumeBuilder {

		private CinderVolume m;
		
		ConcreteVolumeBuilder() {
			this(new CinderVolume());
		}
		
		ConcreteVolumeBuilder(CinderVolume m) {
			this.m = m;
		}
		
		@Override
		public VolumeBuilder name(String name) {
			m.name = name;
			return this;
		}

		@Override
		public VolumeBuilder description(String description) {
			m.description = description;
			return this;
		}

		@Override
		public VolumeBuilder source_volid(String uuid) {
			m.sourceVolid = uuid;
			return this;
		}

		@Override
		public VolumeBuilder snapshot(String snapshotId) {
			m.snapshotId = snapshotId;
			return this;
		}

		@Override
		public VolumeBuilder imageRef(String imageRef) {
			m.imageRef = imageRef;
			return this;
		}

		@Override
		public VolumeBuilder size(int size) {
			m.size = size;
			return this;
		}

		@Override
		public VolumeBuilder volumeType(String volumeType) {
			m.volumeType = volumeType;
			return this;
		}

		@Override
		public VolumeBuilder bootable(boolean isBootable) {
			m.bootable = isBootable;
			return this;
		}

		@Override
		public VolumeBuilder metadata(Map metadata) {
			m.metadata = metadata;
			return this;
		}
		
		@Override
		public Volume build() {
			return m;
		}

		@Override
		public VolumeBuilder from(Volume in) {
			m = (CinderVolume) in;
			return this;
		}

        @Override
        public VolumeBuilder zone(String zone) {
            m.zone = zone;
            return this;
        }
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy