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

97 lines
3.3 KiB
Java

package org.gcube.common.software.analyser;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
import org.gcube.com.fasterxml.jackson.databind.ObjectMapper;
import org.gcube.com.fasterxml.jackson.databind.node.ArrayNode;
import org.gcube.com.fasterxml.jackson.databind.node.ObjectNode;
import org.gcube.common.software.model.SoftwareVersionConfig;
import org.gcube.common.software.model.Variables;
import org.gcube.common.software.utils.Utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Luca Frosini (ISTI - CNR)
*/
public class Analyser {
private static final Logger logger = LoggerFactory.getLogger(Analyser.class);
public static final String EXPORT_FILENAME_EXTENSION = ".json";
protected ObjectMapper objectMapper;
protected ObjectNode globalConfiguration;
protected ArrayNode versionConfigurations;
protected ArrayNode elaboratedVersions;
public Analyser() throws Exception {
this.objectMapper = Utils.getObjectMapper();
}
public ObjectNode getGlobalConfiguration() {
return globalConfiguration;
}
public void setGlobalConfiguration(ObjectNode originalGlobal) {
this.globalConfiguration = originalGlobal.deepCopy();
}
public ArrayNode getVersionConfigurations() {
return versionConfigurations;
}
public void setVersionConfigurations(ArrayNode originalVersions) {
this.versionConfigurations = originalVersions.deepCopy();
}
public ArrayNode getElaboratedVersions() {
return elaboratedVersions;
}
protected SoftwareVersionConfig actualizeSoftwareVersionConfig(JsonNode version) throws Exception {
Variables variables = objectMapper.treeToValue(version, Variables.class);
Set<String> missingVariables = variables.parse();
int size = missingVariables.size();
if(size>0) {
throw new Exception("The following variables has been used but not defined or cannot be actualised" +
missingVariables.toArray(new String[size]).toString());
}
JsonNode swVersion = objectMapper.convertValue(variables.getProperties(), JsonNode.class);
SoftwareVersionConfig softwareVersion = objectMapper.treeToValue(swVersion, SoftwareVersionConfig.class);
return softwareVersion;
}
public void analyse() throws Exception {
SoftwareVersionConfig previous = null;
int i = 0;
elaboratedVersions = objectMapper.createArrayNode();
for(i=0; i<versionConfigurations.size(); i++) {
ObjectNode versionConfig = (ObjectNode) versionConfigurations.get(i).deepCopy();
elaboratedVersions.set(i, versionConfig);
JsonNode actualizedVersionConfig = Utils.merge(globalConfiguration, versionConfig);
SoftwareVersionConfig softwareVersionConfig = actualizeSoftwareVersionConfig(actualizedVersionConfig);
softwareVersionConfig.setOriginalJson(versionConfig);
softwareVersionConfig.setPrevious(previous);
logger.trace("Going to process {}", softwareVersionConfig.getTitle());
SoftwareVersionConfigAnalyser softwareVersionAnalyser = new SoftwareVersionConfigAnalyser(softwareVersionConfig);
softwareVersionAnalyser.setFirst(i==0);
softwareVersionAnalyser.analyse();
elaboratedVersions.set(i, softwareVersionAnalyser.getSoftwareVersionConfig().getOriginalJson());
Thread.sleep(TimeUnit.SECONDS.toMillis(2));
previous = softwareVersionAnalyser.getSoftwareVersionConfig();
}
}
}