Skip to content

Commit

Permalink
Merge pull request #84 from kbss-cvut/feature/83-extend-summary
Browse files Browse the repository at this point in the history
Feature/83 extend summary
  • Loading branch information
blcham authored Apr 29, 2024
2 parents 38162c9 + 2122168 commit dbdf6ed
Show file tree
Hide file tree
Showing 20 changed files with 517 additions and 63 deletions.
35 changes: 35 additions & 0 deletions ontology-generator/ontology/fta-fmea-model.ttl
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,13 @@ fta-fmea:has-trigger rdf:type owl:ObjectProperty ;
rdfs:range fta-fmea:event ;
rdfs:label "has trigger" .

### http://onto.fel.cvut.cz/ontologies/fta-fmea-application/is-artifact-of
fta-fmea:is-artifact-of rdf:type owl:ObjectProperty ;
rdfs:range fta-fmea:system ;
rdfs:label "is artifact of" .




#################################################################
# Data properties
Expand Down Expand Up @@ -494,6 +501,14 @@ fta-fmea:to rdf:type owl:DatatypeProperty ;
dc-terms:source rdf:type owl:DatatypeProperty ;
rdfs:label "source" .

### http://onto.fel.cvut.cz/ontologies/fta-fmea-application/subsystem-name
fta-fmea:subsystem-name rdf:type owl:DatatypeProperty ;
rdfs:label "subsystem name" .

### http://onto.fel.cvut.cz/ontologies/fta-fmea-application/system-name
fta-fmea:system-name rdf:type owl:DatatypeProperty ;
rdfs:label "system name" .


#################################################################
# Classes
Expand Down Expand Up @@ -580,6 +595,10 @@ fta-fmea:system rdf:type owl:Class ;
fta-fmea:user rdf:type owl:Class ;
rdfs:label "user" .

### http://onto.fel.cvut.cz/ontologies/fta-fmea-application/editor
fta-fmea:editor rdf:type owl:Class ;
rdfs:label "editor" .


### http://onto.fel.cvut.cz/ontologies/fta-fmea-application/aircraft-model
fta-fmea:aircraft-model rdf:type owl:Class .
Expand Down Expand Up @@ -701,6 +720,22 @@ fta-fmea:sns-component rdf:type owl:Class ;
fta-fmea:summary rdf:type owl:Class ;
rdfs:label "summary" .

### http://onto.fel.cvut.cz/ontologies/fta-fmea-application/summary
fta-fmea:managed-entity rdf:type owl:Class ;
rdfs:label "managed entity" .

### http://onto.fel.cvut.cz/ontologies/fta-fmea-application/named-entity
fta-fmea:named-entity rdf:type owl:Class ;
rdfs:label "named entity" .

### http://onto.fel.cvut.cz/ontologies/reliability-analysis-application#fault-tree-summary
:fault-tree-summary rdf:type owl:Class .


### http://onto.fel.cvut.cz/ontologies/reliability-analysis-application#system-summary
:system-summary rdf:type owl:Class .



### http://onto.fel.cvut.cz/ontologies/fta-fmea-application/verification-method
fta-fmea:verification-method rdf:type owl:Class ;
Expand Down
12 changes: 10 additions & 2 deletions src/main/java/cz/cvut/kbss/analysis/dao/BaseDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,19 @@ protected BaseDao(Class<T> type, EntityManager em, PersistenceConf config, Ident
}

public EntityDescriptor getEntityDescriptor(T entity){
return new EntityDescriptor();
EntityDescriptor descriptor = new EntityDescriptor();
setEntityDescriptor(descriptor);
return descriptor;
}

public EntityDescriptor getEntityDescriptor(URI uri){
return new EntityDescriptor();
EntityDescriptor descriptor = new EntityDescriptor();
setEntityDescriptor(descriptor);
return descriptor;
}

protected void setEntityDescriptor(EntityDescriptor descriptor){

}

public URI getContext(T entity){
Expand Down
53 changes: 49 additions & 4 deletions src/main/java/cz/cvut/kbss/analysis/dao/FaultTreeDao.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package cz.cvut.kbss.analysis.dao;

import cz.cvut.kbss.analysis.config.conf.PersistenceConf;
import cz.cvut.kbss.analysis.model.FaultEvent;
import cz.cvut.kbss.analysis.model.FaultTree;
import cz.cvut.kbss.analysis.exception.PersistenceException;
import cz.cvut.kbss.analysis.model.*;
import cz.cvut.kbss.analysis.service.IdentifierService;
import cz.cvut.kbss.analysis.util.Vocabulary;
import cz.cvut.kbss.jopa.model.EntityManager;
Expand All @@ -13,10 +13,12 @@
import org.springframework.stereotype.Repository;

import java.net.URI;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Repository
public class FaultTreeDao extends NamedEntityDao<FaultTree> {
public class FaultTreeDao extends ManagedEntityDao<FaultTree> {

@Autowired
protected FaultTreeDao(EntityManager em, PersistenceConf config, IdentifierService identifierService) {
Expand All @@ -43,6 +45,7 @@ public EntityDescriptor getEntityDescriptor(FaultTree entity) {
@Override
public EntityDescriptor getEntityDescriptor(URI uri) {
EntityDescriptor entityDescriptor = new EntityDescriptor(uri);
super.setEntityDescriptor(entityDescriptor);
EntityType<FaultTree> ft = em.getMetamodel().entity(type);
EntityType<FaultEvent> fe = em.getMetamodel().entity(FaultEvent.class);
Attribute manifestingEvent = ft.getAttribute("manifestingEvent");
Expand All @@ -62,12 +65,54 @@ public EntityDescriptor getEntityDescriptor(URI uri) {
@Override
public Optional<FaultTree> find(URI id) {
Optional<FaultTree> faultTreeOpt = super.find(id);
if(!faultTreeOpt.isPresent())
if(faultTreeOpt.isEmpty())
return faultTreeOpt;
FaultTree faultTree = faultTreeOpt.get();
faultTree.getAllEvents().stream()
.map(e -> e.getBehavior()).filter(b -> b!=null).map(b -> b.getItem())
.filter(i -> i != null).forEach(i -> i.getName());

return Optional.of(faultTree);
}

@Override
public List<FaultTree> findAllSummaries() {
try {
List<FaultTreeSummary> ret = em.createNativeQuery("""
PREFIX fta: <http://onto.fel.cvut.cz/ontologies/fta-fmea-application/>
SELECT * WHERE {
?uri a ?type.
?uri ?pName ?name.
OPTIONAL{?uri ?pDescription ?description.}
OPTIONAL{?uri ?pCreated ?created.}
OPTIONAL{?uri ?pModified ?modified.}
OPTIONAL{?uri ?pCreator ?creator.}
OPTIONAL{?uri ?pLastEditor ?lastEditor.}
OPTIONAL{
?uri fta:is-manifested-by ?root .
?root fta:is-derived-from ?sup.
?sup fta:is-manifestation-of ?behavior .
?behavior fta:has-component ?subsystemUri.
?subsystemUri fta:name ?subsystemName.
?subsystemUri fta:is-part-of+ ?systemUri.
FILTER NOT EXISTS{
?systemUri fta:is-part-of ?system2.
}
?systemUri fta:name ?systemName.
}
}""", "FaultTreeSummary")
.setParameter("type", typeUri)
.setParameter("pName", P_HAS_NAME)
.setParameter("pDescription", P_HAS_DESCRIPTION)
.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);
}
}
}
101 changes: 101 additions & 0 deletions src/main/java/cz/cvut/kbss/analysis/dao/ManagedEntityDao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package cz.cvut.kbss.analysis.dao;

import cz.cvut.kbss.analysis.config.conf.PersistenceConf;
import cz.cvut.kbss.analysis.exception.PersistenceException;
import cz.cvut.kbss.analysis.model.*;
import cz.cvut.kbss.analysis.service.IdentifierService;
import cz.cvut.kbss.analysis.service.security.SecurityUtils;
import cz.cvut.kbss.analysis.util.Vocabulary;
import cz.cvut.kbss.jopa.model.EntityManager;
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.vocabulary.DC;

import java.net.URI;
import java.util.Date;
import java.util.List;

public class ManagedEntityDao<T extends ManagedEntity> extends NamedEntityDao<T>{

public static URI P_CREATED = URI.create(DC.Terms.CREATED);
public static URI P_MODIFIED = URI.create(DC.Terms.MODIFIED);
public static URI P_CREATOR = URI.create( DC.Terms.CREATOR);
public static URI P_LAST_EDITOR = URI.create(Vocabulary.s_c_editor);

protected ManagedEntityDao(Class<T> type, EntityManager em, PersistenceConf config, IdentifierService identifierService) {
super(type, em, config, identifierService);
}



@Override
protected void setEntityDescriptor(EntityDescriptor descriptor) {
EntityType<ManagedEntity> ft = em.getMetamodel().entity(ManagedEntity.class);
Attribute creator = ft.getAttribute("creator");
Attribute lastEditor = ft.getAttribute("lastEditor");

descriptor.addAttributeContext(creator, null);
descriptor.addAttributeContext(lastEditor, null);
super.setEntityDescriptor(descriptor);
}

public void setChangedByContext(URI context, Date date){
UserReference user = SecurityUtils.currentUserReference();
em.createNativeQuery("""
DELETE{
GRAPH ?context{
?uri ?pModified ?lastModified.
?uri ?pLastEditor ?lastEditor.
}
}INSERT{
GRAPH ?context{
?uri ?pModified ?newModified.
?uri ?pLastEditor ?newLastEditor.
}
}WHERE{
GRAPH ?context{
?uri a ?type.
OPTIONAL{?uri ?pModified ?lastModified.}
OPTIONAL{?uri ?pLastEditor ?lastEditorURI.}
}
}""")
.setParameter("context", context)
.setParameter("type", typeUri)
.setParameter("pModified", P_MODIFIED)
.setParameter("pLastEditor", P_LAST_EDITOR)
.setParameter("newModified", date)
.setParameter("newLastEditor", user.getUri())
.executeUpdate();
}

public List<T> findAllSummaries(){
try {
List<ManagedEntity> ret = em.createNativeQuery("""
SELECT * WHERE {
?uri a ?type.
?uri ?pName ?name.
OPTIONAL{?uri ?pDescription ?description.}
OPTIONAL{?uri ?pCreated ?created.}
OPTIONAL{?uri ?pModified ?modified.}
OPTIONAL{?uri ?pCreator ?creator.}
OPTIONAL{?uri ?pLastEditor ?lastEditor.}
}""", "ManagedEntitySummary")
.setParameter("type", typeUri)
.setParameter("pName", P_HAS_NAME)
.setParameter("pDescription", P_HAS_DESCRIPTION)
.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);
}
}



}
7 changes: 4 additions & 3 deletions src/main/java/cz/cvut/kbss/analysis/dao/NamedEntityDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import cz.cvut.kbss.analysis.config.conf.PersistenceConf;
import cz.cvut.kbss.analysis.exception.PersistenceException;
import cz.cvut.kbss.analysis.model.NamedEntity;
import cz.cvut.kbss.analysis.model.Summary;
import cz.cvut.kbss.analysis.service.IdentifierService;
import cz.cvut.kbss.analysis.util.Vocabulary;
import cz.cvut.kbss.jopa.model.EntityManager;
Expand All @@ -16,17 +15,18 @@ public class NamedEntityDao<T extends NamedEntity> extends BaseDao<T> {

public static URI P_HAS_NAME = URI.create(Vocabulary.s_p_name);
public static URI P_HAS_DESCRIPTION = URI.create(Vocabulary.s_p_description);

@Autowired
protected NamedEntityDao(Class<T> type, EntityManager em, PersistenceConf config, IdentifierService identifierService) {
super(type, em, config, identifierService);
}

public List<T> findAllSummaries(){
try {
List<Summary> ret = em.createNativeQuery("SELECT ?uri ?name ?description WHERE { " +
List<NamedEntity> ret = em.createNativeQuery("SELECT ?uri ?name ?description WHERE { " +
"?uri a ?type. \n" +
"?uri ?pName ?name. \n" +
"OPTIONAL{?uri ?pDescription ?description} \n" +
"OPTIONAL{?uri ?pDescription ?description.} \n" +
"}", "Summary")
.setParameter("type", typeUri)
.setParameter("pName", P_HAS_NAME)
Expand All @@ -38,4 +38,5 @@ public List<T> findAllSummaries(){
throw new PersistenceException(e);
}
}

}
2 changes: 1 addition & 1 deletion src/main/java/cz/cvut/kbss/analysis/dao/SystemDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import org.springframework.stereotype.Repository;

@Repository
public class SystemDao extends NamedEntityDao<System> {
public class SystemDao extends ManagedEntityDao<System> {

@Autowired
protected SystemDao(EntityManager em, PersistenceConf config, IdentifierService identifierService) {
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/cz/cvut/kbss/analysis/dao/UserDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,23 @@ public Optional<User> findByUsername(String username) {
}
}

public String findUsername(URI uri){
Objects.requireNonNull(uri);
try {
return em
.createNativeQuery("SELECT ?username WHERE { ?x a ?type ; ?hasUsername ?username . }",
String.class)
.setParameter("type", typeUri)
.setParameter("x", uri)
.setParameter("hasUsername", URI.create(Vocabulary.s_p_username))
.getSingleResult();
} catch (NoResultException e) {
return null;
} catch (RuntimeException e) {
throw new PersistenceException(e);
}
}

/**
* Checks whether a user with the specified username exists.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
@MappedSuperclass
@Getter
@Setter
public abstract class DomainEntity<T extends DomainEntity> extends NamedEntity{
public abstract class DomainEntity<T extends DomainEntity> extends ManagedEntity{

@OWLDataProperty(iri = Vocabulary.s_p_has_type_category)
private TypeCategory typeCategory;
Expand Down
17 changes: 16 additions & 1 deletion src/main/java/cz/cvut/kbss/analysis/model/FaultTree.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,14 @@
@OWLClass(iri = Vocabulary.s_c_fault_tree)
@Getter
@Setter
public class FaultTree extends NamedEntity {
public class FaultTree extends ManagedEntity {

@Transient
@OWLObjectProperty(iri = Vocabulary.s_p_is_artifact_of)
protected NamedEntity system;
@Transient
@OWLObjectProperty(iri = Vocabulary.s_p_is_performed_by)
protected NamedEntity subsystem;

@NotNull(message = "Manifesting event must be chosen")
@ParticipationConstraints(nonEmpty = true)
Expand All @@ -33,6 +40,14 @@ public Set<FaultEvent> getAllEvents(){
.map(e -> e.getAllEventParts()).orElse(new HashSet<>());
}

@Override
public void setAs(NamedEntity namedEntity) {
if(namedEntity instanceof FaultTreeSummary)
((FaultTreeSummary)namedEntity).copyTo(this);
else
super.setAs(namedEntity);
}

@Override
public String toString() {
return "FaultTree <" + getUri() + "/>";
Expand Down
Loading

0 comments on commit dbdf6ed

Please sign in to comment.