detachedres-library/src/main/java/org/gcube/infrastructure/detachedres/detachedreslibrary/server/is/DetachedREsBuilder.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);
}
}
}