Package com.abiquo.server.core.infrastructure.storage

Source Code of com.abiquo.server.core.infrastructure.storage.DiskManagement

/**
* Copyright (C) 2008 - Abiquo Holdings S.L. All rights reserved.
*
* Please see /opt/abiquo/tomcat/webapps/legal/ on Abiquo server
* or contact contact@abiquo.com for licensing information.
*/
package com.abiquo.server.core.infrastructure.storage;

import java.util.UUID;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.hibernate.annotations.Filter;
import org.hibernate.annotations.FilterDef;
import org.hibernate.annotations.FilterDefs;
import org.hibernate.annotations.Filters;
import org.hibernate.annotations.ForeignKey;

import com.abiquo.model.enumerator.VolumeState;
import com.abiquo.server.core.cloud.VirtualDatacenter;
import com.abiquo.server.core.cloud.VirtualMachine;
import com.abiquo.server.core.infrastructure.Datastore;
import com.abiquo.server.core.infrastructure.management.Rasd;
import com.abiquo.server.core.infrastructure.management.RasdManagement;
import com.abiquo.server.core.infrastructure.network.IpPoolManagement;
import com.softwarementors.validation.constraints.Required;

@Entity
@Table(name = DiskManagement.TABLE_NAME)
@DiscriminatorValue(DiskManagement.DISCRIMINATOR)
@FilterDefs({@FilterDef(name = DiskManagement.NOT_TEMP),
    @FilterDef(name = DiskManagement.ONLY_TEMP)})
@Filters({@Filter(name = DiskManagement.NOT_TEMP, condition = "temporal is null"),
    @Filter(name = DiskManagement.ONLY_TEMP, condition = "temporal is not null")})
public class DiskManagement extends RasdManagement
{
    public static final String DISCRIMINATOR = "17"; // CIMResourceTypeEnum.Disk_Drive

    public static final String ALLOCATION_UNITS = "MegaBytes";

    public static final String TABLE_NAME = "disk_management";

    public static final String DISK_DEVICE_NAME = "Disk Device";

    public static final String NOT_TEMP = "diskmanagement_not_temp";
    public static final String ONLY_TEMP = "diskmanagement_only_temp";
   
    // DO NOT ACCESS: present due to needs of infrastructure support. *NEVER* call from business
    // code
    public DiskManagement()
    {
        // Just for JPA support
    }

    public DiskManagement(final VirtualDatacenter vdc, final Long size)
    {
        super(DISCRIMINATOR);

        // RasdManagement properties
        Rasd rasd =
            new Rasd(UUID.randomUUID().toString(), "Disk Device", Integer.valueOf(DISCRIMINATOR));
        rasd.setAllocationUnits(ALLOCATION_UNITS);
        rasd.setLimit(size);
        rasd.setAutomaticAllocation(0);
        rasd.setAutomaticDeallocation(0);

        setRasd(rasd);
        setVirtualDatacenter(vdc);
        setSizeInMb(size);

        // Disk properties
        setDatastore(datastore);
    }

    public final static String DATASTORE_PROPERTY = "datastore";

    private final static boolean DATASTORE_REQUIRED = false;

    private final static String DATASTORE_ID_COLUMN = "idDatastore";

    @JoinColumn(name = DATASTORE_ID_COLUMN)
    @ManyToOne(fetch = FetchType.LAZY)
    @ForeignKey(name = "FK_" + TABLE_NAME + "_datastore")
    private Datastore datastore;

    @Required(value = DATASTORE_REQUIRED)
    public Datastore getDatastore()
    {
        return this.datastore;
    }

    public void setDatastore(final Datastore datastore)
    {
        this.datastore = datastore;
    }

    /**
     * This attribute is for know if the disk can be deleted or not.
     */
    public Boolean getReadOnly()
    {
        if (this.getSequence() == 0L)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public void setReadOnly(final Boolean readOnly)
    {
        // do nothing. Readonly should never be set.
    }

    /**
     * Size of the disk.
     */
    public Long getSizeInMb()
    {
        return this.getRasd().getLimit();
    }

    public void setSizeInMb(final Long sizeInMb)
    {
        this.getRasd().setLimit(sizeInMb);
    }

    // ********************************** Others ********************************
    @Override
    public String toString()
    {
        return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
    }

    @Override
    public void attach(final int sequence, final VirtualMachine vm)
    {
        if (vm == null)
        {
            throw new IllegalStateException("Virtual machine can not be null");
        }

        setSequence(sequence);
        setVirtualMachine(vm);
    }

    @Override
    public void detach()
    {
        setVirtualMachine(null);
        setVirtualAppliance(null);
    }

    @Override
    public boolean isAttached()
    {
        return getVirtualMachine() != null;
    }
}
TOP

Related Classes of com.abiquo.server.core.infrastructure.storage.DiskManagement

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.