Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

create fault tree example #103

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 94 additions & 0 deletions src/main/java/cz/cvut/kbss/analysis/controller/UtilController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package cz.cvut.kbss.analysis.controller;

import cz.cvut.kbss.analysis.config.conf.PersistenceConf;
import cz.cvut.kbss.analysis.config.conf.RepositoryConf;
import cz.cvut.kbss.analysis.model.*;
import cz.cvut.kbss.analysis.service.FaultEventRepositoryService;
import cz.cvut.kbss.analysis.service.FaultTreeRepositoryService;
import cz.cvut.kbss.analysis.service.util.CreateExampleDomainModel1;
import cz.cvut.kbss.analysis.util.Vocabulary;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

import java.io.File;
import java.lang.System;
import java.net.URI;
import java.util.List;
import java.util.stream.Stream;

@RestController
@RequestMapping("/utils")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class UtilController {

private final FaultEventRepositoryService faultEventService;
private final FaultTreeRepositoryService faultTreeService;

private final CreateExampleDomainModel1 factory;

// private final MigrateFaultTreeToContexts processor;


@ResponseStatus(HttpStatus.NO_CONTENT)
@DeleteMapping(value = "/faultTrees")
public void deleteAll(){
// delete all fault trees
List<FaultTree> faultTrees = faultTreeService.findAll();
for(FaultTree ft : faultTrees ){
faultTreeService.remove(ft.getUri());
}
// delete all fault events
List<FaultEvent> faultEventList = faultEventService.findAll();
for(FaultEvent fe : faultEventList ){
faultEventService.remove(fe.getUri());
}
}

@GetMapping(value = "/create-example-system")
public List<? extends Item> createExampleSystem(){

List<? extends Item> result = factory.createModel();
String root = "c:\\Users\\kostobog\\Documents\\skola\\projects\\2022-ava\\code\\fta-fmea-model\\";
File dir = new File(root, String.format("example-v0.3-snapshot-%d", System.currentTimeMillis()));
if(!dir.exists()){
dir.mkdirs();
}
factory.export(new File(dir, "sns-partonomy-example.trig").toString());
factory.anonymize();
factory.export(new File(dir, "sns-partonomy-example--anonymized.trig").toString());

return result;
// factory.export("");
// n
// return
// Item sys1 = factory.acPartonomy1("acm1");
// factory.persist(sys1);
// Item sys2 = factory.acPartonomy1("acm2");
// factory.persist(sys2);
// return Stream.of(sys1).toList();
}

@GetMapping(value = "/fha-based-example")
public List<FaultEventType> createFHABasedFailureRateEstimates(){
List<FaultEventType> ret = factory.createFHABasedFailureRateEstimates();
return ret;
}

@GetMapping(value = "/uri")
public URI getURI(){
return URI.create(Vocabulary.s_c_aircraft_model);
}

//
// @GetMapping("/migrate")
// public void migrate(){
// processor.move();
// }

// @GetMapping("/test-migration")
// public void testMigration(){
// processor.testMigration();
// }
}
96 changes: 96 additions & 0 deletions src/main/java/cz/cvut/kbss/analysis/model/util/Anonymizer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package cz.cvut.kbss.analysis.model.util;

import cz.cvut.kbss.jopa.model.EntityManager;
import org.apache.commons.io.IOUtils;
import org.eclipse.rdf4j.repository.Repository;
import org.eclipse.rdf4j.repository.RepositoryConnection;

import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Anonymizer {

protected final String VALUES = "\\$\\$VALUES\\$\\$";
protected String updatePartNumbersTemplate;
protected String updateStock;
protected String updateEventTypeLabels;
protected String updateFailureRates;



public Anonymizer() {
loadTemplateUpdates();
}

protected String load(String path){
try {
return IOUtils.toString(this.getClass().getResource(path), Charset.defaultCharset());
} catch (IOException e) {
throw new RuntimeException(e);
}
}

protected void loadTemplateUpdates(){
updatePartNumbersTemplate = load("/queries/anonymize/replace-part-numbers.sparql");
updateStock = load("/queries/anonymize/replace-stock-codes.sparql");
updateEventTypeLabels = load("/queries/anonymize/replace-fault-event-and-failure-mode-names.sparql");
updateFailureRates = load("/queries/anonymize/replace-failure-rates.sparql");
}

public void anonymize(EntityManager em, SensitiveProperties sensitiveProperties){
Repository r = em.unwrap(Repository.class);
RepositoryConnection c = r.getConnection();

for(String update : prepareQueries(sensitiveProperties)){
c.prepareUpdate(update).execute();
}
}



protected List<String> prepareQueries(SensitiveProperties sensitiveProperties){
return Arrays.asList(
preparePartNumberUpdate(sensitiveProperties.getPartNumberSet()),
prepareStockUpdate(sensitiveProperties.getStockSet()),
prepareNamesUpdate(sensitiveProperties.getFaultEventNamesSet()),
prepareFailureRateUpdate(sensitiveProperties.getFailureRateSet())
);
}

protected String preparePartNumberUpdate(Set<String> partNumbers){
List<String> l = new ArrayList<>(partNumbers);
return updatePartNumbersTemplate.replaceFirst(VALUES, IntStream.range(0, l.size())
.mapToObj(i -> String.format("(\"%s\" \"pn-%d\")", l.get(i), i))
.collect(Collectors.joining("\n")));
}

protected String prepareStockUpdate(Set<String> stock){
List<String> l = new ArrayList<>(stock);
return updatePartNumbersTemplate.replaceFirst(VALUES, IntStream.range(0, l.size())
.mapToObj(i -> String.format("(\"%s\" \"stock-%d\")", l.get(i), i))
.collect(Collectors.joining("\n")));
}

protected String prepareNamesUpdate(Set<String> faultEventNames){
return updateEventTypeLabels;
}

protected String prepareFailureRateUpdate(Set<String> failureRates){
return updateFailureRates;
}

protected void executeUpdates(){

}


protected void loadQueries(){

}
}
23 changes: 23 additions & 0 deletions src/main/java/cz/cvut/kbss/analysis/model/util/Exporter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package cz.cvut.kbss.analysis.model.util;

import cz.cvut.kbss.jopa.model.EntityManager;
import org.eclipse.rdf4j.repository.Repository;
import org.eclipse.rdf4j.repository.RepositoryConnection;
import org.eclipse.rdf4j.rio.RDFFormat;
import org.eclipse.rdf4j.rio.Rio;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class Exporter {
public static void exportAsTrig(EntityManager em, String file){
Repository r = em.unwrap(Repository.class);
RepositoryConnection c = r.getConnection();
try(Writer w = new FileWriter(file)) {
c.export(Rio.createWriter(RDFFormat.TRIG, w));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package cz.cvut.kbss.analysis.model.util;

import java.util.HashSet;
import java.util.Set;

public class SensitiveProperties {
protected Set<String> partNumberSet = new HashSet<String>();
protected Set<String> stockSet = new HashSet<>();
protected Set<String> failureRateSet = new HashSet<>();
protected Set<String> faultEventNamesSet = new HashSet<>();

public SensitiveProperties add(String partNumber, String stock, String failureRate, String faultEventName) {
addPartNumber(partNumber);
addStock(stock);
addFailureRate(failureRate);
addFaultEventName(faultEventName);
return this;

}

public SensitiveProperties addPartNumber(String partNumber) {
if (partNumber != null)
partNumberSet.add(partNumber);
return this;
}


public SensitiveProperties addStock(String stock) {
if(stock != null)
stockSet.add(stock);
return this;
}

public SensitiveProperties addFailureRate(String failureRate) {
if(failureRate != null)
failureRateSet.add(failureRate);
return this;
}
public SensitiveProperties addFaultEventName(String faultEventName) {
if(faultEventName != null)
faultEventNamesSet.add(faultEventName);
return this;
}


public Set<String> getPartNumberSet() {
return partNumberSet;
}

public Set<String> getStockSet() {
return stockSet;
}

public Set<String> getFailureRateSet() {
return failureRateSet;
}

public Set<String> getFaultEventNamesSet() {
return faultEventNamesSet;
}
}
Loading
Loading