jp.primecloud.auto.process.vmware.VmwareDiskProcess.java Source code

Java tutorial

Introduction

Here is the source code for jp.primecloud.auto.process.vmware.VmwareDiskProcess.java

Source

/*
 * Copyright 2014 by SCSK Corporation.
 * 
 * This file is part of PrimeCloud Controller(TM).
 * 
 * PrimeCloud Controller(TM) is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 * 
 * PrimeCloud Controller(TM) is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with PrimeCloud Controller(TM). If not, see <http://www.gnu.org/licenses/>.
 */
package jp.primecloud.auto.process.vmware;

import jp.primecloud.auto.entity.crud.Component;
import jp.primecloud.auto.entity.crud.Instance;
import jp.primecloud.auto.entity.crud.Platform;
import jp.primecloud.auto.entity.crud.VmwareDisk;
import jp.primecloud.auto.entity.crud.VmwareInstance;
import jp.primecloud.auto.log.EventLogger;
import jp.primecloud.auto.service.ServiceSupport;

import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.StringUtils;

import jp.primecloud.auto.process.ProcessLogger;
import com.vmware.vim25.VirtualDeviceFileBackingInfo;
import com.vmware.vim25.VirtualDisk;
import com.vmware.vim25.mo.Datastore;

/**
 * <p>
 * TODO: 
 * </p>
 *
 */
public class VmwareDiskProcess extends ServiceSupport {

    protected EventLogger eventLogger;

    protected ProcessLogger processLogger;

    /**
     * TODO: 
     *
     * @param vmwareProcessClient
     * @param instanceNo
     * @param diskNo
     */
    public void attachDisk(VmwareProcessClient vmwareProcessClient, Long instanceNo, Long diskNo) {
        VmwareDisk vmwareDisk = vmwareDiskDao.read(diskNo);

        if (BooleanUtils.isTrue(vmwareDisk.getAttached())) {
            // ??????
            return;
        }

        VmwareInstance vmwareInstance = vmwareInstanceDao.read(instanceNo);

        //
        Component component = componentDao.read(vmwareDisk.getComponentNo());
        Instance instance = instanceDao.read(instanceNo);
        Platform platform = platformDao.read(vmwareProcessClient.getPlatformNo());
        if (StringUtils.isEmpty(vmwareDisk.getFileName())) {
            processLogger.writeLogSupport(ProcessLogger.LOG_DEBUG, component, instance, "VmwareDiskCreate",
                    new Object[] { platform.getPlatformName() });
        } else {
            processLogger.writeLogSupport(ProcessLogger.LOG_DEBUG, component, instance, "VmwareDiskAttach",
                    new Object[] { platform.getPlatformName(), vmwareDisk.getFileName() });
        }

        // ??
        VirtualDisk disk = vmwareProcessClient.attachDisk(vmwareInstance.getMachineName(), vmwareDisk.getScsiId(),
                vmwareDisk.getSize(), vmwareDisk.getFileName());

        // ??
        VirtualDeviceFileBackingInfo backingInfo = VirtualDeviceFileBackingInfo.class.cast(disk.getBacking());
        Datastore datastore = new Datastore(
                vmwareProcessClient.getVmwareClient().getServiceInstance().getServerConnection(),
                backingInfo.getDatastore());

        //
        if (StringUtils.isEmpty(vmwareDisk.getFileName())) {
            processLogger.writeLogSupport(ProcessLogger.LOG_DEBUG, component, instance, "VmwareDiskCreateFinish",
                    new Object[] { platform.getPlatformName(), backingInfo.getFileName(), vmwareDisk.getSize() });
        } else {
            processLogger.writeLogSupport(ProcessLogger.LOG_DEBUG, component, instance, "VmwareDiskAttachFinish",
                    new Object[] { platform.getPlatformName(), vmwareDisk.getFileName(), vmwareDisk.getSize() });
        }

        // 
        vmwareDisk = vmwareDiskDao.read(diskNo);
        vmwareDisk.setAttached(true);
        vmwareDisk.setDatastore(datastore.getName());
        vmwareDisk.setFileName(backingInfo.getFileName());
        vmwareDiskDao.update(vmwareDisk);
    }

    /**
     * TODO: 
     *
     * @param vmwareProcessClient
     * @param instanceNo
     * @param diskNo
     */
    public void detachDisk(VmwareProcessClient vmwareProcessClient, Long instanceNo, Long diskNo) {
        VmwareDisk vmwareDisk = vmwareDiskDao.read(diskNo);

        if (BooleanUtils.isNotTrue(vmwareDisk.getAttached())) {
            // ?????????
            return;
        }

        VmwareInstance vmwareInstance = vmwareInstanceDao.read(instanceNo);

        //
        Component component = componentDao.read(vmwareDisk.getComponentNo());
        Instance instance = instanceDao.read(instanceNo);
        Platform platform = platformDao.read(vmwareProcessClient.getPlatformNo());
        processLogger.writeLogSupport(ProcessLogger.LOG_DEBUG, component, instance, "VmwareDiskDetach",
                new Object[] { platform.getPlatformName(), vmwareDisk.getFileName() });

        // ?
        vmwareProcessClient.detachDisk(vmwareInstance.getMachineName(), vmwareDisk.getScsiId());

        //
        processLogger.writeLogSupport(ProcessLogger.LOG_DEBUG, component, instance, "VmwareDiskDetachFinish",
                new Object[] { platform.getPlatformName(), vmwareDisk.getFileName() });

        // 
        vmwareDisk = vmwareDiskDao.read(diskNo);
        vmwareDisk.setAttached(false);
        vmwareDiskDao.update(vmwareDisk);
    }

    /**
     * TODO: 
     *
     * @param vmwareProcessClient
     * @param diskNo
     */
    public void deleteDisk(VmwareProcessClient vmwareProcessClient, Long diskNo) {
        VmwareDisk vmwareDisk = vmwareDiskDao.read(diskNo);

        //
        Component component = componentDao.read(vmwareDisk.getComponentNo());
        Instance instance = instanceDao.read(vmwareDisk.getInstanceNo());
        processLogger.writeLogSupport(ProcessLogger.LOG_DEBUG, component, instance, "VmwareDiskDelete",
                new Object[] { vmwareDisk.getFileName() });

        // ?
        vmwareProcessClient.deleteDisk(vmwareDisk.getDatastore(), vmwareDisk.getFileName());

        //
        processLogger.writeLogSupport(ProcessLogger.LOG_DEBUG, component, instance, "VmwareDiskDeleteFinish",
                new Object[] { vmwareDisk.getFileName() });

        // 
        vmwareDisk = vmwareDiskDao.read(diskNo);
        vmwareDisk.setDatastore(null);
        vmwareDisk.setFileName(null);
        vmwareDiskDao.update(vmwareDisk);
    }

    /**
     * eventLogger???
     *
     * @param eventLogger eventLogger
     */
    public void setEventLogger(EventLogger eventLogger) {
        this.eventLogger = eventLogger;
    }

    /**
     * processLogger???
     *
     * @param processLogger processLogger
     */
    public void setProcessLogger(ProcessLogger processLogger) {
        this.processLogger = processLogger;
    }
}