package org.gcube.common.authorization.library.enpoints; import java.net.URL; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; import org.gcube.common.scan.ClasspathScanner; import org.gcube.common.scan.ClasspathScannerFactory; import org.gcube.common.scan.matchers.NameMatcher; import org.gcube.common.scan.resources.ClasspathResource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class AuthorizationEndpointScanner { private static Logger log = LoggerFactory.getLogger(AuthorizationEndpointScanner.class); private static EndpointsContainer endpoints; /** * The path used to find service map configuration files. */ static final String configurationPattern = ".*\\.authorization"; /** * Scans the classpath for AuthorizationEndpoints. */ public static synchronized EndpointsContainer endpoints() { if (endpoints==null || endpoints.getEndpoints().size()==0){ log.trace("starting authorization endpoint retrieving"); Map endpointsMap = new HashMap(); try { JAXBContext context = JAXBContext.newInstance(AuthorizationEndpoint.class); Unmarshaller um = context.createUnmarshaller(); String defaultInfrastructure = null; int defaultInfraPriority= Integer.MAX_VALUE; for (String r :getEnpointResourceNames()){ URL url = Thread.currentThread().getContextClassLoader().getResource(r); AuthorizationEndpoint endpoint = (AuthorizationEndpoint)um.unmarshal(url); if (defaultInfrastructure==null) defaultInfrastructure = endpoint.getInfrastructure(); if (!endpointsMap.containsKey(endpoint.getInfrastructure()) || endpointsMap.get(endpoint.getInfrastructure()).getPriority()> endpoint.getPriority()){ if (r.startsWith("default") && endpoint.getPriority() getEnpointResourceNames() { ClasspathScanner scanner = ClasspathScannerFactory.scanner(); Set names = new HashSet(); for (ClasspathResource r : scanner.scan(new NameMatcher(configurationPattern))) names.add(r.name()); return names; } }