From b34f756dbe37d4f6d2f00f2739c7f18e0e67094b Mon Sep 17 00:00:00 2001 From: Bogdan Kostov Date: Wed, 19 Jun 2024 08:19:02 +0200 Subject: [PATCH] [Update Dao Layer #116] Entities are read from default context; add api to add, update and remove triples in named context --- .../cz/cvut/kbss/analysis/dao/BaseDao.java | 87 ++++++++++++++++--- .../dao/OperationalDataFilterDao.java | 3 +- 2 files changed, 77 insertions(+), 13 deletions(-) diff --git a/src/main/java/cz/cvut/kbss/analysis/dao/BaseDao.java b/src/main/java/cz/cvut/kbss/analysis/dao/BaseDao.java index 2ed50d9..9c0f740 100755 --- a/src/main/java/cz/cvut/kbss/analysis/dao/BaseDao.java +++ b/src/main/java/cz/cvut/kbss/analysis/dao/BaseDao.java @@ -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.AbstractEntity; -import cz.cvut.kbss.analysis.model.opdata.OperationalDataFilter; import cz.cvut.kbss.analysis.model.util.EntityToOwlClassMapper; import cz.cvut.kbss.analysis.service.IdentifierService; import cz.cvut.kbss.jopa.model.EntityManager; @@ -102,8 +101,7 @@ public List findAll(URI contenxt) { public Optional find(URI id) { Objects.requireNonNull(id); try { - EntityDescriptor entityDescriptor = getEntityDescriptor(id); - return Optional.ofNullable(em.find(type, id, entityDescriptor)); + return Optional.ofNullable(em.find(type, id)); } catch (RuntimeException e) { throw new PersistenceException(e); } @@ -213,27 +211,94 @@ public boolean existsWithPredicate(String predicate, String value) { } /** - * Associates new object with subjectURI via property + * Add triple in the provided context * @param subjectURI - * @param object should have non-null uri and context + * @param property + * @param object + * @param context */ - public void persistObject(URI subjectURI, URI property, AbstractEntity object){ + public void persistPropertyInContext(URI subjectURI, URI property, Object object, URI context){ Objects.requireNonNull(subjectURI); Objects.requireNonNull(object); - Objects.requireNonNull(object.getUri()); + Objects.requireNonNull(property); + Objects.requireNonNull(subjectURI); em.createNativeQuery(""" INSERT { GRAPH ?context{ - ?subject ?hasOperationalDataFilter ?object. + ?subject ?property ?object. } }WHERE {} """) - .setParameter("context", object.getContext()) .setParameter("subject", subjectURI) - .setParameter("hasOperationalDataFilter", property) - .setParameter("object", object.getUri()) + .setParameter("property", property) + .setParameter("object", object) + .setParameter("context", context) + .executeUpdate(); + } + + /**R * + * @param subject + * @param property + * @param object + * @param context + */ + public void addOrReplaceValue(URI subject, URI property, Object object, URI context){ + Objects.requireNonNull(subject); + Objects.requireNonNull(object); + Objects.requireNonNull(property); + Objects.requireNonNull(subject); + + em.createNativeQuery(""" + DELETE{ + GRAPH ?context{ + ?subject ?property ?oldObject. + } + }INSERT { + GRAPH ?context{ + ?subject ?property ?object. + } + }WHERE { + OPTIONAL{ + GRAPH ?context{ + ?subject ?property ?oldObject. + } + } + } + """) + .setParameter("subject", subject) + .setParameter("property", property) + .setParameter("object", object) + .setParameter("context", context) .executeUpdate(); } + + /** + * Removes all triples with subject subjectURi and property propertyURI in context. + * @param subjectURI + * @param propertyURI + * @param context + */ + public void removeAll(URI subjectURI, URI propertyURI, URI context){ + Objects.requireNonNull(subjectURI); + Objects.requireNonNull(propertyURI); + Objects.requireNonNull(subjectURI); + + em.createNativeQuery(""" + DELETE { + GRAPH ?context{ + ?subject ?propertyURI ?object. + } + }WHERE { + GRAPH ?context{ + ?subject ?propertyURI ?object. + } + } + """) + .setParameter("subject", subjectURI) + .setParameter("propertyURI", propertyURI) + .setParameter("context", context) + .executeUpdate(); + } } \ No newline at end of file diff --git a/src/main/java/cz/cvut/kbss/analysis/dao/OperationalDataFilterDao.java b/src/main/java/cz/cvut/kbss/analysis/dao/OperationalDataFilterDao.java index d738fef..9976648 100644 --- a/src/main/java/cz/cvut/kbss/analysis/dao/OperationalDataFilterDao.java +++ b/src/main/java/cz/cvut/kbss/analysis/dao/OperationalDataFilterDao.java @@ -9,7 +9,6 @@ import org.springframework.stereotype.Repository; import java.net.URI; -import java.util.Objects; @Repository public class OperationalDataFilterDao extends BaseDao { @@ -35,7 +34,7 @@ public OperationalDataFilter findByEntity(URI entity) { * @param filter should have non-null uri and context */ public void persistHasFilter(URI entityURI, OperationalDataFilter filter){ - persistObject(entityURI, HAS_OPERATIONAL_DATA_FILTER_PROP, filter); + addOrReplaceValue(entityURI, HAS_OPERATIONAL_DATA_FILTER_PROP, filter, filter.getContext()); } @Override