Skip to content

Commit

Permalink
[Fix kbss-cvut/fta-fmea-ui#374] Extend FaultTreeSummary to include U…
Browse files Browse the repository at this point in the history
…RI of root node and its supertype if present, introduce api method to fetch a single FaultTreeSummary by URI
  • Loading branch information
kostobog committed Jun 9, 2024
1 parent abf5684 commit e3fc3eb
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 22 deletions.
66 changes: 44 additions & 22 deletions src/main/java/cz/cvut/kbss/analysis/dao/FaultTreeDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import cz.cvut.kbss.jopa.model.descriptors.EntityDescriptor;
import cz.cvut.kbss.jopa.model.metamodel.Attribute;
import cz.cvut.kbss.jopa.model.metamodel.EntityType;
import cz.cvut.kbss.jopa.model.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

Expand Down Expand Up @@ -80,9 +81,30 @@ public Optional<FaultTree> find(URI id) {
@Override
public List<FaultTree> findAllSummaries() {
try {
List<FaultTreeSummary> ret = em.createNativeQuery("""
List<FaultTreeSummary> ret = getSummariesQuery()
.getResultList();
return ret.stream().map(s -> s.asEntity(type)).toList();
} catch (RuntimeException e) {
throw new PersistenceException(e);
}
}

public FaultTree findSummary(URI managedEntityUri) {
try {
Query query = getSummariesQuery();
query.setParameter("_uri", managedEntityUri);
FaultTreeSummary ret = (FaultTreeSummary)query.getSingleResult();
return ret.asEntity(type);
} catch (RuntimeException e) {
throw new PersistenceException(e);
}
}

public Query getSummariesQuery() {
return em.createNativeQuery("""
PREFIX fta: <http://onto.fel.cvut.cz/ontologies/fta-fmea-application/>
SELECT * WHERE {
SELECT * WHERE {
BIND(?_uri as ?uri)
?uri a ?type.
?uri ?pName ?name.
OPTIONAL{?uri ?pDescription ?description.}
Expand All @@ -91,35 +113,41 @@ public List<FaultTree> findAllSummaries() {
OPTIONAL{?uri ?pCreator ?creator.}
OPTIONAL{?uri ?pLastEditor ?lastEditor.}
OPTIONAL{
?uri fta:is-manifested-by ?root .
?root fta:is-derived-from ?sup.
?uri fta:is-manifested-by ?rootEvent .
?rootEvent fta:is-derived-from ?rootEventType.
OPTIONAL{
?root fta:probability ?calculatedFailureRate.
?rootEvent fta:probability ?calculatedFailureRate.
}
OPTIONAL{
?sup fta:has-failure-rate ?failureRate.
?rootEventType fta:has-failure-rate ?failureRate.
?failureRate fta:has-requirement ?failureRateRequirement.
?failureRateRequirement fta:to ?requiredFailureRate.
}
OPTIONAL{
?sup fta:is-derived-from ?supsup.
?rootEventType fta:is-derived-from ?supsup.
?supsup fta:has-failure-rate ?fhaFailureRateQ.
?fhaFailureRateQ fta:has-estimate ?fhaFailureRateP.
?fhaFailureRateP a fta:failure-rate-estimate;
fta:value ?fhaBasedFailureRate.
}
OPTIONAL{
?sup fta:is-manifestation-of ?behavior .
?behavior fta:has-component ?subsystemUri.
?subsystemUri fta:is-derived-from ?subsystemType.
?subsystemType fta:name ?subsystemTypeLabel.
?subsystemType fta:ata-code ?subsystemTypeCode.
BIND(CONCAT(str(?subsystemTypeCode), " - ", str(?subsystemTypeLabel)) as ?subsystemName)
?subsystemUri fta:is-part-of+ ?systemUri.
?rootEventType fta:is-manifestation-of ?behavior .
?behavior fta:has-component ?_subsystemUri.
?_subsystemUri fta:is-part-of* ?systemUri.
FILTER NOT EXISTS{
?systemUri fta:is-part-of ?system2.
?systemUri fta:is-part-of ?system2.
}
?systemUri fta:name ?systemName.
OPTIONAL{
FILTER(?systemUri != ?_subsystemUri)
BIND(?_subsystemUri as ?subsystemUri)
?subsystemUri fta:is-derived-from ?subsystemType.
?subsystemType fta:name ?subsystemTypeLabel.
?subsystemType fta:ata-code ?subsystemTypeCode.
BIND(CONCAT(str(?subsystemTypeCode), " - ", str(?subsystemTypeLabel)) as ?subsystemName)
?subsystemUri fta:is-part-of+ ?systemUri.
}
}
}
}""", "FaultTreeSummary")
Expand All @@ -129,12 +157,6 @@ public List<FaultTree> findAllSummaries() {
.setParameter("pCreated", P_CREATED)
.setParameter("pModified", P_MODIFIED)
.setParameter("pCreator", P_CREATOR)
.setParameter("pLastEditor", P_LAST_EDITOR)
.getResultList();

return ret.stream().map(s -> s.asEntity(type)).toList();
} catch (RuntimeException e) {
throw new PersistenceException(e);
}
.setParameter("pLastEditor", P_LAST_EDITOR);
}
}
19 changes: 19 additions & 0 deletions src/main/java/cz/cvut/kbss/analysis/model/FaultTreeSummary.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package cz.cvut.kbss.analysis.model;


import cz.cvut.kbss.analysis.model.ava.FHAEventType;
import cz.cvut.kbss.analysis.util.Vocabulary;
import cz.cvut.kbss.jopa.model.annotations.*;
import lombok.Getter;
import lombok.Setter;

import java.net.URI;
import java.util.HashSet;


@SparqlResultSetMappings(
Expand All @@ -19,6 +21,12 @@
@Setter
public class FaultTreeSummary extends ManagedEntity{

@OWLObjectProperty(iri = Vocabulary.s_p_is_derived_from)
protected URI rootEvent;

@OWLObjectProperty(iri = Vocabulary.s_p_is_derived_from)
protected URI rootEventType;

@OWLObjectProperty(iri = Vocabulary.s_p_is_artifact_of)
protected URI systemUri;

Expand All @@ -43,6 +51,17 @@ public class FaultTreeSummary extends ManagedEntity{

public void copyTo(FaultTree faultTree){
super.copyTo(faultTree);
if(this.getRootEvent() != null){
FaultEvent root = new FaultEvent();
root.setUri(this.getRootEvent());
faultTree.setManifestingEvent(root);
if(this.getRootEventType() != null){
FHAEventType rootType = new FHAEventType();
rootType.setUri(this.getRootEventType());
root.setSupertypes(new HashSet<>());
root.getSupertypes().add(rootType);
}
}
if(this.getSystemUri() != null){
faultTree.setSystem(new System());
faultTree.getSystem().setUri(this.getSystemUri());
Expand Down

0 comments on commit e3fc3eb

Please sign in to comment.