jp.primecloud.auto.service.impl.TemplateServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for jp.primecloud.auto.service.impl.TemplateServiceImpl.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.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

import jp.primecloud.auto.common.constant.PCCConstant;
import jp.primecloud.auto.entity.crud.Component;
import jp.primecloud.auto.entity.crud.ComponentType;
import jp.primecloud.auto.entity.crud.Farm;
import jp.primecloud.auto.entity.crud.Image;
import jp.primecloud.auto.entity.crud.Instance;
import jp.primecloud.auto.entity.crud.Platform;
import jp.primecloud.auto.entity.crud.Template;
import jp.primecloud.auto.entity.crud.TemplateComponent;
import jp.primecloud.auto.entity.crud.TemplateInstance;
import jp.primecloud.auto.exception.AutoApplicationException;
import jp.primecloud.auto.service.ComponentService;
import jp.primecloud.auto.service.InstanceService;
import jp.primecloud.auto.service.ServiceSupport;
import jp.primecloud.auto.service.TemplateService;
import jp.primecloud.auto.service.dto.TemplateDto;

/**
 * <p>
 * TODO: 
 * </p>
 *
 */
public class TemplateServiceImpl extends ServiceSupport implements TemplateService {

    protected ComponentService componentService;

    protected InstanceService instanceService;

    /**
     * {@inheritDoc}
     */
    @Override
    public List<TemplateDto> getTemplates(Long userNo) {
        List<TemplateDto> dtos = new ArrayList<TemplateDto>();

        //?(???????)
        Map<Long, Platform> platformMap = getPlatformMap(userNo);

        //?
        List<Long> imageNos = getEnabledImageNos();

        //???
        List<Long> componentTypeNos = getEnabledComponentTypeNos();

        //?
        List<Template> templates = templateDao.readAll();
        for (Template template : templates) {
            boolean available = true;
            // ????????????
            Platform platform = null;
            List<TemplateInstance> templateInstances = templateInstanceDao
                    .readByTemplateNo(template.getTemplateNo());
            for (TemplateInstance templateInstance : templateInstances) {
                platform = platformMap.get(templateInstance.getPlatformNo());
                if (platform == null) {
                    //????? or ??
                    available = false;
                    break;
                }
                if (!imageNos.contains(templateInstance.getImageNo())) {
                    //??
                    available = false;
                    break;
                }
            }

            if (!available) {
                //?????????
                continue;
            }

            List<TemplateComponent> templateComponents = templateComponentDao
                    .readByTemplateNo(template.getTemplateNo());
            for (TemplateComponent templateComponent : templateComponents) {
                if (!componentTypeNos.contains(templateComponent.getComponentTypeNo())) {
                    //????
                    available = false;
                    break;
                }
            }

            if (!available) {
                //?????????
                continue;
            }

            TemplateDto dto = new TemplateDto();
            dto.setTemplate(template);
            dtos.add(dto);
        }

        return dtos;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void applyTemplate(Long farmNo, Long templateNo) {
        // ?
        if (farmNo == null) {
            throw new AutoApplicationException("ECOMMON-000003", "farmNo");
        }
        if (templateNo == null) {
            throw new AutoApplicationException("ECOMMON-000003", "templateNo");
        }

        // ??
        Template template = templateDao.read(templateNo);
        if (template == null) {
            throw new AutoApplicationException("ESERVICE-000501", templateNo);
        }

        // ??
        Farm farm = farmDao.read(farmNo);
        if (farm == null) {
            throw new AutoApplicationException("ESERVICE-000502", farmNo);
        }

        // ??
        List<Component> components = componentDao.readByFarmNo(farmNo);
        if (!components.isEmpty()) {
            throw new AutoApplicationException("ESERVICE-000503", farm.getFarmName());
        }

        List<Instance> instances = instanceDao.readByFarmNo(farmNo);
        if (!instances.isEmpty()) {
            throw new AutoApplicationException("ESERVICE-000503", farm.getFarmName());
        }

        // ?
        Map<Long, Platform> platformMap = getPlatformMap(farm.getUserNo());

        // ?
        Map<String, Long> instanceNoMap = new HashMap<String, Long>();

        List<TemplateInstance> templateInstances = templateInstanceDao.readByTemplateNo(templateNo);
        for (TemplateInstance templateInstance : templateInstances) {
            Long instanceNo = null;
            Platform platform = platformMap.get(templateInstance.getPlatformNo());
            // TODO CLOUD BRANCHING
            if (PCCConstant.PLATFORM_TYPE_AWS.equals(platform.getPlatformType())
                    || PCCConstant.PLATFORM_TYPE_CLOUDSTACK.equals(platform.getPlatformType())
                    || PCCConstant.PLATFORM_TYPE_VCLOUD.equals(platform.getPlatformType())
                    || PCCConstant.PLATFORM_TYPE_AZURE.equals(platform.getPlatformType())
                    || PCCConstant.PLATFORM_TYPE_OPENSTACK.equals(platform.getPlatformType())) {
                //Iaas(AWS or CloudStack or VCloud or Azure or OpenStack)
                instanceNo = instanceService.createIaasInstance(farmNo, templateInstance.getTemplateInstanceName(),
                        templateInstance.getPlatformNo(), templateInstance.getComment(),
                        templateInstance.getImageNo(), templateInstance.getInstanceType());
            } else if (PCCConstant.PLATFORM_TYPE_VMWARE.equals(platform.getPlatformType())) {
                //VMware
                instanceNo = instanceService.createVmwareInstance(farmNo,
                        templateInstance.getTemplateInstanceName(), templateInstance.getPlatformNo(),
                        templateInstance.getComment(), templateInstance.getImageNo(),
                        templateInstance.getInstanceType());

            } else if (PCCConstant.PLATFORM_TYPE_NIFTY.equals(platform.getPlatformType())) {
                //Nifty
                instanceNo = instanceService.createNiftyInstance(farmNo, templateInstance.getTemplateInstanceName(),
                        templateInstance.getPlatformNo(), templateInstance.getComment(),
                        templateInstance.getImageNo(), templateInstance.getInstanceType());
            } else {
                continue;
            }
            instanceNoMap.put(templateInstance.getTemplateInstanceName(), instanceNo);
        }

        // ???
        List<TemplateComponent> templateComponents = templateComponentDao.readByTemplateNo(templateNo);
        for (TemplateComponent templateComponent : templateComponents) {
            Long componentNo = componentService.createComponent(farmNo,
                    templateComponent.getTemplateComponentName(), templateComponent.getComponentTypeNo(),
                    templateComponent.getComment(), templateComponent.getDiskSize());

            // ????
            List<Long> instanceNos = new ArrayList<Long>();
            if (StringUtils.isNotEmpty(templateComponent.getAssociate())) {
                String[] instanceNames = StringUtils.split(templateComponent.getAssociate(), ",");
                for (String instanceName : instanceNames) {
                    Long instanceNo = instanceNoMap.get(instanceName.trim());
                    if (instanceNo != null) {
                        instanceNos.add(instanceNo);
                    }
                }
            }
            if (!instanceNos.isEmpty()) {
                componentService.associateInstances(componentNo, instanceNos);
            }
        }
    }

    /**
     *
     * ??
     *
     *
     * @param userNo
     * @return ?(??????????)
     */
    private Map<Long, Platform> getPlatformMap(Long userNo) {
        // ?
        Map<Long, Platform> platformMap = new HashMap<Long, Platform>();
        List<Platform> platforms = platformDao.readAll();
        for (Platform platform : platforms) {
            if (BooleanUtils.isNotTrue(platform.getSelectable())) {
                // ????
                continue;
            }
            // TODO CLOUD BRANCHING
            if (PCCConstant.PLATFORM_TYPE_AWS.equals(platform.getPlatformType())) {
                // ??????
                if (awsCertificateDao.countByUserNoAndPlatformNo(userNo, platform.getPlatformNo()) == 0) {
                    continue;
                }
            } else if (PCCConstant.PLATFORM_TYPE_VMWARE.equals(platform.getPlatformType())) {
                // ?????
                if (vmwareKeyPairDao.countByUserNoAndPlatformNo(userNo, platform.getPlatformNo()) == 0) {
                    continue;
                }
            } else if (PCCConstant.PLATFORM_TYPE_NIFTY.equals(platform.getPlatformType())) {
                // ???????
                if (niftyCertificateDao.countByUserNoAndPlatformNo(userNo, platform.getPlatformNo()) == 0) {
                    continue;
                }
                if (niftyKeyPairDao.countByUserNoAndPlatformNo(userNo, platform.getPlatformNo()) == 0) {
                    continue;
                }
            } else if (PCCConstant.PLATFORM_TYPE_CLOUDSTACK.equals(platform.getPlatformType())) {
                // ??????
                if (cloudstackCertificateDao.countByAccountAndPlatformNo(userNo, platform.getPlatformNo()) == 0) {
                    continue;
                }
            } else if (PCCConstant.PLATFORM_TYPE_VCLOUD.equals(platform.getPlatformType())) {
                // ???????
                if (vcloudCertificateDao.countByUserNoAndPlatformNo(userNo, platform.getPlatformNo()) == 0) {
                    continue;
                }
                if (vcloudKeyPairDao.countByUserNoAndPlatformNo(userNo, platform.getPlatformNo()) == 0) {
                    continue;
                }
            } else if (PCCConstant.PLATFORM_TYPE_AZURE.equals(platform.getPlatformType())) {
                // ??????
                if (azureCertificateDao.countByUserNoAndPlatformNo(userNo, platform.getPlatformNo()) == 0) {
                    continue;
                }
            } else if (PCCConstant.PLATFORM_TYPE_OPENSTACK.equals(platform.getPlatformType())) {
                // ??????
                if (openstackCertificateDao.countByUserNoAndPlatformNo(userNo, platform.getPlatformNo()) == 0) {
                    continue;
                }
            }

            platformMap.put(platform.getPlatformNo(), platform);
        }

        return platformMap;
    }

    /**
     *
     * ??????
     *
     * @return ????
     */
    private List<Long> getEnabledImageNos() {
        List<Long> imageNos = new ArrayList<Long>();
        List<Image> images = imageDao.readAll();
        for (Image image : images) {
            if (BooleanUtils.isNotTrue(image.getSelectable())) {
                //???????????????
                continue;
            }
            imageNos.add(image.getImageNo());
        }
        return imageNos;
    }

    /**
     *
     * ????????
     *
     * @return ??????
     */
    private List<Long> getEnabledComponentTypeNos() {
        List<Long> componentTypeNos = new ArrayList<Long>();
        List<ComponentType> componentTypes = componentTypeDao.readAll();
        for (ComponentType componentType : componentTypes) {
            if (BooleanUtils.isNotTrue(componentType.getSelectable())) {
                //?????????????????
                continue;
            }
            componentTypeNos.add(componentType.getComponentTypeNo());
        }
        return componentTypeNos;
    }

    /**
     * componentService???
     *
     * @param componentService componentService
     */
    public void setComponentService(ComponentService componentService) {
        this.componentService = componentService;
    }

    /**
     * instanceService???
     *
     * @param instanceService instanceService
     */
    public void setInstanceService(InstanceService instanceService) {
        this.instanceService = instanceService;
    }
}