package org.gcube.infrastructure.detachedres.detachedreslibrary.server.is; import java.util.ArrayList; import java.util.List; import org.gcube.infrastructure.detachedres.detachedreslibrary.server.is.obj.DetachedREsJAXB; import org.gcube.infrastructure.detachedres.detachedreslibrary.server.is.obj.GatewayJAXB; import org.gcube.infrastructure.detachedres.detachedreslibrary.server.is.obj.VOJAXB; import org.gcube.infrastructure.detachedres.detachedreslibrary.server.is.obj.VREJAXB; import org.gcube.infrastructure.detachedres.detachedreslibrary.shared.Constants; import org.gcube.infrastructure.detachedres.detachedreslibrary.shared.re.DetachedREs; import org.gcube.infrastructure.detachedres.detachedreslibrary.shared.re.Gateway; import org.gcube.infrastructure.detachedres.detachedreslibrary.shared.re.VO; import org.gcube.infrastructure.detachedres.detachedreslibrary.shared.re.VRE; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author Giancarlo Panichi * * */ public class DetachedREsBuilder { private static Logger logger = LoggerFactory.getLogger(DetachedREsBuilder.class); public static DetachedREs build(String scope) throws Exception { logger.info("Build DetachedREs"); DetachedREs detachedREs = null; if (Constants.DEBUG_MODE) { logger.info("DetachedREsBuilder: use debug configuration."); detachedREs = useDefaultConfiguration(); } else { DetachedREsJAXB detachedREsJAXB = null; try { detachedREsJAXB = InformationSystemUtils.retrieveDetachedREs(scope); } catch (Exception e) { logger.debug(e.getLocalizedMessage(), e); } if (detachedREsJAXB != null) { logger.info("DetachedREsBuilder: use configuration in scope: " + scope); detachedREs = new DetachedREs(); logger.info("DetachedREsBuilder: configuration enabled: " + detachedREsJAXB.isEnabled()); detachedREs.setEnabled(detachedREsJAXB.isEnabled()); List gatewaysJAXB = detachedREsJAXB.getGateways(); logger.info("DetachedREsBuilder: Gateways configuration: " + gatewaysJAXB); if (gatewaysJAXB != null && !gatewaysJAXB.isEmpty()) { ArrayList gateways = new ArrayList<>(); for (GatewayJAXB gatewayJAXB : gatewaysJAXB) { Gateway gateway = new Gateway(gatewayJAXB.getScope(), gatewayJAXB.getName(), gatewayJAXB.getDescription()); if (gatewayJAXB.getVos() != null && !gatewayJAXB.getVos().isEmpty()) { ArrayList vos = retrieveVOs(gatewayJAXB); gateway.setVos(vos); } gateways.add(gateway); } detachedREs.setGateways(gateways); } else { logger.info("DetachedREsBuilder: Gateways are not present in" + " resource for scope: " + scope); } } else { logger.info("DetachedREsBuilder: DetachedREsData resource is not present in scope: " + scope); } } logger.debug("DetachedREsBuilder: DetachedREs retrieved: " + detachedREs); return detachedREs; } private static DetachedREs useDefaultConfiguration() { Gateway blueBridgeGateway = new Gateway("-1", "BlueBridge Gateway"); VO gCubeApps = new VO("/d4science.research-infrastructures.eu/gCubeApps", "gCubeApps"); VRE blueBridgeProject = new VRE("/d4science.research-infrastructures.eu/gCubeApps/BlueBridgeProject", "BlueBridgeProject"); ArrayList vres = new ArrayList<>(); vres.add(blueBridgeProject); gCubeApps.setVres(vres); ArrayList vos = new ArrayList<>(); vos.add(gCubeApps); blueBridgeGateway.setVos(vos); ArrayList gateways = new ArrayList<>(); gateways.add(blueBridgeGateway); DetachedREs detachedREs = new DetachedREs(true, gateways); return detachedREs; } private static ArrayList retrieveVOs(GatewayJAXB gatewayJAXB) throws Exception { try { ArrayList vos = new ArrayList<>(); for (VOJAXB voJAXB : gatewayJAXB.getVos()) { VO vo = new VO(voJAXB.getScope(), voJAXB.getName(), voJAXB.getDescription()); if (voJAXB.getVres() != null && !voJAXB.getVres().isEmpty()) { ArrayList vres = retrieveVREs(voJAXB); vo.setVres(vres); } vos.add(vo); } return vos; } catch (Exception e) { throw e; } catch (Throwable e) { logger.error("Invalid DetachedREs configuration. Error retrieving VO info: " + e.getLocalizedMessage(), e); throw new Exception( "Invalid DetachedREs configuration. Error retrieving VO info: " + e.getLocalizedMessage(), e); } } private static ArrayList retrieveVREs(VOJAXB voJAXB) throws Exception { try { ArrayList vres = new ArrayList<>(); for (VREJAXB vreJAXB : voJAXB.getVres()) { VRE vre = new VRE(vreJAXB.getScope(), vreJAXB.getName(), vreJAXB.getDescription()); vres.add(vre); } return vres; } catch (Exception e) { throw e; } catch (Throwable e) { logger.error("Invalid DetachedREs configuration. Error retrieving VRE info: " + e.getLocalizedMessage(), e); throw new Exception( "Invalid DetachedREs configuration. Error retrieving VRE info: " + e.getLocalizedMessage(), e); } } }