Skip to content

Commit

Permalink
Merge pull request #111 from kbss-cvut/fix/fta-mfea-371-persist-new-f…
Browse files Browse the repository at this point in the history
…ault-tree-with-system

Create fault tree so that it is attached to FaultTree.system field
  • Loading branch information
kostobog authored Jun 9, 2024
2 parents 0c4796c + 5448286 commit ae86779
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 14 deletions.
54 changes: 51 additions & 3 deletions src/main/java/cz/cvut/kbss/analysis/dao/FaultEventDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import cz.cvut.kbss.analysis.config.conf.PersistenceConf;
import cz.cvut.kbss.analysis.exception.PersistenceException;
import cz.cvut.kbss.analysis.model.System;
import cz.cvut.kbss.analysis.model.*;
import cz.cvut.kbss.analysis.model.diagram.Rectangle;
import cz.cvut.kbss.analysis.service.IdentifierService;
Expand All @@ -13,9 +14,7 @@
import org.springframework.stereotype.Repository;

import java.net.URI;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.*;

@Repository
public class FaultEventDao extends NamedEntityDao<FaultEvent> {
Expand Down Expand Up @@ -84,6 +83,55 @@ public Optional<Event> findEvent(URI id){
}
}

public void loadManagedSupertypesOrCreate(FaultEvent faultEvent, NamedEntity system, URI context){
if(faultEvent.getSupertypes() == null || faultEvent.getSupertypes().isEmpty())
return;
Set<Event> newSupertypes = new HashSet<>();
Set<Event> managedSupertypes = new HashSet<>();
Set<Event> unmanagedSupertypes = faultEvent.getSupertypes();
faultEvent.setSupertypes(managedSupertypes);

for(Event event : unmanagedSupertypes){
Optional<Event> opt = event.getUri() != null ?
findEvent(event.getUri()) :
Optional.ofNullable(null);
if(opt.isPresent())
managedSupertypes.add(opt.get());
else
newSupertypes.add(event);
}

if(newSupertypes.isEmpty())
return;

System managedSystem = em.find(System.class, system.getUri());

EntityDescriptor entityDescriptor = new EntityDescriptor(context);
for(Event evt : newSupertypes){
FailureMode fm = new FailureMode();
fm.setName(evt.getName() + " failure mode");
fm.setItem(managedSystem);
evt.setBehavior(fm);

em.persist(evt, entityDescriptor);
managedSupertypes.add(evt);
}
}

/**
* Replaces the supertypes of the faultEvent argument, if any, with their managed versions
* @param faultEvent
*/
public void loadManagedSupertypes(FaultEvent faultEvent){
if(faultEvent.getSupertypes() != null) {
Set<Event> managedSupertypes = new HashSet<>();
for(Event event : faultEvent.getSupertypes()){
findEvent(event.getUri()).ifPresent(managedSupertypes::add);
}
faultEvent.setSupertypes(managedSupertypes);
}
}

public List<FaultEventReference> getFaultEventRootWithSupertype(URI supertype){
try{
return em.createNativeQuery(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import cz.cvut.kbss.analysis.dao.*;
import cz.cvut.kbss.analysis.exception.EntityNotFoundException;
import cz.cvut.kbss.analysis.model.*;
import cz.cvut.kbss.analysis.model.System;
import cz.cvut.kbss.analysis.model.ava.FHAEventType;
import cz.cvut.kbss.analysis.model.diagram.Rectangle;
import cz.cvut.kbss.analysis.model.fta.CutSetExtractor;
import cz.cvut.kbss.analysis.model.fta.FTAMinimalCutSetEvaluation;
Expand Down Expand Up @@ -65,18 +67,23 @@ protected GenericDao<FaultTree> getPrimaryDao() {

@Transactional
public void createTree(FaultTree faultTree){
if(faultTree.getManifestingEvent() != null){
FaultEvent faultEvent = faultTree.getManifestingEvent();
faultEvent.setRectangle(new Rectangle());
if(faultEvent.getSupertypes() != null) {
Set<Event> managedSupertypes = new HashSet<>();
for(Event event : faultEvent.getSupertypes()){
faultEventDao.findEvent(event.getUri())
.ifPresent(managedSupertypes::add);
}
faultEvent.setSupertypes(managedSupertypes);
}
// generate fault tree uri
faultTree.setUri(identifierService.generateNewInstanceUri(Vocabulary.s_c_fault_tree));

// set up rectangle
FaultEvent faultEvent = faultTree.getManifestingEvent();
faultEvent.setRectangle(new Rectangle());


// load and persist supertypes
if(faultTree.getManifestingEvent().getSupertypes() == null || faultTree.getManifestingEvent().getSupertypes().isEmpty()) {
FHAEventType evt = new FHAEventType();
evt.setName(faultTree.getManifestingEvent().getName());
faultTree.getManifestingEvent().setSupertypes(Collections.singleton(evt));
}

faultEventDao.loadManagedSupertypesOrCreate(faultEvent, (System) faultTree.getSystem(), faultTree.getUri());

persist(faultTree);
}

Expand Down Expand Up @@ -114,6 +121,7 @@ public FaultTree findWithDetails(URI id) {
return ft;
}

@Transactional(readOnly = true)
public void setReferences(FaultTree faultTree){
if(faultTree.getManifestingEvent() == null)
return;
Expand Down

0 comments on commit ae86779

Please sign in to comment.