software-versions-processor.../src/main/java/org/gcube/common/software/analyser/SoftwareVersionConfigAnalys...

96 lines
3.1 KiB
Java

package org.gcube.common.software.analyser;
import java.net.URL;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.gcube.common.software.export.SoftwareVersionExporter;
import org.gcube.common.software.model.ExporterConfig;
import org.gcube.common.software.model.GlobalConfig;
import org.gcube.common.software.model.SoftwareVersionConfig;
import org.gcube.common.software.model.SoftwareVersionFile;
import org.gcube.common.software.model.Variables;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Luca Frosini (ISTI - CNR)
*/
public class SoftwareVersionConfigAnalyser {
private static final Logger logger = LoggerFactory.getLogger(SoftwareVersionConfigAnalyser.class);
protected GlobalConfig softwareConfig;
protected SoftwareVersionConfig softwareVersionConfig;
protected boolean first;
public SoftwareVersionConfigAnalyser(SoftwareVersionConfig softwareVersionConfig) {
this.softwareVersionConfig = softwareVersionConfig;
}
public GlobalConfig getSoftwareConfig() {
return softwareConfig;
}
public void setSoftwareConfig(GlobalConfig softwareConfig) {
this.softwareConfig = softwareConfig;
}
public SoftwareVersionConfig getSoftwareVersionConfig() {
return softwareVersionConfig;
}
public void setSoftwareVersionConfig(SoftwareVersionConfig softwareVersionConfig) {
this.softwareVersionConfig = softwareVersionConfig;
}
public boolean isFirst() {
return first;
}
public void setFirst(boolean first) {
this.first = first;
}
public void analyse() throws Exception {
Variables variables = softwareVersionConfig.getVariables();
List<SoftwareVersionFile> svfs = softwareVersionConfig.getFiles();
for(SoftwareVersionFile svf : svfs) {
URL url = svf.getURL();
String urlString = variables.replaceAllVariables(url.toString());
svf.setURL(new URL(urlString));
String desiredName = svf.getDesiredName();
desiredName = variables.replaceAllVariables(desiredName);
svf.setDesiredName(desiredName);
}
Map<String, Class<? extends SoftwareVersionExporter>> availableExporters = SoftwareVersionExporter.getAvailableExporters();
Map<String,ExporterConfig> requestedExporters = softwareVersionConfig.getExporters();
Set<String> availableExporterNames = new HashSet<>(availableExporters.keySet());
Set<String> requestedExporterNames = new HashSet<>(availableExporters.keySet());
if(!availableExporterNames.containsAll(requestedExporterNames)) {
requestedExporterNames.removeAll(availableExporterNames);
throw new Exception("The following requested Exporters does not exists " + requestedExporterNames);
}
for(String className : requestedExporters.keySet()) {
logger.debug("Goign to export with {}", className);
Class<? extends SoftwareVersionExporter> exporterClass = availableExporters.get(className);
SoftwareVersionExporter sve = exporterClass.newInstance();
ExporterConfig processorConfig = requestedExporters.get(className);
sve.setGlobalConfig(softwareConfig);
sve.setSoftwareVersion(softwareVersionConfig);
sve.setExporterConfig(processorConfig);
sve.setFirst(first);
sve.export();
}
}
}