143 lines
4.9 KiB
Java
143 lines
4.9 KiB
Java
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<GatewayJAXB> gatewaysJAXB = detachedREsJAXB.getGateways();
|
|
logger.info("DetachedREsBuilder: Gateways configuration: " + gatewaysJAXB);
|
|
if (gatewaysJAXB != null && !gatewaysJAXB.isEmpty()) {
|
|
ArrayList<Gateway> 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<VO> 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<VRE> vres = new ArrayList<>();
|
|
vres.add(blueBridgeProject);
|
|
gCubeApps.setVres(vres);
|
|
|
|
ArrayList<VO> vos = new ArrayList<>();
|
|
vos.add(gCubeApps);
|
|
blueBridgeGateway.setVos(vos);
|
|
|
|
ArrayList<Gateway> gateways = new ArrayList<>();
|
|
gateways.add(blueBridgeGateway);
|
|
|
|
DetachedREs detachedREs = new DetachedREs(true, gateways);
|
|
return detachedREs;
|
|
}
|
|
|
|
private static ArrayList<VO> retrieveVOs(GatewayJAXB gatewayJAXB) throws Exception {
|
|
try {
|
|
ArrayList<VO> 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<VRE> 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<VRE> retrieveVREs(VOJAXB voJAXB) throws Exception {
|
|
try {
|
|
ArrayList<VRE> 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);
|
|
}
|
|
|
|
}
|
|
|
|
}
|