diff --git a/src/main/java/cz/cvut/kbss/analysis/controller/UtilController.java b/src/main/java/cz/cvut/kbss/analysis/controller/UtilController.java index ecee6cd3..34ecd684 100644 --- a/src/main/java/cz/cvut/kbss/analysis/controller/UtilController.java +++ b/src/main/java/cz/cvut/kbss/analysis/controller/UtilController.java @@ -3,11 +3,9 @@ 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.model.util.Exporter; 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.service.util.MigrateFaultTreeToContexts; import cz.cvut.kbss.analysis.util.Vocabulary; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/cz/cvut/kbss/analysis/model/util/Anonymizer.java b/src/main/java/cz/cvut/kbss/analysis/model/util/Anonymizer.java new file mode 100644 index 00000000..8b6ec7c2 --- /dev/null +++ b/src/main/java/cz/cvut/kbss/analysis/model/util/Anonymizer.java @@ -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 prepareQueries(SensitiveProperties sensitiveProperties){ + return Arrays.asList( + preparePartNumberUpdate(sensitiveProperties.getPartNumberSet()), + prepareStockUpdate(sensitiveProperties.getStockSet()), + prepareNamesUpdate(sensitiveProperties.getFaultEventNamesSet()), + prepareFailureRateUpdate(sensitiveProperties.getFailureRateSet()) + ); + } + + protected String preparePartNumberUpdate(Set partNumbers){ + List 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 stock){ + List 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 faultEventNames){ + return updateEventTypeLabels; + } + + protected String prepareFailureRateUpdate(Set failureRates){ + return updateFailureRates; + } + + protected void executeUpdates(){ + + } + + + protected void loadQueries(){ + + } +} diff --git a/src/main/java/cz/cvut/kbss/analysis/model/util/Exporter.java b/src/main/java/cz/cvut/kbss/analysis/model/util/Exporter.java new file mode 100644 index 00000000..4b321fe3 --- /dev/null +++ b/src/main/java/cz/cvut/kbss/analysis/model/util/Exporter.java @@ -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); + } + } +} diff --git a/src/main/java/cz/cvut/kbss/analysis/model/util/SensitiveProperties.java b/src/main/java/cz/cvut/kbss/analysis/model/util/SensitiveProperties.java new file mode 100644 index 00000000..8d51890f --- /dev/null +++ b/src/main/java/cz/cvut/kbss/analysis/model/util/SensitiveProperties.java @@ -0,0 +1,61 @@ +package cz.cvut.kbss.analysis.model.util; + +import java.util.HashSet; +import java.util.Set; + +public class SensitiveProperties { + protected Set partNumberSet = new HashSet(); + protected Set stockSet = new HashSet<>(); + protected Set failureRateSet = new HashSet<>(); + protected Set 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 getPartNumberSet() { + return partNumberSet; + } + + public Set getStockSet() { + return stockSet; + } + + public Set getFailureRateSet() { + return failureRateSet; + } + + public Set getFaultEventNamesSet() { + return faultEventNamesSet; + } +}