/*************************************************************************** * Copyright (c) 2014 VMware, Inc. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ***************************************************************************/ package com.vmware.bdd.service.resmgmt.impl; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.hibernate.exception.ConstraintViolationException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.vmware.bdd.apitypes.AppManagerAdd; import com.vmware.bdd.apitypes.AppManagerRead; import com.vmware.bdd.dal.IAppManagerDAO; import com.vmware.bdd.dal.IClusterDAO; import com.vmware.bdd.entity.AppManagerEntity; import com.vmware.bdd.exception.SoftwareManagerCollectorException; import com.vmware.bdd.service.resmgmt.IAppManagerService; /** * Author: Xiaoding Bian * Date: 6/4/14 * Time: 5:46 PM */ @Service public class AppManagerService implements IAppManagerService{ private static Logger logger = Logger.getLogger(AppManagerService.class); private IAppManagerDAO appManagerDAO; private IClusterDAO clusterDAO; public IAppManagerDAO getAppManagerDAO() { return appManagerDAO; } @Autowired public void setAppManagerDAO(IAppManagerDAO appManagerDAO) { this.appManagerDAO = appManagerDAO; } public IClusterDAO getClusterDao() { return clusterDAO; } @Autowired public void setClusterDao(IClusterDAO clusterDao) { this.clusterDAO = clusterDao; } @Override @Transactional public synchronized void addAppManager(AppManagerAdd appManagerAdd) { logger.debug("add app manager " + appManagerAdd); AppManagerEntity appManagerEntity = new AppManagerEntity(appManagerAdd); try { appManagerDAO.insert(appManagerEntity); } catch (ConstraintViolationException cve) { throw SoftwareManagerCollectorException.DUPLICATE_NAME(appManagerAdd.getName()); } logger.debug("successfully added app manager " + appManagerAdd); } @Override @Transactional(readOnly = true) public AppManagerEntity findAppManagerByName(String name) { return appManagerDAO.findByName(name); } /* (non-Javadoc) * @see com.vmware.bdd.service.resmgmt.IAppManagerService#getAppManagerRead(java.lang.String) */ @Override @Transactional(readOnly = true) public AppManagerRead getAppManagerRead(String name) { AppManagerEntity entity = appManagerDAO.findByName(name); if (entity == null) { return null; } return toAppManagerRead(entity); } /** * @param entity * @return */ private AppManagerRead toAppManagerRead(AppManagerEntity entity) { AppManagerRead read = new AppManagerRead(); read.setName(entity.getName()); read.setDescription(entity.getDescription()); read.setType(entity.getType()); read.setUrl(entity.getUrl()); read.setUsername(entity.getUsername()); /*read.setPassword(entity.getPassword());*/ //the AppManagerRead will be returned to the CLIENT side. //mask the value to avoid leakage. read.setPassword("*****"); read.setSslCertificate(entity.getSslCertificate()); return read; } /* (non-Javadoc) * @see com.vmware.bdd.service.resmgmt.IAppManagerService#getAllAppManagerReads() */ @Override @Transactional(readOnly = true) public List<AppManagerRead> getAllAppManagerReads() { List<AppManagerEntity> entities = appManagerDAO.findAllSortByName(); List<AppManagerRead> reads = new ArrayList<AppManagerRead>(); for (AppManagerEntity entity : entities) { reads.add(toAppManagerRead(entity)); } return reads; } /* (non-Javadoc) * @see com.vmware.bdd.service.resmgmt.IAppManagerService#findAll() */ @Override @Transactional(readOnly = true) public List<AppManagerEntity> findAll() { return appManagerDAO.findAll(); } /* (non-Javadoc) * @see com.vmware.bdd.service.resmgmt.IAppManagerService#deleteAppManager(java.lang.String) */ @Override @Transactional public void deleteAppManager(String name) { logger.debug("delete app manager " + name); AppManagerEntity entity = appManagerDAO.findByName(name); if (entity == null) { logger.error("Cannot find app manager " + name); throw SoftwareManagerCollectorException.APPMANAGER_NOT_FOUND(name); } List<String> clusterNames = getClusterDao().findClustersByAppManager(name); if (null != clusterNames && !clusterNames.isEmpty()) { logger.error("Cannot delete app manager " + name + " because it is used by the following clusters " + clusterNames + "."); throw SoftwareManagerCollectorException.CAN_NOT_DELETE(name, clusterNames); } appManagerDAO.delete(entity); logger.debug("successfully deleted app manager " + name); } /* (non-Javadoc) * @see com.vmware.bdd.service.resmgmt.IAppManagerService#modifyAppManager(com.vmware.bdd.apitypes.AppManagerAdd) */ @Override @Transactional public void modifyAppManager(AppManagerAdd appManagerAdd) { logger.debug("modify app manager " + appManagerAdd); String name = appManagerAdd.getName(); AppManagerEntity entity = appManagerDAO.findByName(name); entity.setDescription(appManagerAdd.getDescription()); entity.setType(appManagerAdd.getType()); entity.setUrl(appManagerAdd.getUrl()); entity.setUsername(appManagerAdd.getUsername()); entity.setPassword(appManagerAdd.getPassword()); entity.setSslCertificate(appManagerAdd.getSslCertificate()); appManagerDAO.update(entity); logger.debug("successfully modified app manager " + appManagerAdd); } }