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) {