|
a/src/net/timbusproject/dpes/alternative/AlternativesBuilder/ToolAlternativesBuilder.java |
|
b/src/net/timbusproject/dpes/alternative/AlternativesBuilder/ToolAlternativesBuilder.java |
|
... |
|
... |
18 |
|
18 |
|
19 |
package net.timbusproject.dpes.alternative.AlternativesBuilder;
|
19 |
package net.timbusproject.dpes.alternative.AlternativesBuilder;
|
20 |
|
20 |
|
21 |
import ch.lambdaj.function.convert.Converter;
|
21 |
import ch.lambdaj.function.convert.Converter;
|
22 |
|
22 |
|
|
|
23 |
import ch.lambdaj.function.matcher.Predicate;
|
23 |
import com.hp.hpl.jena.query.QuerySolution;
|
24 |
import com.hp.hpl.jena.query.QuerySolution;
|
24 |
|
25 |
|
25 |
import net.timbusproject.dpes.alternative.PreservationAlternative;
|
26 |
import net.timbusproject.dpes.alternative.PreservationAlternative;
|
26 |
import net.timbusproject.dpes.alternative.Risk;
|
27 |
import net.timbusproject.dpes.alternative.Risk;
|
27 |
|
28 |
|
|
... |
|
... |
41 |
import java.io.IOException;
|
42 |
import java.io.IOException;
|
42 |
import java.util.ArrayList;
|
43 |
import java.util.ArrayList;
|
43 |
import java.util.List;
|
44 |
import java.util.List;
|
44 |
|
45 |
|
45 |
import static ch.lambdaj.Lambda.convert;
|
46 |
import static ch.lambdaj.Lambda.convert;
|
|
|
47 |
import static ch.lambdaj.Lambda.filter;
|
46 |
|
48 |
|
47 |
/**
|
49 |
/**
|
48 |
* Creates alternative ontologies where tools at risk are replaced.
|
50 |
* Creates alternative ontologies where tools at risk are replaced.
|
49 |
*/
|
51 |
*/
|
50 |
public class ToolAlternativesBuilder implements PreservationAlternativesBuilder {
|
52 |
public class ToolAlternativesBuilder implements PreservationAlternativesBuilder {
|
|
... |
|
... |
64 |
|
66 |
|
65 |
@Override
|
67 |
@Override
|
66 |
public List<PreservationAlternative> createAlternatives(Risk identifiedRisk, IRI individualAtRisk) throws OWLOntologyStorageException, OWLOntologyCreationException, IOException, OwlElementNotFoundException {
|
68 |
public List<PreservationAlternative> createAlternatives(Risk identifiedRisk, IRI individualAtRisk) throws OWLOntologyStorageException, OWLOntologyCreationException, IOException, OwlElementNotFoundException {
|
67 |
LOG.info("Searching for tool alternatives...");
|
69 |
LOG.info("Searching for tool alternatives...");
|
68 |
List<PreservationAlternative> alternatives = new ArrayList<>();
|
70 |
List<PreservationAlternative> alternatives = new ArrayList<>();
|
69 |
String affectedResourceName = identifiedRisk.getAffectedResource();
|
71 |
String affectedResourceName = AlternativesBuilderHelper.getFragmentOfResource(originalModelFacade, identifiedRisk.getAffectedResource());
|
70 |
List<String> alternativeTools = getAlternativeTools(originalModelFacade, affectedResourceName);
|
72 |
List<String> alternativeTools = getAlternativeTools(originalModelFacade, affectedResourceName);
|
71 |
ChangesOntologyBuilder changesOntologyBuilder = new ChangesOntologyBuilder(
|
73 |
ChangesOntologyBuilder changesOntologyBuilder = new ChangesOntologyBuilder(
|
72 |
originalModelFacade.getOntology(), originalModelFacade.getIndividual(individualAtRisk.toString()), "SoftwareReplacement");
|
74 |
originalModelFacade.getOntology(), originalModelFacade.getIndividual(individualAtRisk.toString()), "SoftwareReplacement");
|
73 |
if (alternativeTools.size() < 1) {
|
75 |
if (alternativeTools.size() < 1) {
|
74 |
LOG.warn("No alternatives found for risk: " + identifiedRisk.getRiskIdentifier());
|
76 |
LOG.warn("No alternatives found for risk: " + identifiedRisk.getRiskIdentifier());
|
|
... |
|
... |
98 |
return alternatives;
|
100 |
return alternatives;
|
99 |
}
|
101 |
}
|
100 |
|
102 |
|
101 |
private List<String> getAlternativeTools(OwlApiFacade originalModelFacade, String affectedResourceName) throws OWLOntologyStorageException, OWLOntologyCreationException, IOException, OwlElementNotFoundException {
|
103 |
private List<String> getAlternativeTools(OwlApiFacade originalModelFacade, String affectedResourceName) throws OWLOntologyStorageException, OWLOntologyCreationException, IOException, OwlElementNotFoundException {
|
102 |
// get alternatives based on the tool
|
104 |
// get alternatives based on the tool
|
|
|
105 |
IRI individualByFragmentAndLabel = originalModelFacade.findIndividualByFragmentAndLabel(affectedResourceName);
|
|
|
106 |
if (individualByFragmentAndLabel == null) return new ArrayList<>();
|
103 |
OWLNamedIndividual affectedIndiv = originalModelFacade.getIndividual(originalModelFacade.findIndividualByFragmentAndLabel(affectedResourceName).toString());
|
107 |
OWLNamedIndividual affectedIndiv = originalModelFacade.getIndividual(individualByFragmentAndLabel.toString());
|
104 |
String affectedResourceFragment = originalModelFacade.createIri(affectedResourceName).getFragment();
|
108 |
String affectedResourceFragment = originalModelFacade.createIri(affectedResourceName).getFragment();
|
105 |
try {
|
109 |
try {
|
106 |
affectedResourceFragment = originalModelFacade.hasLabel(affectedIndiv) ? originalModelFacade.getLabel(affectedIndiv) : affectedResourceFragment;
|
110 |
affectedResourceFragment = originalModelFacade.hasLabel(affectedIndiv) ? originalModelFacade.getLabel(affectedIndiv) : affectedResourceFragment;
|
107 |
} catch (AnnotationNotFoundException e) {
|
111 |
} catch (AnnotationNotFoundException e) {
|
108 |
LOG.error("Unable to get label for resource: " + affectedResourceName + ". Using resource name as fallback.");
|
112 |
LOG.error("Unable to get label for resource: " + affectedResourceName + ". Using resource name as fallback.");
|
|
... |
|
... |
113 |
JenaQueryFacade originalModelQueryFacade = new JenaQueryFacade(originalModelFacade.getJenaModel(false));
|
117 |
JenaQueryFacade originalModelQueryFacade = new JenaQueryFacade(originalModelFacade.getJenaModel(false));
|
114 |
List<Pair<String, String>> formatPairs = convertToIDs(originalModelQueryFacade.query(QueryHelper.getQueryFormatPairs(affectedResourceName)), originalModelQueryFacade);
|
118 |
List<Pair<String, String>> formatPairs = convertToIDs(originalModelQueryFacade.query(QueryHelper.getQueryFormatPairs(affectedResourceName)), originalModelQueryFacade);
|
115 |
for (Pair<String, String> formatPair : formatPairs) {
|
119 |
for (Pair<String, String> formatPair : formatPairs) {
|
116 |
alternativeTools.addAll(JenaQueryFacade.removeNamespace(knowledgeBase.getSupportingTools(formatPair)));
|
120 |
alternativeTools.addAll(JenaQueryFacade.removeNamespace(knowledgeBase.getSupportingTools(formatPair)));
|
117 |
}
|
121 |
}
|
|
|
122 |
return filter(new Predicate<String>() {
|
|
|
123 |
@Override
|
|
|
124 |
public boolean apply(String s) {
|
|
|
125 |
if (s == null || s.isEmpty()) return false;
|
|
|
126 |
return true;
|
|
|
127 |
}
|
118 |
return alternativeTools;
|
128 |
}, alternativeTools);
|
119 |
}
|
129 |
}
|
120 |
|
130 |
|
121 |
private List<Pair<String, String>> convertToIDs(List<QuerySolution> query, final JenaQueryFacade queryFacade) {
|
131 |
private List<Pair<String, String>> convertToIDs(List<QuerySolution> query, final JenaQueryFacade queryFacade) {
|
122 |
return convert(query, new Converter<QuerySolution, Pair<String, String>>() {
|
132 |
return convert(query, new Converter<QuerySolution, Pair<String, String>>() {
|
123 |
public Pair<String, String> convert(QuerySolution solution) {
|
133 |
public Pair<String, String> convert(QuerySolution solution) {
|