@Override public List<ConfigVo> findConfigVos(ConfigCriteria criteria) { int projectId = criteria.getProjectId(); int envId = criteria.getEnvId(); HasValueEnum hasValue = EnumUtils.fromEnumProperty(HasValueEnum.class, "value", criteria.getHasValue()); List<Config> configs = configDao.findConfigByProject(projectId); List<ConfigVo> configVos = new ArrayList<ConfigVo>(configs.size()); if (!configs.isEmpty()) { List<Integer> hasInstanceConfigs = configDao.findHasInstanceConfigs(projectId, envId); List<Integer> hasContextInstConfigs = configDao.findHasContextInstConfigs(projectId, envId); Map<Integer, ConfigInstance> defaultInsts = configDao.findDefaultInstance(projectId, envId); List<Integer> hasReferencedConfigs = isSharedProject(projectId) ? configDao.getProjectHasReferencedConfigs(projectId) : Collections.<Integer>emptyList(); for (Config config : configs) { // 配置不会太多,使用内存过滤,无分页,如果配置太多影响到性能则考虑数据库过滤和分页 String key = StringUtils.trim(criteria.getKey()); String value = StringUtils.trim(criteria.getValue()); ConfigInstance defaultInst = defaultInsts.get(config.getId()); if ((StringUtils.isEmpty(key) || config.getKey().contains(key)) && (hasValue == HasValueEnum.All || (hasValue == HasValueEnum.Yes && defaultInst != null) || (hasValue == HasValueEnum.No && defaultInst == null)) && (StringUtils.isEmpty(value) || (defaultInst != null && defaultInst.getValue().contains(value)))) { configVos.add( new ConfigVo( config, hasInstanceConfigs.contains(config.getId()), hasContextInstConfigs.contains(config.getId()), hasReferencedConfigs.contains(config.getId()), defaultInst)); } } } return configVos; }
@Override public List<Config> findConfigs(int projectId) { return configDao.findConfigByProject(projectId); }