package com.mossle.internal.whitelist.service; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.annotation.Resource; import com.mossle.core.mapper.BeanMapper; import com.mossle.internal.whitelist.persistence.domain.WhitelistApp; import com.mossle.internal.whitelist.persistence.domain.WhitelistHost; import com.mossle.internal.whitelist.persistence.domain.WhitelistIp; import com.mossle.internal.whitelist.persistence.domain.WhitelistType; import com.mossle.internal.whitelist.persistence.manager.WhitelistAppManager; import com.mossle.internal.whitelist.persistence.manager.WhitelistHostManager; import com.mossle.internal.whitelist.persistence.manager.WhitelistIpManager; import com.mossle.internal.whitelist.persistence.manager.WhitelistTypeManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service @Transactional public class WhitelistService { private static Logger logger = LoggerFactory .getLogger(WhitelistService.class); private WhitelistAppManager whitelistAppManager; private WhitelistTypeManager whitelistTypeManager; private WhitelistHostManager whitelistHostManager; private WhitelistIpManager whitelistIpManager; private BeanMapper beanMapper = new BeanMapper(); public void saveWhitelistApp(WhitelistApp whitelistApp, Long whitelistTypeId, String hostContent, String ipContent, String username, String tenantId) { Long id = whitelistApp.getId(); WhitelistApp dest = null; if (id != null) { whitelistApp.setWhitelistHosts(null); whitelistApp.setWhitelistIps(null); dest = whitelistAppManager.get(id); beanMapper.copy(whitelistApp, dest); } else { dest = whitelistApp; dest.setUserId(username); dest.setTenantId(tenantId); } // type WhitelistType whitelistType = whitelistTypeManager.get(whitelistTypeId); dest.setWhitelistType(whitelistType); // host this.processHost(dest, Arrays.asList(hostContent.split("\n"))); // ip this.processIp(dest, Arrays.asList(ipContent.split("\n"))); whitelistAppManager.save(dest); } public List<String> trim(List<String> list) { List<String> targetList = new ArrayList<String>(); for (String text : list) { text = text.trim(); if ("".equals(text)) { continue; } if (!targetList.contains(text)) { targetList.add(text); } } return targetList; } public void processHost(WhitelistApp whitelistApp, List<String> hosts) { hosts = this.trim(hosts); logger.info("hosts : {}", hosts); List<WhitelistHost> whitelistHosts = new ArrayList<WhitelistHost>( whitelistApp.getWhitelistHosts()); logger.info("whitelistHosts : {}", whitelistHosts); for (WhitelistHost whitelistHost : whitelistHosts) { String value = whitelistHost.getValue(); logger.info("hosts.contains(value) : {}", hosts.contains(value)); if (!hosts.contains(value)) { whitelistHostManager.remove(whitelistHost); whitelistApp.getWhitelistHosts().remove(whitelistHost); } } logger.info("whitelistApp.getWhitelistHosts() : {}", whitelistApp.getWhitelistHosts()); int index = 0; for (String host : hosts) { index++; boolean isExists = false; for (WhitelistHost whitelistHost : whitelistApp.getWhitelistHosts()) { String value = whitelistHost.getValue(); if (host.equals(value)) { isExists = true; whitelistHost.setPriority(index); whitelistHostManager.save(whitelistHost); break; } } if (!isExists) { WhitelistHost whitelistHost = new WhitelistHost(); whitelistHost.setValue(host); whitelistHost.setPriority(index); whitelistHost.setWhitelistApp(whitelistApp); whitelistHost.setTenantId(whitelistApp.getTenantId()); whitelistHostManager.save(whitelistHost); } } } public void processIp(WhitelistApp whitelistApp, List<String> ips) { ips = this.trim(ips); List<WhitelistIp> whitelistIps = new ArrayList<WhitelistIp>( whitelistApp.getWhitelistIps()); for (WhitelistIp whitelistIp : whitelistIps) { String value = whitelistIp.getValue(); if (!ips.contains(value)) { whitelistIpManager.remove(whitelistIp); whitelistApp.getWhitelistIps().remove(whitelistIp); } } int index = 0; for (String ip : ips) { index++; boolean isExists = false; for (WhitelistIp whitelistIp : whitelistApp.getWhitelistIps()) { String value = whitelistIp.getValue(); if (ip.equals(value)) { isExists = true; whitelistIp.setPriority(index); whitelistIpManager.save(whitelistIp); break; } } if (!isExists) { WhitelistIp whitelistIp = new WhitelistIp(); whitelistIp.setValue(ip); whitelistIp.setPriority(index); whitelistIp.setWhitelistApp(whitelistApp); whitelistIp.setTenantId(whitelistApp.getTenantId()); whitelistIpManager.save(whitelistIp); } } } @Resource public void setWhitelistAppManager(WhitelistAppManager whitelistAppManager) { this.whitelistAppManager = whitelistAppManager; } @Resource public void setWhitelistTypeManager( WhitelistTypeManager whitelistTypeManager) { this.whitelistTypeManager = whitelistTypeManager; } @Resource public void setWhitelistHostManager( WhitelistHostManager whitelistHostManager) { this.whitelistHostManager = whitelistHostManager; } @Resource public void setWhitelistIpManager(WhitelistIpManager whitelistIpManager) { this.whitelistIpManager = whitelistIpManager; } }