--- a/src/net/timbusproject/dpes/alternative/AlternativesBuilder/ToolAlternativesBuilder.java
+++ b/src/net/timbusproject/dpes/alternative/AlternativesBuilder/ToolAlternativesBuilder.java
@@ -20,6 +20,7 @@
import ch.lambdaj.function.convert.Converter;
+import ch.lambdaj.function.matcher.Predicate;
import com.hp.hpl.jena.query.QuerySolution;
import net.timbusproject.dpes.alternative.PreservationAlternative;
@@ -43,6 +44,7 @@
import java.util.List;
import static ch.lambdaj.Lambda.convert;
+import static ch.lambdaj.Lambda.filter;
/**
* Creates alternative ontologies where tools at risk are replaced.
@@ -66,7 +68,7 @@
public List<PreservationAlternative> createAlternatives(Risk identifiedRisk, IRI individualAtRisk) throws OWLOntologyStorageException, OWLOntologyCreationException, IOException, OwlElementNotFoundException {
LOG.info("Searching for tool alternatives...");
List<PreservationAlternative> alternatives = new ArrayList<>();
- String affectedResourceName = identifiedRisk.getAffectedResource();
+ String affectedResourceName = AlternativesBuilderHelper.getFragmentOfResource(originalModelFacade, identifiedRisk.getAffectedResource());
List<String> alternativeTools = getAlternativeTools(originalModelFacade, affectedResourceName);
ChangesOntologyBuilder changesOntologyBuilder = new ChangesOntologyBuilder(
originalModelFacade.getOntology(), originalModelFacade.getIndividual(individualAtRisk.toString()), "SoftwareReplacement");
@@ -100,7 +102,9 @@
private List<String> getAlternativeTools(OwlApiFacade originalModelFacade, String affectedResourceName) throws OWLOntologyStorageException, OWLOntologyCreationException, IOException, OwlElementNotFoundException {
// get alternatives based on the tool
- OWLNamedIndividual affectedIndiv = originalModelFacade.getIndividual(originalModelFacade.findIndividualByFragmentAndLabel(affectedResourceName).toString());
+ IRI individualByFragmentAndLabel = originalModelFacade.findIndividualByFragmentAndLabel(affectedResourceName);
+ if (individualByFragmentAndLabel == null) return new ArrayList<>();
+ OWLNamedIndividual affectedIndiv = originalModelFacade.getIndividual(individualByFragmentAndLabel.toString());
String affectedResourceFragment = originalModelFacade.createIri(affectedResourceName).getFragment();
try {
affectedResourceFragment = originalModelFacade.hasLabel(affectedIndiv) ? originalModelFacade.getLabel(affectedIndiv) : affectedResourceFragment;
@@ -115,7 +119,13 @@
for (Pair<String, String> formatPair : formatPairs) {
alternativeTools.addAll(JenaQueryFacade.removeNamespace(knowledgeBase.getSupportingTools(formatPair)));
}
- return alternativeTools;
+ return filter(new Predicate<String>() {
+ @Override
+ public boolean apply(String s) {
+ if (s == null || s.isEmpty()) return false;
+ return true;
+ }
+ }, alternativeTools);
}
private List<Pair<String, String>> convertToIDs(List<QuerySolution> query, final JenaQueryFacade queryFacade) {