/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.sa.descriptor; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; public class ServiceDefinitionLoader { public static final String PATTERN = "classpath*:com/**/*Service.json"; private static final Logger LOG = Logger.getLogger(ServiceDefinitionLoader.class); public static List<ServiceDefinition> load(ClassLoader classLoader) throws IOException { ServiceDefinitionReader reader = new ServiceDefinitionReader(); List<ServiceDefinition> services = new ArrayList<>(); for (Resource resource : getResources(classLoader)) { if (LOG.isDebugEnabled()) { LOG.debug("Reading service definition: " + resource.getDescription()); } try (InputStream in = resource.getInputStream()) { ServiceDefinition service = reader.readService(in); if (service != null) { if (!service.disabled) { services.add(service); } else { LOG.debug("Skipping disabled service"); } } else { LOG.warn("Error reading service definition " + resource.getDescription()); } } catch (IOException | RuntimeException e) { LOG.error("Error reading service definition: " + resource.getDescription(), e); } } return services; } private static Resource[] getResources(ClassLoader classLoader) throws IOException { PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(classLoader); return resolver.getResources(PATTERN); } }