Java tutorial
/* * 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; } }