detachedres-library/src/main/java/org/gcube/infrastructure/detachedres/detachedreslibrary/server/is/DetachedREsBuilder.java

212 lines
7.4 KiB
Java

package org.gcube.infrastructure.detachedres.detachedreslibrary.server.is;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.LinkedHashMap;
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);
private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
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());
LinkedHashMap<String,GatewayJAXB> gatewaysJAXB = detachedREsJAXB.getGateways();
logger.info("DetachedREsBuilder: Gateways configuration: " + gatewaysJAXB);
if (gatewaysJAXB != null && !gatewaysJAXB.isEmpty()) {
LinkedHashMap<String, Gateway> gateways = new LinkedHashMap<>();
for (String key: gatewaysJAXB.keySet()) {
GatewayJAXB gatewayJAXB =gatewaysJAXB.get(key);
Gateway gateway = new Gateway(gatewayJAXB.getScope(), gatewayJAXB.getName(),
gatewayJAXB.getDescription());
if (gatewayJAXB.getStartDate() != null) {
try {
String startDate = dateFormat.format(gatewayJAXB.getStartDate());
gateway.setStartDate(startDate);
} catch (Exception e) {
logger.error("Invalid start date format for gateway: " + gatewayJAXB.getName());
}
}
if (gatewayJAXB.getEndDate() != null) {
try {
String endDate = dateFormat.format(gatewayJAXB.getEndDate());
gateway.setEndDate(endDate);
} catch (Exception e) {
logger.error("Invalid end date format for gateway: " + gatewayJAXB.getName());
}
}
gateway.setCatalogUrl(gatewayJAXB.getCatalogUrl());
if (gatewayJAXB.getVos() != null && !gatewayJAXB.getVos().isEmpty()) {
LinkedHashMap<String,VO> vos = retrieveVOs(gatewayJAXB);
gateway.setVos(vos);
}
gateways.put(key,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");
LinkedHashMap<String,VRE> vres = new LinkedHashMap<>();
vres.put("/d4science.research-infrastructures.eu/gCubeApps",blueBridgeProject);
gCubeApps.setVres(vres);
LinkedHashMap<String,VO> vos = new LinkedHashMap<>();
vos.put("/d4science.research-infrastructures.eu/gCubeApps",gCubeApps);
blueBridgeGateway.setVos(vos);
LinkedHashMap<String,Gateway> gateways = new LinkedHashMap<>();
gateways.put("-1",blueBridgeGateway);
DetachedREs detachedREs = new DetachedREs(true, gateways);
return detachedREs;
}
private static LinkedHashMap<String,VO> retrieveVOs(GatewayJAXB gatewayJAXB) throws Exception {
try {
LinkedHashMap<String,VO> vos = new LinkedHashMap<>();
for (String key : gatewayJAXB.getVos().keySet()) {
VOJAXB voJAXB=gatewayJAXB.getVos().get(key);
VO vo = new VO(voJAXB.getScope(), voJAXB.getName(), voJAXB.getDescription());
if (voJAXB.getStartDate() != null) {
try {
String startDate = dateFormat.format(voJAXB.getStartDate());
vo.setStartDate(startDate);
} catch (Exception e) {
logger.error("Invalid start date format for VO: " + voJAXB.getName());
}
}
if (voJAXB.getEndDate() != null) {
try {
String endDate = dateFormat.format(voJAXB.getEndDate());
vo.setEndDate(endDate);
} catch (Exception e) {
logger.error("Invalid end date format for VO: " + voJAXB.getName());
}
}
vo.setCatalogUrl(voJAXB.getCatalogUrl());
if (voJAXB.getVres() != null && !voJAXB.getVres().isEmpty()) {
LinkedHashMap<String,VRE> vres = retrieveVREs(voJAXB);
vo.setVres(vres);
}
vos.put(key,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 LinkedHashMap<String,VRE> retrieveVREs(VOJAXB voJAXB) throws Exception {
try {
LinkedHashMap<String,VRE> vres = new LinkedHashMap<>();
for (String key : voJAXB.getVres().keySet()) {
VREJAXB vreJAXB=voJAXB.getVres().get(key);
VRE vre = new VRE(vreJAXB.getScope(), vreJAXB.getName(), vreJAXB.getDescription());
if (vreJAXB.getStartDate() != null) {
try {
String startDate = dateFormat.format(vreJAXB.getStartDate());
vre.setStartDate(startDate);
} catch (Exception e) {
logger.error("Invalid start date format for VO: " + vreJAXB.getName());
}
}
if (vreJAXB.getEndDate() != null) {
try {
String endDate = dateFormat.format(vreJAXB.getEndDate());
vre.setEndDate(endDate);
} catch (Exception e) {
logger.error("Invalid end date format for VO: " + vreJAXB.getName());
}
}
vre.setCatalogUrl(vreJAXB.getCatalogUrl());
vre.setCatalogPortletURL(vreJAXB.getCatalogPortletURL());
vre.setManagers(vreJAXB.getManagers());
vres.put(key,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);
}
}
}