diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index f95f3ba9b..b7308f9d8 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -4,7 +4,7 @@ on:
push:
branches: [ master ]
pull_request:
- branches: [ master, development ]
+ branches: [ master, development, release/** ]
jobs:
build:
@@ -13,10 +13,10 @@ jobs:
steps:
- uses: actions/checkout@v4
- - name: Set up JDK 11
+ - name: Set up JDK
uses: actions/setup-java@v3
with:
distribution: 'temurin'
- java-version: 11
+ java-version: 17
- name: Build with Maven
run: mvn -B package --file pom.xml
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b3e681290..963da1365 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
# JOPA - Change Log
+## 2.0.0 - 2024-05-27
+- Move internal API from `jopa-api` to the `jopa-impl` module (Enhancement #146).
+- Modify name resolution in OWL2Java, support prefixes so that terms are better disambiguated without appending the useless `_A` suffix if possible (Enhancement #85).
+- Remove dependency on AspectJ by rewriting object change tracking and lazy loading (Enhancement #145, #231). See the [wiki](https://github.com/kbss-cvut/jopa/wiki/Change-Tracking-and-Lazy-Loading) for details.
+- Add support for RDF collections (Enhancement #51).
+- Update dependencies (Jena 5.0.0, RDF4J 4.3.11).
+- Require Java 17.
+
## 1.2.2 - 2024-01-30
- Modify `DefaultClasspathScanner` to handle Spring Boot nested JAR introduced in 3.2.0 (Bug #227).
diff --git a/README.md b/README.md
index 882d6bae5..10c1bca9b 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@ The library architecture and API is similar to JPA (see [2]) so that Java develo
* Explicit access to inferred knowledge
* Access to unmapped properties and individual's types
* Transactions
+* Multilingual strings
* Separate storage access layer - Jena, OWLAPI, RDF4J drivers are available
#### Object-ontological Mapping Based on Integrity Constraints
@@ -23,13 +24,13 @@ Similarly to object-relational mapping (ORM), OOM enables to map ontological con
More specifically, OOM in JOPA maps (using the JLS [3] terminology):
-| Ontology | OO Language |
-|---------------------|------------------------------------------|
-| OWL Class | Reference type |
-| Object property | Reference type member |
-| Data property | Primitive type member (+ String, Date) |
-| Annotation property | Reference or primitive type member |
-| Class assertions | Reference type instance or @Types record |
+| Ontology | OO Language |
+|---------------------|------------------------------------------------------------|
+| OWL Class | Reference type |
+| Object property | Reference type member |
+| Data property | Primitive type member (+ String, Date, MultilingualString) |
+| Annotation property | Reference or primitive type member |
+| Class assertions | Reference type instance or @Types record |
All this means that individuals belonging to an OWL class can be retrieved as instances of a (Java) class.
@@ -101,15 +102,6 @@ Supported storages:
* [OWLAPI](https://github.com/owlcs/owlapi)
* [RDF4J](https://rdf4j.org/)
-### Not Supported, yet
-
-JOPA currently does not support referential integrity. This, for example, means that removing an instance that is referenced
-by another instance is possible even though it should not.
-Such feature is vital for object-oriented application, but not compatible with
-the open-world nature of ontologies. Design possibilities and their implications are currently being studied.
-
-Other missing/planned stuff can be found in the GitHub issue tracker and in [TODO.md](TODO.md).
-
## Modules
The whole framework consists of several modules:
@@ -141,14 +133,14 @@ JOPA examples can be found in a separate repository at [https://github.com/kbss-
A real-world, up-to-date project using JOPA is [TermIt](https://github.com/kbss-cvut/termit) - a SKOS-compatible vocabulary manager.
-Note that JOPA requires **Java 11** or later.
+Note that JOPA requires **Java 17** or later.
## Getting JOPA
There are two ways of getting JOPA for a project:
* Clone repository/download zip and build it with Maven,
-* Use a Maven dependency from the [Maven central repository](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22cz.cvut.kbss.jopa%22).
+* Use a Maven/Gradle dependency from the [Maven central repository](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22cz.cvut.kbss.jopa%22).
Basically, the _jopa-impl_ module and one of the OntoDriver implementations is all that is needed:
@@ -169,7 +161,7 @@ Basically, the _jopa-impl_ module and one of the OntoDriver implementations is a
## More Info
-More information about JOPA can be found for example in articles [4], [5], [6] and on the GitHub [Wiki](https://github.com/kbss-cvut/jopa/wiki).
+More information about JOPA can be found, for example, in articles [4], [5], [6] and on the GitHub [Wiki](https://github.com/kbss-cvut/jopa/wiki).
JOPA build status and code metrics can be found at:
@@ -195,6 +187,7 @@ Some related libraries:
Notable changes:
+* **2.0.0** - Major rewrite of change tracking and lazy loading, remove internal API from the `jopa-api` module etc.
* **1.0.0** - Support for static metamodel generation and mapping multiple inheritance via Java interfaces.
* **0.20.0** - Allow editing inferred attributes (See the [wiki](https://github.com/kbss-cvut/jopa/wiki) for more details). Support `IN`, `NOT LIKE`, `<>` operators in SOQL.
* **0.19.0** - Add RDF4J driver (renaming of Sesame driver, which has been deprecated and will be removed in the future)
diff --git a/TODO.md b/TODO.md
deleted file mode 100644
index 76b45bb6e..000000000
--- a/TODO.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# JOPA TODOs
-
-## High Priority
-
-- [ ] Allow static (annotation, attribute of `@OWLDataProperty`) specification of language of String attributes.
- This can be overridden on EM operation level (in descriptor).
-
-
-## Low Priority
-
-- [ ] How to enhance query results with transactional changes? RDF4J driver
- - First check how SQL queries in JPA behave
-- [ ] Add possibility to generate integrity constraints from the object model
-
-## Research Topics
-
-- [ ] Data integrity violation checks. E.g. when an entity is removed, there should be a check whether it is referenced from another entity
diff --git a/datatype/pom.xml b/datatype/pom.xml
index 6f586efc8..4c6a3e404 100644
--- a/datatype/pom.xml
+++ b/datatype/pom.xml
@@ -6,7 +6,7 @@
jopa-allcz.cvut.kbss.jopa
- 1.2.2
+ 2.0.0../pom.xml
diff --git a/datatype/src/main/java/cz/cvut/kbss/jopa/datatype/util/Pair.java b/datatype/src/main/java/cz/cvut/kbss/jopa/datatype/util/Pair.java
index c2d738cfd..6344a97d5 100644
--- a/datatype/src/main/java/cz/cvut/kbss/jopa/datatype/util/Pair.java
+++ b/datatype/src/main/java/cz/cvut/kbss/jopa/datatype/util/Pair.java
@@ -17,30 +17,11 @@
*/
package cz.cvut.kbss.jopa.datatype.util;
-import java.util.AbstractMap;
-
/**
* Represents an ordered pair of values.
*
* @param Type of the first value in the pair
* @param Type of the second value in the pair
*/
-public final class Pair extends AbstractMap.SimpleEntry {
-
- public Pair(F first, S second) {
- super(first, second);
- }
-
- public F getFirst() {
- return getKey();
- }
-
- public S getSecond() {
- return getValue();
- }
-
- @Override
- public String toString() {
- return "(" + getFirst() + ", " + getSecond() + ")";
- }
+public record Pair(F first, S second) {
}
diff --git a/jopa-api/pom.xml b/jopa-api/pom.xml
index 6f1e794f6..2712eccc8 100644
--- a/jopa-api/pom.xml
+++ b/jopa-api/pom.xml
@@ -6,7 +6,7 @@
cz.cvut.kbss.jopajopa-all
- 1.2.2
+ 2.0.0../pom.xml
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/NonJPA.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/NonJPA.java
index 19d14a0da..a50232db3 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/NonJPA.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/NonJPA.java
@@ -18,7 +18,7 @@
package cz.cvut.kbss.jopa;
/**
- * Denotes class/member that is not present in JPA 2.0
+ * Denotes class/member that is not present in JPA (Jakarta Persistence)
*/
public @interface NonJPA {
}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/InvalidAssertionIdentifierException.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/InvalidAssertionIdentifierException.java
index 1726cd3b6..80d17b08b 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/InvalidAssertionIdentifierException.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/InvalidAssertionIdentifierException.java
@@ -22,15 +22,8 @@
*/
public class InvalidAssertionIdentifierException extends OWLPersistenceException {
- public InvalidAssertionIdentifierException(String message) {
- super(message);
- }
-
public InvalidAssertionIdentifierException(String message, Throwable cause) {
super(message, cause);
}
- public InvalidAssertionIdentifierException(Throwable cause) {
- super(cause);
- }
}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/NoResultException.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/NoResultException.java
index aac0adbd6..4c5c6c903 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/NoResultException.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/NoResultException.java
@@ -28,8 +28,6 @@
*/
public class NoResultException extends OWLPersistenceException {
- private static final long serialVersionUID = -1891852675684320722L;
-
public NoResultException(String message) {
super(message);
}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/NoUniqueResultException.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/NoUniqueResultException.java
index 8966c7100..6f2d0942c 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/NoUniqueResultException.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/NoUniqueResultException.java
@@ -28,8 +28,6 @@
*/
public class NoUniqueResultException extends OWLPersistenceException {
- private static final long serialVersionUID = -6340735954399074847L;
-
public NoUniqueResultException(String message) {
super(message);
}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/OWLEntityExistsException.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/OWLEntityExistsException.java
index 215275f14..1f8acaa5a 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/OWLEntityExistsException.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/OWLEntityExistsException.java
@@ -22,8 +22,6 @@
*/
public class OWLEntityExistsException extends OWLPersistenceException {
- private static final long serialVersionUID = 453666323423782580L;
-
public OWLEntityExistsException(String message) {
super(message);
}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/RollbackException.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/RollbackException.java
index 662f69b97..c2d584d7c 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/RollbackException.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/RollbackException.java
@@ -24,8 +24,6 @@
*/
public class RollbackException extends OWLPersistenceException {
- private static final long serialVersionUID = 8371285315001388603L;
-
public RollbackException(String message) {
super(message);
}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/StorageAccessException.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/StorageAccessException.java
index 6e92ca574..abf76eb2b 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/StorageAccessException.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/exceptions/StorageAccessException.java
@@ -22,8 +22,6 @@
*/
public class StorageAccessException extends OWLPersistenceException {
- private static final long serialVersionUID = 4661531292404254252L;
-
public StorageAccessException(String message) {
super(message);
}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/AnnotationValue.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/AnnotationValue.java
deleted file mode 100644
index 1cd0eb47c..000000000
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/AnnotationValue.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * JOPA
- * Copyright (C) 2023 Czech Technical University in Prague
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3.0 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.
- */
-package cz.cvut.kbss.jopa.model;
-
-public interface AnnotationValue {
-
-}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/Cache.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/Cache.java
similarity index 97%
rename from jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/Cache.java
rename to jopa-api/src/main/java/cz/cvut/kbss/jopa/model/Cache.java
index 4fa9d773e..eea855268 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/Cache.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/Cache.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
-package cz.cvut.kbss.jopa.sessions;
+package cz.cvut.kbss.jopa.model;
import cz.cvut.kbss.jopa.model.descriptors.Descriptor;
@@ -26,8 +26,6 @@
*
* If a cache is not in use, the methods of this interface have no effect, except for contains, which
* returns false.
- *
- * Taken from JPA 2.
*/
public interface Cache {
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/EntityManager.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/EntityManager.java
index 2edcd370d..2c71c68b9 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/EntityManager.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/EntityManager.java
@@ -27,14 +27,14 @@
import cz.cvut.kbss.jopa.model.query.Query;
import cz.cvut.kbss.jopa.model.query.TypedQuery;
import cz.cvut.kbss.jopa.model.query.criteria.CriteriaQuery;
-import cz.cvut.kbss.jopa.sessions.CriteriaBuilder;
+import cz.cvut.kbss.jopa.model.query.criteria.CriteriaBuilder;
import cz.cvut.kbss.jopa.transactions.EntityTransaction;
import java.net.URI;
import java.util.List;
import java.util.Map;
-public interface EntityManager {
+public interface EntityManager extends AutoCloseable {
/**
* Make an instance managed and persistent.
@@ -140,14 +140,7 @@ public interface EntityManager {
* null}
* @see #getContexts()
*/
- T find(final Class entityClass, final Object identifier,
- final Descriptor descriptor);
-
- // TODO JPA 2.0 find with properties
-
- // TODO JPA 2.0 find with lock mode
-
- // TODO JPA 2.0 find with lock mode and properties
+ T find(final Class entityClass, final Object identifier, final Descriptor descriptor);
/**
* Get an instance, whose state may be lazily fetched.
@@ -192,33 +185,6 @@ T find(final Class entityClass, final Object identifier,
*/
void flush();
- // /**
- // * Set the flush mode that applies to all objects contained in the
- // * persistence context.
- // *
- // * @param flushMode
- // */
- // public void setFlushMode(FlushModeType flushMode);
-
- // TODO JPA 2.0 getFlushMode
-
- // /**
- // * Set the lock mode for an entity object contained in the persistence
- // * context.
- // *
- // * @param entity
- // * @param lockMode
- // * @throws PersistenceException
- // * if an unsupported lock call is made
- // * @throws IllegalArgumentException
- // * if the instance is not an entity or is a detached entity
- // * @throws TransactionRequiredException
- // * if there is no transaction
- // */
- // public void lock(Object entity, LockModeType lockMode);
-
- // TODO JPA 2.0 lock with lock mode and properties
-
/**
* Refresh the state of the instance from the data source, overwriting changes made to the entity, if any.
*
@@ -229,10 +195,6 @@ T find(final Class entityClass, final Object identifier,
*/
void refresh(final Object entity);
- // TODO JPA 2.0 refresh with lock mode
- // TODO JPA 2.0 refresh with properties
- // TODO JPA 2.0 refresh with lock mode and properties
-
/**
* Clear the persistence context, causing all managed entities to become detached. Changes made to entities that
* have not been flushed to the database will not be persisted.
@@ -285,8 +247,6 @@ T find(final Class entityClass, final Object identifier,
*/
boolean isInferred(T entity, FieldSpecification super T, ?> attribute, Object value);
- // TODO JPA 2.0 public LockModeType getLockMode(Object entity)
-
/**
* Get the properties and hints and associated values that are in effect for the entity manager.
*
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/EntityManagerFactory.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/EntityManagerFactory.java
index b59cd2d1d..f71499178 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/EntityManagerFactory.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/EntityManagerFactory.java
@@ -20,15 +20,15 @@
import cz.cvut.kbss.jopa.exceptions.OWLPersistenceException;
import cz.cvut.kbss.jopa.model.metamodel.Metamodel;
import cz.cvut.kbss.jopa.model.query.Query;
-import cz.cvut.kbss.jopa.sessions.Cache;
+import cz.cvut.kbss.jopa.model.query.criteria.CriteriaBuilder;
+import cz.cvut.kbss.jopa.model.query.criteria.CriteriaQuery;
import java.util.Map;
-public interface EntityManagerFactory {
+public interface EntityManagerFactory extends AutoCloseable {
/**
- * Create a new application-managed EntityManager. This method returns a new
- * EntityManager instance each time it is invoked. The isOpen method will
- * return true on the returned instance.
+ * Create a new application-managed EntityManager. This method returns a new EntityManager instance each time it is
+ * invoked. The isOpen method will return true on the returned instance.
*
* @return entity manager instance
* @throws IllegalStateException if the entity manager factory has been closed
@@ -36,20 +36,24 @@ public interface EntityManagerFactory {
EntityManager createEntityManager();
/**
- * Create a new EntityManager with the specified Map of properties. This
- * method returns a new EntityManager instance each time it is invoked. The
- * isOpen method will return true on the returned instance.
+ * Create a new EntityManager with the specified Map of properties. This method returns a new EntityManager instance
+ * each time it is invoked. The isOpen method will return true on the returned instance.
*
* @param map properties for entity manager
* @return entity manager instance
*/
EntityManager createEntityManager(Map map);
- // TODO JPA 2.0 getCriteriaBuilder
+ /**
+ * Returns an instance of {@link CriteriaBuilder} which may be used to construct {@link CriteriaQuery} objects.
+ *
+ * @return an instance of {@code CriteriaBuilder}
+ * @throws IllegalStateException if the entity manager factory has been closed
+ */
+ CriteriaBuilder getCriteriaBuilder();
/**
- * Return an instance of Metamodel interface for access to the metamodel of
- * the persistence unit.
+ * Return an instance of Metamodel interface for access to the metamodel of the persistence unit.
*
* @return Metamodel instance
* @throws IllegalStateException if the entity manager factory has been closed
@@ -57,19 +61,16 @@ public interface EntityManagerFactory {
Metamodel getMetamodel();
/**
- * Close the factory, releasing any resources that it holds. After a factory
- * instance is closed, all methods invoked on it will throw an
- * IllegalStateException, except for isOpen, which will return false. Once
- * an EntityManagerFactory has been closed, all its entity managers are
- * considered to be in the closed state.
+ * Close the factory, releasing any resources that it holds. After a factory instance is closed, all methods invoked
+ * on it will throw an IllegalStateException, except for isOpen, which will return false. Once an
+ * EntityManagerFactory has been closed, all its entity managers are considered to be in the closed state.
*
* @throws IllegalStateException if the entity manager factory has been closed
*/
void close();
/**
- * Indicates whether the factory is open. Returns true until the factory has
- * been closed.
+ * Indicates whether the factory is open. Returns true until the factory has been closed.
*
* @return true if the entity manager is open
* @throws IllegalStateException if the entity manager factory has been closed
@@ -87,8 +88,7 @@ public interface EntityManagerFactory {
Map getProperties();
/**
- * Access the cache that is associated with the entity manager factory (the
- * "second level cache").
+ * Access the cache that is associated with the entity manager factory (the "second level cache").
*
* @return instance of the Cache interface
* @throws IllegalStateException if the entity manager factory has been closed
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/IRI.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/IRI.java
index 6db16ab37..1ee1c5eb4 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/IRI.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/IRI.java
@@ -20,7 +20,7 @@
import java.net.URI;
import java.util.Objects;
-public class IRI implements AnnotationValue {
+public class IRI {
private final String value;
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/Literal.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/Literal.java
deleted file mode 100644
index 7bd30ba01..000000000
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/Literal.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * JOPA
- * Copyright (C) 2023 Czech Technical University in Prague
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3.0 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.
- */
-package cz.cvut.kbss.jopa.model;
-
-public interface Literal extends AnnotationValue {
-
- String getLang();
-
- T getValue();
-}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/DomainOf.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/DomainOf.java
deleted file mode 100644
index 7a0c08d5c..000000000
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/DomainOf.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * JOPA
- * Copyright (C) 2023 Czech Technical University in Prague
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3.0 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.
- */
-package cz.cvut.kbss.jopa.model.annotations;
-
-import java.lang.annotation.*;
-
-@Documented
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE)
-public @interface DomainOf {
- /**
- * IRI of the object/data property
- *
- * @return IRI of the object/data property
- */
- String owlPropertyIRI();
-}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/DomainRangeConstraints.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/DomainRangeConstraints.java
deleted file mode 100644
index 3167f97c2..000000000
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/DomainRangeConstraints.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * JOPA
- * Copyright (C) 2023 Czech Technical University in Prague
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3.0 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.
- */
-package cz.cvut.kbss.jopa.model.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Documented
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE)
-public @interface DomainRangeConstraints {
-
- DomainOf[] domainOf() default {};
-
- RangeOf[] rangeOf() default {};
-}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/RDFCollection.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/RDFCollection.java
new file mode 100644
index 000000000..e241deeb4
--- /dev/null
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/RDFCollection.java
@@ -0,0 +1,18 @@
+package cz.cvut.kbss.jopa.model.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Specifies mapping of an RDF collection.
+ *
+ * RDF collections are lists of items where each item points to a value and the next item. In this regard, they are
+ * equivalent to a {@link Sequence} of type {@link SequenceType#referenced}. In contrast to referenced lists though, RDF
+ * collections are closed by a {@literal rdf:nil} element.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.FIELD, ElementType.METHOD})
+public @interface RDFCollection {
+}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/RangeOf.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/RangeOf.java
deleted file mode 100644
index f9a3846f8..000000000
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/RangeOf.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * JOPA
- * Copyright (C) 2023 Czech Technical University in Prague
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3.0 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.
- */
-package cz.cvut.kbss.jopa.model.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Documented
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE)
-public @interface RangeOf {
-
- /**
- * IRI of the object property
- *
- * @return IRI of the object property
- */
- String owlPropertyIRI();
-}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/Sequence.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/Sequence.java
index 982f9f002..31823c209 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/Sequence.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/Sequence.java
@@ -30,7 +30,7 @@
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.FIELD,ElementType.METHOD})
+@Target({ElementType.FIELD, ElementType.METHOD})
public @interface Sequence {
/**
@@ -41,27 +41,27 @@
SequenceType type() default SequenceType.referenced;
/**
- * URI of the class that represents the 'OWLList' concept.
- *
- * Relevant only for REFERENCED type.
+ * IRI of the class that represents the 'OWLList' concept.
+ *
+ * Relevant only for {@link SequenceType#referenced} type.
*
* @return OWLList class IRI
*/
- String ClassOWLListIRI() default SequencesVocabulary.s_c_OWLList;
+ String listClassIRI() default SequencesVocabulary.s_c_OWLList;
/**
- * URI of the object property that represents the 'hasContents' role.
- *
- * Relevant only for REFERENCED type.
+ * IRI of the object property that represents the 'hasContents' role.
+ *
+ * Relevant only for {@link SequenceType#referenced} type.
*
* @return hasContents property IRI
*/
- String ObjectPropertyHasContentsIRI() default SequencesVocabulary.s_p_hasContents;
+ String hasContentsPropertyIRI() default SequencesVocabulary.s_p_hasContents;
/**
* URI of the object property that represents the 'hasNext' role.
*
* @return hasNext property IRI
*/
- String ObjectPropertyHasNextIRI() default SequencesVocabulary.s_p_hasNext;
+ String hasNextPropertyIRI() default SequencesVocabulary.s_p_hasNext;
}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/SequenceType.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/SequenceType.java
index dc714d9b8..6f988108e 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/SequenceType.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/SequenceType.java
@@ -22,10 +22,10 @@
*/
public enum SequenceType {
/**
- * Used for simple (nonreferenced) sequences.
+ * Used for simple (non-referenced) sequences.
*
* This means that elements of the sequence are unique to the sequence owner and are NOT shared with other
- * sequences.
+ * sequences. It also means that only resources can be values of a simple sequence.
*
* Example:
*
@@ -36,15 +36,15 @@ public enum SequenceType {
/**
* Used for referenced sequences. This case is more general, but sequence representation requires more space (linear
- * in the original size)
+ * in the original size).
*
- * This means that elements of the sequence are not unique to the sequence owner. Thus these elements might be
- * referenced by other sequences.
+ * This means that elements of the sequence are not unique to the sequence owner. Thus, these elements might be
+ * referenced by other sequences. It also means that elements of the sequence can be literals as well as resources.
*
*/
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/Types.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/Types.java
index e1063d762..ffe4b167e 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/Types.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/annotations/Types.java
@@ -17,7 +17,11 @@
*/
package cz.cvut.kbss.jopa.model.annotations;
-import java.lang.annotation.*;
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
import java.util.Set;
/**
@@ -32,7 +36,7 @@
@Target(ElementType.FIELD)
public @interface Types {
- FetchType fetchType() default FetchType.LAZY;
+ FetchType fetchType() default FetchType.EAGER;
/**
* Denotes a member that is inferred (true) using the OWL reasoner or just asserted (false).
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/descriptors/EntityDescriptor.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/descriptors/EntityDescriptor.java
index cae412ab8..5aa27663f 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/descriptors/EntityDescriptor.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/descriptors/EntityDescriptor.java
@@ -21,12 +21,16 @@
import cz.cvut.kbss.jopa.model.metamodel.Attribute.PersistentAttributeType;
import cz.cvut.kbss.jopa.model.metamodel.FieldSpecification;
import cz.cvut.kbss.jopa.model.metamodel.QueryAttribute;
-import cz.cvut.kbss.jopa.utils.ErrorUtils;
import java.lang.reflect.Field;
import java.net.URI;
-import java.util.*;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Map.Entry;
+import java.util.Objects;
+import java.util.Set;
/**
* Describes an entity.
@@ -42,7 +46,7 @@ public EntityDescriptor() {
}
/**
- * Allows to configure where object property assertions should be stored
+ * Allows configuring where object property assertions should be stored
*
* @param assertionsInSubjectContext Whether object property assertions are stored in the subject's. Defaults to
* {@code true}. If {@code false}, object property assertions are stored in the
@@ -71,8 +75,8 @@ public EntityDescriptor(URI context, boolean assertionsInSubjectContext) {
@Override
public EntityDescriptor addAttributeDescriptor(FieldSpecification, ?> attribute, Descriptor descriptor) {
- Objects.requireNonNull(attribute, ErrorUtils.getNPXMessageSupplier("attribute"));
- Objects.requireNonNull(descriptor, ErrorUtils.getNPXMessageSupplier("descriptor"));
+ Objects.requireNonNull(attribute);
+ Objects.requireNonNull(descriptor);
fieldDescriptors.put(attribute.getJavaField(), descriptor);
return this;
@@ -80,7 +84,7 @@ public EntityDescriptor addAttributeDescriptor(FieldSpecification, ?> attribut
@Override
public EntityDescriptor addAttributeContext(FieldSpecification, ?> attribute, URI context) {
- Objects.requireNonNull(attribute, ErrorUtils.getNPXMessageSupplier("attribute"));
+ Objects.requireNonNull(attribute);
fieldDescriptors.putIfAbsent(attribute.getJavaField(),
createDescriptor(attribute, context != null ? Collections.singleton(context) : Collections.emptySet()));
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/Attribute.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/Attribute.java
index f7a204e2e..1c00b6408 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/Attribute.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/Attribute.java
@@ -18,7 +18,6 @@
package cz.cvut.kbss.jopa.model.metamodel;
import cz.cvut.kbss.jopa.NonJPA;
-import cz.cvut.kbss.jopa.UnusedJPA;
import cz.cvut.kbss.jopa.model.IRI;
import cz.cvut.kbss.jopa.model.annotations.CascadeType;
import cz.cvut.kbss.jopa.model.annotations.ParticipationConstraint;
@@ -63,7 +62,6 @@ enum PersistentAttributeType {
*
* @return corresponding java.lang.reflect.Member
*/
- @UnusedJPA
java.lang.reflect.Member getJavaMember();
/**
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/FieldSpecification.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/FieldSpecification.java
index 7ed4fb13d..c5ddefa59 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/FieldSpecification.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/FieldSpecification.java
@@ -87,4 +87,4 @@ public interface FieldSpecification {
* @return boolean indicating whether the attribute is collection-valued
*/
boolean isCollection();
-}
\ No newline at end of file
+}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/IdentifiableType.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/IdentifiableType.java
index feace8811..1ccd62666 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/IdentifiableType.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/IdentifiableType.java
@@ -18,7 +18,6 @@
package cz.cvut.kbss.jopa.model.metamodel;
import cz.cvut.kbss.jopa.NonJPA;
-import cz.cvut.kbss.jopa.UnusedJPA;
import java.util.Set;
@@ -29,7 +28,6 @@
* @param
* The represented entity or mapped superclass type.
*/
-@UnusedJPA
public interface IdentifiableType extends ManagedType {
/**
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/IdentifierVisitor.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/IdentifierVisitor.java
index 02d91842c..4cfdeb141 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/IdentifierVisitor.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/IdentifierVisitor.java
@@ -20,8 +20,4 @@
public interface IdentifierVisitor {
void visit(IRIIdentifier i);
-
- void visit(KeyIdentifier i);
-
- void visit(SameAsIdentifier i);
}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/KeyIdentifier.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/KeyIdentifier.java
deleted file mode 100644
index 9d14fa9f0..000000000
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/KeyIdentifier.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * JOPA
- * Copyright (C) 2023 Czech Technical University in Prague
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3.0 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.
- */
-package cz.cvut.kbss.jopa.model.metamodel;
-
-import java.util.Set;
-
-import cz.cvut.kbss.jopa.model.IRI;
-
-public interface KeyIdentifier extends Identifier {
-
- Set getOWLPropertyIRIs();
-}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/ListAttribute.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/ListAttribute.java
index e9ef6efcc..909997434 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/ListAttribute.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/ListAttribute.java
@@ -22,18 +22,16 @@
import cz.cvut.kbss.jopa.model.annotations.SequenceType;
/**
- * Instances of the type ListAttribute represent persistent
- * java.util.List-valued attributes.
+ * Instances of the type ListAttribute represent persistent {@link java.util.List}-valued attributes.
*
- * @param
- * The type the represented List belongs to
- * @param
- * The element type of the represented List
+ * @param The type the represented List belongs to
+ * @param The element type of the represented List
*/
public interface ListAttribute extends PluralAttribute, E> {
/**
* Gets the type of the sequence.
+ *
* @return List type
*/
@NonJPA
@@ -41,26 +39,39 @@ public interface ListAttribute extends PluralAttribute
* This is relevant only for referenced lists.
+ *
* @return List type IRI
*/
@NonJPA
- IRI getOWLListClass();
+ IRI getListClassIRI();
/**
* Gets IRI of the property representing the relation between a list node and its content (value).
- *
+ *
* Relevant only for referenced lists.
+ *
* @return Property IRI
*/
@NonJPA
- IRI getOWLPropertyHasContentsIRI();
+ IRI getHasContentsPropertyIRI();
/**
* Gets IRI of the property representing next node in the list.
+ *
* @return Property IRI
*/
@NonJPA
- IRI getOWLObjectPropertyHasNextIRI();
+ IRI getHasNextPropertyIRI();
+
+ /**
+ * Whether this list represents a RDF
+ * collection.
+ *
+ * @return {@code true} when this list attribute is an RDF collection, {@code false} otherwise
+ * @see cz.cvut.kbss.jopa.model.annotations.RDFCollection
+ */
+ @NonJPA
+ boolean isRDFCollection();
}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/MappedSuperclassType.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/MappedSuperclassType.java
index 562cdb32b..7e88f737d 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/MappedSuperclassType.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/MappedSuperclassType.java
@@ -17,13 +17,10 @@
*/
package cz.cvut.kbss.jopa.model.metamodel;
-import cz.cvut.kbss.jopa.UnusedJPA;
-
/**
* Instances of the type MappedSuperclassType represent mapped superclass types.
*
* @param The represented entity type
*/
-@UnusedJPA
public interface MappedSuperclassType extends IdentifiableType {
}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/QueryAttribute.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/QueryAttribute.java
index a1392bb1a..a972b12c6 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/QueryAttribute.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/QueryAttribute.java
@@ -18,7 +18,6 @@
package cz.cvut.kbss.jopa.model.metamodel;
import cz.cvut.kbss.jopa.NonJPA;
-import cz.cvut.kbss.jopa.UnusedJPA;
import cz.cvut.kbss.jopa.model.annotations.ParticipationConstraint;
/**
@@ -50,7 +49,6 @@ public interface QueryAttribute extends FieldSpecification {
*
* @return corresponding java.lang.reflect.Member
*/
- @UnusedJPA
java.lang.reflect.Member getJavaMember();
/**
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/SameAsIdentifier.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/SameAsIdentifier.java
deleted file mode 100644
index f64f8b2ca..000000000
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/SameAsIdentifier.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * JOPA
- * Copyright (C) 2023 Czech Technical University in Prague
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3.0 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.
- */
-package cz.cvut.kbss.jopa.model.metamodel;
-
-public interface SameAsIdentifier extends Identifier {
-}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/SingularAttribute.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/SingularAttribute.java
index 8687c1f1d..169a8cd49 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/SingularAttribute.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/metamodel/SingularAttribute.java
@@ -43,10 +43,8 @@ public interface SingularAttribute extends Attribute, Bindable {
* Is the attribute a version attribute.
*
* @return boolean indicating whether the attribute is a version attribute
- * @deprecated Not supported in JOPA
*/
@UnusedJPA
- @Deprecated
boolean isVersion();
/**
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/query/Tuple.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/query/Tuple.java
deleted file mode 100644
index 536655c39..000000000
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/query/Tuple.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * JOPA
- * Copyright (C) 2023 Czech Technical University in Prague
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3.0 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.
- */
-package cz.cvut.kbss.jopa.model.query;
-
-import java.util.List;
-
-/**
- * Interface for extracting the elements of a query result tuple.
- */
-public interface Tuple {
-
- /**
- * Get the value of the specified tuple element.
- *
- * @param tupleElement
- * tuple element
- * @return value of tuple element
- * @throws IllegalArgumentException
- * if tuple element
- *
- * does not correspond to an element in the
- *
- * query result tuple
- */
- X get(TupleElement tupleElement);
-
- /**
- * Get the value of the tuple element to which the specified alias has been
- * assigned.
- *
- * @param alias
- * alias assigned to tuple element
- * @param type
- * of the tuple element
- * @return value of the tuple element
- * @throws IllegalArgumentException
- * if alias
- *
- * does not correspond to an element in the
- *
- * query result tuple or element cannot be
- *
- * assigned to the specified type
- */
- X get(String alias, Class type);
-
- /**
- * Get the value of the tuple element to which the specified alias has been
- * assigned.
- *
- * @param alias
- * alias assigned to tuple element
- * @return value of the tuple element
- * @throws IllegalArgumentException
- * if alias
- *
- * does not correspond to an element in the
- *
- * query result tuple
- */
- Object get(String alias);
-
- /**
- * Get the value of the element at the specified position in the result
- * tuple. The first position is 0.
- *
- * @param i
- * position in result tuple
- * @param type
- * type of the tuple element
- * @return value of the tuple element
- * @throws IllegalArgumentException
- * if i exceeds
- *
- * length of result tuple or element cannot be
- *
- * assigned to the specified type
- */
- X get(int i, Class type);
-
- /**
- * Get the value of the element at the specified position in the result
- * tuple. The first position is 0.
- *
- * @param i
- * position in result tuple
- * @return value of the tuple element
- * @throws IllegalArgumentException
- * if i exceeds
- *
- * length of result tuple
- */
- Object get(int i);
-
- /**
- * Return the values of the result tuple elements as an array.
- *
- * @return tuple element values
- */
- Object[] toArray();
-
- /**
- * Return the tuple elements.
- *
- * @return tuple elements
- */
- List> getElements();
-}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/CriteriaBuilder.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/query/criteria/CriteriaBuilder.java
similarity index 93%
rename from jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/CriteriaBuilder.java
rename to jopa-api/src/main/java/cz/cvut/kbss/jopa/model/query/criteria/CriteriaBuilder.java
index 43e9d42bc..36f1de8dc 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/CriteriaBuilder.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/query/criteria/CriteriaBuilder.java
@@ -15,13 +15,7 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
-package cz.cvut.kbss.jopa.sessions;
-
-import cz.cvut.kbss.jopa.model.query.criteria.CriteriaQuery;
-import cz.cvut.kbss.jopa.model.query.criteria.Expression;
-import cz.cvut.kbss.jopa.model.query.criteria.Order;
-import cz.cvut.kbss.jopa.model.query.criteria.ParameterExpression;
-import cz.cvut.kbss.jopa.model.query.criteria.Path;
+package cz.cvut.kbss.jopa.model.query.criteria;
/**
* Used to construct criteria queries, compound selections, expressions, predicates, orderings.
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/PredicateFactory.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/query/criteria/PredicateFactory.java
similarity index 98%
rename from jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/PredicateFactory.java
rename to jopa-api/src/main/java/cz/cvut/kbss/jopa/model/query/criteria/PredicateFactory.java
index 63281a937..ce149963d 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/PredicateFactory.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/model/query/criteria/PredicateFactory.java
@@ -15,10 +15,7 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
-package cz.cvut.kbss.jopa.sessions;
-
-import cz.cvut.kbss.jopa.model.query.criteria.Expression;
-import cz.cvut.kbss.jopa.model.query.criteria.Predicate;
+package cz.cvut.kbss.jopa.model.query.criteria;
import java.util.Collection;
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/ChangeManager.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/ChangeManager.java
deleted file mode 100644
index 5fa4eeb3b..000000000
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/ChangeManager.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * JOPA
- * Copyright (C) 2023 Czech Technical University in Prague
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3.0 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.
- */
-package cz.cvut.kbss.jopa.sessions;
-
-public interface ChangeManager {
-
- /**
- * This method does a quick check to find out whether there are any changes
- * to the clone. It does a object value comparison, i. e. it compares each
- * value of the clone against the original value and returns true if a
- * change is found.
- *
- * @param original The original object.
- * @param clone The clone, whose changes we are looking for.
- * @return True if there is a change (at least one) or false, if the values are identical.
- */
- boolean hasChanges(Object original, Object clone);
-
- /**
- * Calculates the changes that happened to the clone object. If there are no
- * changes, null is returned. The changes are written into the change set
- * passed in as argument.
- *
- * @param changeSet Contains references to the original and clone objects. Into this change set the changes should
- * be propagated
- * @return {@code true} if there were any changes, {@code false} otherwise
- * @throws NullPointerException If {@code changeSet} is {@code null}
- */
- boolean calculateChanges(ObjectChangeSet changeSet);
-
-}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/ChangeRecord.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/ChangeRecord.java
deleted file mode 100644
index d55699358..000000000
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/ChangeRecord.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * JOPA
- * Copyright (C) 2023 Czech Technical University in Prague
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3.0 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.
- */
-package cz.cvut.kbss.jopa.sessions;
-
-import cz.cvut.kbss.jopa.model.metamodel.FieldSpecification;
-
-/**
- * Objects of classes implementing this interface represent a change of one attribute of an entity class. Objects store
- * only the new value, old value is in the original and it is not needed.
- */
-public interface ChangeRecord {
-
- /**
- * Returns the new value of the attribute.
- *
- * @return Object
- */
- Object getNewValue();
-
- /**
- * Sets the new value of the attribute in case this change record needs to be updated.
- *
- * @param value The value to set
- */
- void setNewValue(Object value);
-
- /**
- * Gets the attribute to which this change record is bound.
- *
- * @return the attribute
- */
- FieldSpecification, ?> getAttribute();
-
- /**
- * Whether this change record prevents caching of the instance on which the change is applied.
- *
- * @return Whether this change record prevents caching
- */
- boolean doesPreventCaching();
-
- /**
- * Marks this change record to prevent caching.
- *
- * @see #doesPreventCaching()
- */
- void preventCaching();
-}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/CloneBuilder.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/CloneBuilder.java
deleted file mode 100644
index 074da61ff..000000000
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/CloneBuilder.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * JOPA
- * Copyright (C) 2023 Czech Technical University in Prague
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3.0 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.
- */
-package cz.cvut.kbss.jopa.sessions;
-
-import cz.cvut.kbss.jopa.model.descriptors.Descriptor;
-
-import java.lang.reflect.Field;
-
-/**
- * Objects of this interface are responsible for building clones for UnitOfWork
- * transactions.
- */
-public interface CloneBuilder {
-
- /**
- * Builds clone of the given object.
- *
- * @param original Object
- * @param cloneConfiguration Configuration for the cloning process
- * @return Object The clone
- * @throws NullPointerException If {@code original} or {@code repository} is {@code null}
- */
- Object buildClone(Object original, CloneConfiguration cloneConfiguration);
-
- /**
- * Builds clone of the given object.
- *
- * This method differs from {@link #buildClone(Object, CloneConfiguration)} in that it
- * accepts another argument which represents the owner of the built clone.
- * This is useful in situations when we are cloning attributes directly, e. g. when lazily loading a field value.
- *
- * @param cloneOwner The owner of the created clone
- * @param clonedField The field whose value is being cloned
- * @param original The original to clone
- * @param descriptor Entity descriptor
- * @return The clone
- * @throws NullPointerException If {@code cloneOwner}, {@code original} or {@code contextUri} is {@code null}
- */
- Object buildClone(Object cloneOwner, Field clonedField, Object original, Descriptor descriptor);
-
- /**
- * Resets the clone builder.
- *
- * Especially resets the visited objects cache to make sure all the clones are built from scratch and are not
- * affected by the previously built ones.
- */
- void reset();
-
- /**
- * Removes the specified instance from the clone builder's visited entities cache.
- *
- * @param instance The instance to remove (original object).
- * @param descriptor Instance descriptor
- */
- void removeVisited(Object instance, Descriptor descriptor);
-
- /**
- * Merges the changes on clone into the original object.
- *
- * @param changeSet Contains changes to merge
- */
- void mergeChanges(ObjectChangeSet changeSet);
-}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/MergeManager.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/MergeManager.java
deleted file mode 100644
index cf13f4c62..000000000
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/MergeManager.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * JOPA
- * Copyright (C) 2023 Czech Technical University in Prague
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3.0 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.
- */
-package cz.cvut.kbss.jopa.sessions;
-
-/**
- * This interface defines methods for merging changes from clones to originals.
- */
-public interface MergeManager {
-
- /**
- * Merge changes from one ObjectChangeSet, which represents the changes made
- * to clone, into the original object.
- *
- * @param changeSet ObjectChangeSet
- * @return Object The merged object.
- */
- Object mergeChangesOnObject(ObjectChangeSet changeSet);
-
- /**
- * Merge changes from the provided UnitOfWorkChangeSet into the target
- * session.
- *
- * @param changeSet UnitOfWorkChangeSet
- */
- void mergeChangesFromChangeSet(UnitOfWorkChangeSet changeSet);
-
- /**
- * Merge newly created object into the shared session cache.
- *
- * @param changeSet ObjectChangeSet
- */
- void mergeNewObject(ObjectChangeSet changeSet);
-
-}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/ObjectChangeSet.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/ObjectChangeSet.java
deleted file mode 100644
index b5669fb8c..000000000
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/ObjectChangeSet.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * JOPA
- * Copyright (C) 2023 Czech Technical University in Prague
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3.0 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.
- */
-package cz.cvut.kbss.jopa.sessions;
-
-import cz.cvut.kbss.jopa.model.descriptors.Descriptor;
-
-import java.net.URI;
-import java.util.Set;
-
-public interface ObjectChangeSet {
-
- /**
- * Adds a new change record to this change set.
- *
- * If there was a change for attribute represented by the new record, it will be overwritten.
- *
- * @param record The record to add
- */
- void addChangeRecord(ChangeRecord record);
-
- /**
- * Gets type of the changed object.
- *
- * @return Object type
- */
- Class> getObjectClass();
-
- /**
- * Gets changes held in this change set.
- *
- * @return Set of changes
- */
- Set getChanges();
-
- /**
- * Whether this change set contains an changes.
- *
- * @return {@code true} if there are any changes in this change set, {@code false} otherwise
- */
- boolean hasChanges();
-
- /**
- * Specifies whether this change set represents a new object.
- *
- * @param isNew Whether this is a new object's change set
- */
- void setNew(boolean isNew);
-
- /**
- * Whether this is a new object's change set.
- *
- * @return Whether target object is new
- */
- boolean isNew();
-
- /**
- * Gets the clone with changes.
- *
- * @return Clone
- */
- Object getCloneObject();
-
- /**
- * Gets the original object.
- *
- * @return Original
- */
- Object getChangedObject();
-
- /**
- * Gets descriptor of the changed object.
- *
- * @return Instance descriptor
- */
- Descriptor getEntityDescriptor();
-
- /**
- * Gets ontology context URI, to which the changed object belongs.
- *
- * @return context URI
- */
- URI getEntityContext();
-}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/QueryFactory.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/QueryFactory.java
deleted file mode 100644
index 0bae39b9f..000000000
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/QueryFactory.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * JOPA
- * Copyright (C) 2023 Czech Technical University in Prague
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3.0 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.
- */
-package cz.cvut.kbss.jopa.sessions;
-
-import cz.cvut.kbss.jopa.model.query.Query;
-import cz.cvut.kbss.jopa.model.query.TypedQuery;
-
-public interface QueryFactory {
-
- /**
- * Creates query object representing a native SPARQL query.
- *
- * @param sparql The query
- * @return Query object
- * @throws NullPointerException If {@code sparql} is {@code null}
- */
- Query createNativeQuery(String sparql);
-
- /**
- * Creates typed query object representing a native SPARQL query.
- *
- * @param sparql The query
- * @param resultClass Type of the results
- * @return Query object
- * @throws NullPointerException If {@code sparql} or {@code resultClass} is {@code null}
- */
- TypedQuery createNativeQuery(String sparql, Class resultClass);
-
- /**
- * Creates a query object representing a native SPARQL query.
- * @param sparql The query
- * @param resultSetMapping Name of the result set mapping to apply
- * @return Query object
- * * @throws NullPointerException If {@code sparql} or {@code resultSetMapping} is {@code null}
- */
- Query createNativeQuery(String sparql, String resultSetMapping);
-
- /**
- * Creates query object representing a native SPARQL query.
- *
- * @param query The query
- * @return Query object
- * @throws NullPointerException If {@code sparql} is {@code null}
- */
- Query createQuery(String query);
-
- /**
- * Creates typed query object representing a native SPARQL query.
- *
- * @param query The query
- * @param resultClass Type of the results param URI of the ontology context against which the query will be
- * evaluated
- * @return Query object
- * @throws NullPointerException If {@code sparql} or {@code resultClass} is {@code null}
- */
- TypedQuery createQuery(String query, Class resultClass);
-
- /**
- * Creates a query object representing a native SPARQL query.
- *
- * @param name The name of the query defined in metadata
- * @return Query object
- * @throws IllegalArgumentException If a query has not been defined with the given name
- */
- Query createNamedQuery(String name);
-
- /**
- * Creates a typed query object representing a native SPARQL query.
- *
- * @param name The name of the query defined in metadata
- * @param resultClass Type of the results param URI of the ontology context against which the query will be
- * evaluated
- * @return Query object
- * @throws IllegalArgumentException If a query has not been defined with the given name
- */
- TypedQuery createNamedQuery(String name, Class resultClass);
-}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/Session.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/Session.java
deleted file mode 100644
index e918c9471..000000000
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/sessions/Session.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * JOPA
- * Copyright (C) 2023 Czech Technical University in Prague
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3.0 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.
- */
-package cz.cvut.kbss.jopa.sessions;
-
-import java.net.URI;
-
-public interface Session {
-
- /**
- * Acquires UnitOfWork object to perform transaction operations.
- *
- * @return UnitOfWork
- */
- UnitOfWork acquireUnitOfWork();
-
- /**
- * Release this session and all its children.
- */
- void release();
-
- /**
- * Remove the given object from the session's live object cache. This is
- * particularly meant for merging deleted objects from transactions.
- *
- * @param object
- * Object
- * @param context
- * Entity context URI
- */
- void removeObjectFromCache(Object object, URI context);
-}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/transactions/TransactionWrapper.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/transactions/TransactionWrapper.java
deleted file mode 100644
index 6f56e9436..000000000
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/transactions/TransactionWrapper.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * JOPA
- * Copyright (C) 2023 Czech Technical University in Prague
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3.0 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.
- */
-package cz.cvut.kbss.jopa.transactions;
-
-/**
- * This interface enables JTA transactions and EntityTransactions to be handled uniformly.
- */
-@FunctionalInterface
-public interface TransactionWrapper {
-
- EntityTransaction getTransaction();
-}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/utils/ErrorUtils.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/utils/ErrorUtils.java
deleted file mode 100644
index ad11fc234..000000000
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/utils/ErrorUtils.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * JOPA
- * Copyright (C) 2023 Czech Technical University in Prague
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3.0 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.
- */
-package cz.cvut.kbss.jopa.utils;
-
-import java.util.function.Supplier;
-
-public final class ErrorUtils {
-
- /**
- * Error message stating that an argument cannot be null.
- *
- * This message contains a placeholder {@code arg}, which should be replaced
- * with the actual argument name.
- */
- private static final String ARGUMENT_NULL = "Argument '$arg$' cannot be null.";
-
- private static final String PLACEHOLDER = "$arg$";
-
- private ErrorUtils() {
- throw new AssertionError();
- }
-
- /**
- * Provides a {@link NullPointerException} message supplier.
- *
- * This supplier constructs messages which state than an argument with the specified name cannot be null.
- *
- * @param argName Argument name
- * @return Error message supplier
- */
- public static Supplier getNPXMessageSupplier(final String argName) {
- return () -> ARGUMENT_NULL.replace(PLACEHOLDER, argName);
- }
-}
diff --git a/jopa-api/src/main/java/cz/cvut/kbss/jopa/vocabulary/SKOS.java b/jopa-api/src/main/java/cz/cvut/kbss/jopa/vocabulary/SKOS.java
index 708397772..df6295019 100644
--- a/jopa-api/src/main/java/cz/cvut/kbss/jopa/vocabulary/SKOS.java
+++ b/jopa-api/src/main/java/cz/cvut/kbss/jopa/vocabulary/SKOS.java
@@ -29,6 +29,11 @@ public final class SKOS {
*/
public static final String NAMESPACE = "http://www.w3.org/2004/02/skos/core#";
+ /**
+ * Typical prefix used for {@link #NAMESPACE}.
+ */
+ public static final String PREFIX = "skos";
+
/**
* SKOS Collection class.
*
diff --git a/jopa-api/src/test/java/cz/cvut/kbss/jopa/model/metamodel/CollectionTypeTest.java b/jopa-api/src/test/java/cz/cvut/kbss/jopa/model/metamodel/CollectionTypeTest.java
index 783e8360b..934f9eb49 100644
--- a/jopa-api/src/test/java/cz/cvut/kbss/jopa/model/metamodel/CollectionTypeTest.java
+++ b/jopa-api/src/test/java/cz/cvut/kbss/jopa/model/metamodel/CollectionTypeTest.java
@@ -53,4 +53,4 @@ static Stream fromClassTestValues() {
void fromClassThrowsIllegalArgumentExceptionForUnsupportedClass() {
assertThrows(IllegalArgumentException.class, () -> CollectionType.fromClass(String.class));
}
-}
\ No newline at end of file
+}
diff --git a/jopa-distribution/pom.xml b/jopa-distribution/pom.xml
index c89fb89ca..511994397 100644
--- a/jopa-distribution/pom.xml
+++ b/jopa-distribution/pom.xml
@@ -6,7 +6,7 @@
cz.cvut.kbss.jopajopa-all
- 1.2.2
+ 2.0.0../pom.xml
diff --git a/jopa-impl/pom.xml b/jopa-impl/pom.xml
index e42f31954..df77d5467 100644
--- a/jopa-impl/pom.xml
+++ b/jopa-impl/pom.xml
@@ -6,7 +6,7 @@
cz.cvut.kbss.jopajopa-all
- 1.2.2
+ 2.0.0../pom.xml
@@ -15,7 +15,8 @@
jar
- 4.9.3
+ 4.12.0
+ 1.14.8
@@ -34,28 +35,16 @@
datatype${project.version}
-
- org.aspectj
- aspectjrt
- ${org.aspectj.version}
-
-
- org.aspectj
- aspectjweaver
- ${org.aspectj.version}
- runtime
-
-
- org.jgrapht
- jgrapht-core
- 1.1.0
- runtime
- org.antlrantlr4-runtime${org.antlr4.version}
+
+ net.bytebuddy
+ byte-buddy
+ ${net.bytebuddy.version}
+
@@ -74,49 +63,6 @@
-
- dev.aspectj
- aspectj-maven-plugin
-
- ${jdk.version}
-
- ${jdk.version}
-
-
-
-
-
-
- org.aspectj
- aspectjtools
- ${org.aspectj.version}
-
-
-
-
- compile
- process-classes
-
- compile
-
-
-
-
-
- test-compile
- process-test-classes
-
-
- test-compile
-
-
-
- org.apache.maven.pluginsmaven-surefire-plugin
diff --git a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/accessors/DefaultStorageAccessor.java b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/accessors/DefaultStorageAccessor.java
index 6d43c1075..2ad48b4ef 100644
--- a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/accessors/DefaultStorageAccessor.java
+++ b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/accessors/DefaultStorageAccessor.java
@@ -17,6 +17,7 @@
*/
package cz.cvut.kbss.jopa.accessors;
+import cz.cvut.kbss.jopa.exception.DataSourceCreationException;
import cz.cvut.kbss.jopa.exceptions.OWLPersistenceException;
import cz.cvut.kbss.jopa.exceptions.StorageAccessException;
import cz.cvut.kbss.jopa.utils.ReflectionUtils;
diff --git a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/exception/AbstractTypeException.java b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/exception/AbstractTypeException.java
new file mode 100644
index 000000000..43fe4de73
--- /dev/null
+++ b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/exception/AbstractTypeException.java
@@ -0,0 +1,17 @@
+package cz.cvut.kbss.jopa.exception;
+
+import cz.cvut.kbss.jopa.exceptions.OWLPersistenceException;
+
+/**
+ * Indicates that an attempt has been made to instantiate a class that is abstract in terms of JOPA.
+ *
+ * This could be, for example, a {@link cz.cvut.kbss.jopa.model.annotations.MappedSuperclass} type, an {@link
+ * cz.cvut.kbss.jopa.model.metamodel.EntityType} representing an interface or an abstract entity class that needs to be
+ * inherited for instantiation.
+ */
+public class AbstractTypeException extends OWLPersistenceException {
+
+ public AbstractTypeException(String message) {
+ super(message);
+ }
+}
diff --git a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/accessors/DataSourceCreationException.java b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/exception/DataSourceCreationException.java
similarity index 81%
rename from jopa-impl/src/main/java/cz/cvut/kbss/jopa/accessors/DataSourceCreationException.java
rename to jopa-impl/src/main/java/cz/cvut/kbss/jopa/exception/DataSourceCreationException.java
index c4ec46249..3e00dcced 100644
--- a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/accessors/DataSourceCreationException.java
+++ b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/exception/DataSourceCreationException.java
@@ -15,22 +15,14 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
-package cz.cvut.kbss.jopa.accessors;
+package cz.cvut.kbss.jopa.exception;
/**
* Indicates that a data source cannot be created.
*/
public class DataSourceCreationException extends RuntimeException {
- public DataSourceCreationException(String message) {
- super(message);
- }
-
public DataSourceCreationException(String message, Throwable cause) {
super(message, cause);
}
-
- public DataSourceCreationException(Throwable cause) {
- super(cause);
- }
}
diff --git a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/exception/LazyLoadingException.java b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/exception/LazyLoadingException.java
new file mode 100644
index 000000000..e6f9f7bbe
--- /dev/null
+++ b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/exception/LazyLoadingException.java
@@ -0,0 +1,20 @@
+package cz.cvut.kbss.jopa.exception;
+
+import cz.cvut.kbss.jopa.exceptions.OWLPersistenceException;
+
+/**
+ * Indicates an issue with lazy loading.
+ *
+ * Typically, this would be an attempt to trigger lazy loading on a proxy that is not attached to any active persistence
+ * context.
+ */
+public class LazyLoadingException extends OWLPersistenceException {
+
+ public LazyLoadingException(String message) {
+ super(message);
+ }
+
+ public LazyLoadingException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/loaders/DefaultClasspathScanner.java b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/loaders/DefaultClasspathScanner.java
index 4c8790f87..f0be858e2 100644
--- a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/loaders/DefaultClasspathScanner.java
+++ b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/loaders/DefaultClasspathScanner.java
@@ -23,9 +23,7 @@
import java.io.File;
import java.io.IOException;
-import java.io.UnsupportedEncodingException;
import java.net.URI;
-import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
@@ -56,7 +54,7 @@ public class DefaultClasspathScanner implements ClasspathScanner {
protected final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
protected String pathPattern;
- protected Set visited;
+ protected Set visited;
@Override
public void addListener(Consumer> listener) {
@@ -64,7 +62,8 @@ public void addListener(Consumer> listener) {
}
/**
- * Inspired by https://github.com/ddopson/java-class-enumerator
+ * Inspired by https://github.com/ddopson/java-class-enumerator
*/
@Override
public void processClasses(String scanPackage) {
@@ -84,15 +83,16 @@ public void processClasses(String scanPackage) {
protected void processElements(Enumeration urls, String scanPath) throws IOException {
while (urls.hasMoreElements()) {
final URL url = urls.nextElement();
- if (visited.contains(url)) {
+ final String elemUri = url.toString();
+ if (visited.contains(elemUri)) {
continue;
}
- visited.add(url);
+ visited.add(elemUri);
LOG.trace("Processing classpath element {}", url);
- if (isJar(url.toString())) {
+ if (isJar(elemUri)) {
processJarFile(createJarFile(url));
} else {
- processDirectory(new File(getUrlAsUri(url).getPath()), scanPath);
+ processDirectory(new File(URI.create(elemUri).getPath()), scanPath);
}
}
}
@@ -102,9 +102,8 @@ protected void processElements(Enumeration urls, String scanPath) throws IO
*
* @param url Resource URL (presumably leading to a local file)
* @return Decoded argument
- * @throws UnsupportedEncodingException Should not happen, using standard UTF-8 encoding
*/
- protected static String sanitizePath(URL url) throws UnsupportedEncodingException {
+ protected static String sanitizePath(URL url) {
return URLDecoder.decode(url.getFile(), StandardCharsets.UTF_8);
}
@@ -119,16 +118,6 @@ protected static JarFile createJarFile(URL elementUrl) throws IOException {
return new JarFile(jarPath);
}
- protected static URI getUrlAsUri(URL url) {
- try {
- // Transformation to URI handles encoding, e.g. of whitespaces in the path
- return url.toURI();
- } catch (URISyntaxException ex) {
- throw new OWLPersistenceException(
- "Unable to scan resource " + url + ". It is not a valid URI.", ex);
- }
- }
-
/**
* Processes the specified {@link JarFile}, looking for classes in the configured package.
*
@@ -165,7 +154,7 @@ protected void processClass(String className) {
listeners.forEach(listener -> listener.accept(cls));
} catch (Exception | NoClassDefFoundError e) {
LOG.debug("Unable to load class {}, got error {}: {}. Skipping the class. If it is an entity class, ensure it is available on classpath and is built with supported Java version.", className, e.getClass()
- .getName(), e.getMessage());
+ .getName(), e.getMessage());
}
}
diff --git a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/loaders/PersistenceUnitClassFinder.java b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/loaders/PersistenceUnitClassFinder.java
index 51e5c76b5..c190e3036 100644
--- a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/loaders/PersistenceUnitClassFinder.java
+++ b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/loaders/PersistenceUnitClassFinder.java
@@ -47,12 +47,14 @@ public class PersistenceUnitClassFinder {
* relevant for the persistence provider.
*
* These classes include:
- *
Entities, i.e. classes annotated with {@link cz.cvut.kbss.jopa.model.annotations.OWLClass},
- *
Result result mapping classes, i.e. classes annotated with {@link cz.cvut.kbss.jopa.model.annotations.SparqlResultSetMapping}
- * or {@link cz.cvut.kbss.jopa.model.annotations.SparqlResultSetMappings}
+ *
+ *
Entities, i.e. classes annotated with {@link cz.cvut.kbss.jopa.model.annotations.OWLClass},
+ *
Result result mapping classes, i.e. classes annotated with {@link cz.cvut.kbss.jopa.model.annotations.SparqlResultSetMapping}
+ * or {@link cz.cvut.kbss.jopa.model.annotations.SparqlResultSetMappings}
+ *
*
- * @param configuration Persistence configuration, should contain value for the {@link
- * JOPAPersistenceProperties#SCAN_PACKAGE} property
+ * @param configuration Persistence configuration, should contain value for the
+ * {@link JOPAPersistenceProperties#SCAN_PACKAGE} property
* @throws IllegalArgumentException If {@link JOPAPersistenceProperties#SCAN_PACKAGE} values is missing
*/
public void scanClasspath(Configuration configuration) {
@@ -70,7 +72,7 @@ public void scanClasspath(Configuration configuration) {
private static ClasspathScanner resolveClasspathScanner(Configuration config) {
try {
final String scannerType = config.get(JOPAPersistenceProperties.CLASSPATH_SCANNER_CLASS,
- DefaultClasspathScanner.class.getName());
+ DefaultClasspathScanner.class.getName());
final Class> scannerCls = Class.forName(scannerType);
return (ClasspathScanner) ReflectionUtils.instantiateUsingDefaultConstructor(scannerCls);
} catch (ClassNotFoundException | cz.cvut.kbss.jopa.exception.InstantiationException e) {
@@ -100,9 +102,10 @@ public Set getResultSetMappings() {
/**
* Gets {@link cz.cvut.kbss.jopa.model.AttributeConverter} implementations found during classpath scanning.
- *
+ *
* The converters are wrapped in an internal helper class {@link ConverterWrapper}.
- * @return Set of custom converters
+ *
+ * @return Map of classes to custom converters
*/
public Map, ConverterWrapper, ?>> getAttributeConverters() {
assert scanned;
diff --git a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/model/AbstractQuery.java b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/model/AbstractQuery.java
index f5db7b42c..2dd0629f2 100644
--- a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/model/AbstractQuery.java
+++ b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/model/AbstractQuery.java
@@ -24,7 +24,6 @@
import cz.cvut.kbss.jopa.model.query.Query;
import cz.cvut.kbss.jopa.query.QueryHolder;
import cz.cvut.kbss.jopa.sessions.ConnectionWrapper;
-import cz.cvut.kbss.jopa.utils.ErrorUtils;
import cz.cvut.kbss.jopa.utils.Procedure;
import cz.cvut.kbss.jopa.utils.ThrowingConsumer;
import cz.cvut.kbss.ontodriver.ResultSet;
@@ -34,7 +33,12 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.*;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
import java.util.function.Function;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
@@ -56,8 +60,8 @@ abstract class AbstractQuery implements Query {
};
AbstractQuery(QueryHolder query, ConnectionWrapper connection) {
- this.query = Objects.requireNonNull(query, ErrorUtils.getNPXMessageSupplier("query"));
- this.connection = Objects.requireNonNull(connection, ErrorUtils.getNPXMessageSupplier("connection"));
+ this.query = Objects.requireNonNull(query);
+ this.connection = Objects.requireNonNull(connection);
}
private void logQuery() {
diff --git a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/model/BeanListenerAspect.java b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/model/BeanListenerAspect.java
deleted file mode 100644
index 9923094fb..000000000
--- a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/model/BeanListenerAspect.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * JOPA
- * Copyright (C) 2023 Czech Technical University in Prague
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3.0 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.
- */
-package cz.cvut.kbss.jopa.model;
-
-import cz.cvut.kbss.jopa.exceptions.OWLPersistenceException;
-import cz.cvut.kbss.jopa.model.metamodel.EntityType;
-import cz.cvut.kbss.jopa.model.metamodel.FieldSpecification;
-import cz.cvut.kbss.jopa.sessions.UnitOfWorkImpl;
-import cz.cvut.kbss.jopa.sessions.validator.AttributeModificationValidator;
-import cz.cvut.kbss.jopa.utils.EntityPropertiesUtils;
-import org.aspectj.lang.JoinPoint;
-import org.aspectj.lang.annotation.*;
-import org.aspectj.lang.reflect.FieldSignature;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.Serializable;
-import java.lang.reflect.Field;
-
-@Aspect
-public class BeanListenerAspect {
-
- private static final Logger LOG = LoggerFactory.getLogger(BeanListenerAspect.class);
-
- public interface Manageable {
- void setPersistenceContext(UnitOfWorkImpl uow);
-
- UnitOfWorkImpl getPersistenceContext();
- }
-
- public static class ManageableImpl implements Manageable, Serializable {
- private transient UnitOfWorkImpl persistenceContext;
-
- @Override
- public void setPersistenceContext(UnitOfWorkImpl uow) {
- this.persistenceContext = uow;
- }
-
- @Override
- public UnitOfWorkImpl getPersistenceContext() {
- return persistenceContext;
- }
- }
-
- @DeclareMixin(value = "!is(InterfaceType) && (@cz.cvut.kbss.jopa.model.annotations.OWLClass *) && (!@cz.cvut.kbss.jopa.model.annotations.util.NonEntity *)")
- public static Manageable createImpl() {
- return new ManageableImpl();
- }
-
- @Pointcut("get( @(cz.cvut.kbss.jopa.model.annotations.OWLObjectProperty " +
- "|| cz.cvut.kbss.jopa.model.annotations.OWLDataProperty " +
- "|| cz.cvut.kbss.jopa.model.annotations.OWLAnnotationProperty " +
- "|| cz.cvut.kbss.jopa.model.annotations.Types " +
- "|| cz.cvut.kbss.jopa.model.annotations.Properties " +
- "|| cz.cvut.kbss.jopa.model.annotations.Sparql) * * ) " +
- "&& ((within(@cz.cvut.kbss.jopa.model.annotations.OWLClass *) && !within(@cz.cvut.kbss.jopa.model.annotations.util.NonEntity *)) " +
- "|| within(@cz.cvut.kbss.jopa.model.annotations.MappedSuperclass *))")
- void getter() {
- }
-
- @Pointcut("set( @(cz.cvut.kbss.jopa.model.annotations.OWLObjectProperty " +
- "|| cz.cvut.kbss.jopa.model.annotations.OWLDataProperty " +
- "|| cz.cvut.kbss.jopa.model.annotations.OWLAnnotationProperty " +
- "|| cz.cvut.kbss.jopa.model.annotations.Types || cz.cvut.kbss.jopa.model.annotations.Properties ) * * ) " +
- "&& ((within(@cz.cvut.kbss.jopa.model.annotations.OWLClass *) && !within(@cz.cvut.kbss.jopa.model.annotations.util.NonEntity *)) " +
- "|| within(@cz.cvut.kbss.jopa.model.annotations.MappedSuperclass *))")
- void setter() {
- }
-
- /**
- * Ties the specified instance to its persistence context, so that the advices can identify it easily.
- *
- * @param instance The managed instance
- * @param persistenceContext Persistence context which is managing it
- */
- public void register(Object instance, UnitOfWorkImpl persistenceContext) {
- ((Manageable) instance).setPersistenceContext(persistenceContext);
- }
-
- /**
- * Disconnects the specified instance from its persistence context.
- *
- * @param instance The instance to remove
- * @see #register(Object, UnitOfWorkImpl)
- */
- public void deregister(Object instance) {
- ((Manageable) instance).setPersistenceContext(null);
- }
-
- @AfterReturning("setter()")
- public void afterSetter(JoinPoint thisJoinPoint) {
- // Persist changes done during transaction and check for inferred attribute modification
- final Object entity = thisJoinPoint.getTarget();
- if (!(entity instanceof Manageable)) {
- return;
- }
- final UnitOfWorkImpl persistenceContext = ((Manageable) entity).getPersistenceContext();
- if (persistenceContext == null || !persistenceContext.isInTransaction()) {
- return;
- }
-
- try {
- final Field field = ((FieldSignature) thisJoinPoint.getSignature()).getField();
- if (EntityPropertiesUtils.isFieldTransient(field)) {
- return;
- }
- final FieldSpecification, ?> fieldSpec = getFieldSpecification(entity,
- thisJoinPoint.getSignature().getName(),
- persistenceContext);
- AttributeModificationValidator.verifyCanModify(fieldSpec);
- persistenceContext.attributeChanged(entity, field);
- } catch (SecurityException e) {
- LOG.error(e.getMessage(), e);
- throw new OWLPersistenceException(e.getMessage());
- }
- }
-
- private static FieldSpecification, ?> getFieldSpecification(Object entity, String fieldName,
- UnitOfWorkImpl persistenceContext) {
- final EntityType> et = persistenceContext.getMetamodel().entity(entity.getClass());
- assert et != null;
- return et.getFieldSpecification(fieldName);
- }
-
- @Before("getter()")
- public void beforeGetter(JoinPoint thisJoinPoint) {
- // Load lazy loaded entity field
- final Object entity = thisJoinPoint.getTarget();
- if (!(entity instanceof Manageable)) {
- return;
- }
- final UnitOfWorkImpl persistenceContext = ((Manageable) entity).getPersistenceContext();
- if (persistenceContext == null || !persistenceContext.contains(entity)) {
- return;
- }
- final Field field = ((FieldSignature) thisJoinPoint.getSignature()).getField();
- if (EntityPropertiesUtils.isFieldTransient(field)) {
- return;
- }
- persistenceContext.loadEntityField(entity, field);
- }
-}
diff --git a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/model/CriteriaQueryImpl.java b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/model/CriteriaQueryImpl.java
index eaea513e8..a34c0631f 100644
--- a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/model/CriteriaQueryImpl.java
+++ b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/model/CriteriaQueryImpl.java
@@ -19,14 +19,25 @@
import cz.cvut.kbss.jopa.model.metamodel.EntityType;
import cz.cvut.kbss.jopa.model.metamodel.Metamodel;
-import cz.cvut.kbss.jopa.model.query.criteria.*;
-import cz.cvut.kbss.jopa.query.criteria.*;
+import cz.cvut.kbss.jopa.model.query.criteria.CriteriaQuery;
+import cz.cvut.kbss.jopa.model.query.criteria.Expression;
+import cz.cvut.kbss.jopa.model.query.criteria.Order;
+import cz.cvut.kbss.jopa.model.query.criteria.Predicate;
+import cz.cvut.kbss.jopa.model.query.criteria.Root;
+import cz.cvut.kbss.jopa.model.query.criteria.Selection;
+import cz.cvut.kbss.jopa.query.criteria.AbstractPredicate;
+import cz.cvut.kbss.jopa.query.criteria.CriteriaBuilderImpl;
+import cz.cvut.kbss.jopa.query.criteria.CriteriaParameterFiller;
+import cz.cvut.kbss.jopa.query.criteria.CriteriaQueryHolder;
+import cz.cvut.kbss.jopa.query.criteria.RootImpl;
import cz.cvut.kbss.jopa.query.criteria.expressions.AbstractExpression;
import cz.cvut.kbss.jopa.query.soql.SoqlConstants;
-import cz.cvut.kbss.jopa.utils.ErrorUtils;
-
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
public class CriteriaQueryImpl implements CriteriaQuery {
@@ -36,7 +47,7 @@ public class CriteriaQueryImpl implements CriteriaQuery {
public CriteriaQueryImpl(CriteriaQueryHolder query, Metamodel metamodel, CriteriaBuilderImpl cb) {
- this.query = Objects.requireNonNull(query, ErrorUtils.getNPXMessageSupplier("query"));
+ this.query = Objects.requireNonNull(query);
this.metamodel = metamodel;
this.cb = cb;
}
diff --git a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/model/EntityManagerFactoryImpl.java b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/model/EntityManagerFactoryImpl.java
index ab0e28dd0..eb45c84aa 100644
--- a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/model/EntityManagerFactoryImpl.java
+++ b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/model/EntityManagerFactoryImpl.java
@@ -21,7 +21,7 @@
import cz.cvut.kbss.jopa.model.metamodel.EntityType;
import cz.cvut.kbss.jopa.model.metamodel.Metamodel;
import cz.cvut.kbss.jopa.model.query.Query;
-import cz.cvut.kbss.jopa.sessions.Cache;
+import cz.cvut.kbss.jopa.model.query.criteria.CriteriaBuilder;
import cz.cvut.kbss.jopa.sessions.ServerSession;
import cz.cvut.kbss.jopa.utils.Configuration;
import cz.cvut.kbss.jopa.utils.EntityPropertiesUtils;
@@ -126,6 +126,13 @@ private synchronized void initServerSession() {
}
}
+ @Override
+ public CriteriaBuilder getCriteriaBuilder() {
+ ensureOpen();
+ initServerSession();
+ return serverSession.getCriteriaBuilder();
+ }
+
/**
* The server session should by initialized by now, but to make sure, there is default initialization with an empty
* properties map.
@@ -197,7 +204,6 @@ public boolean isLoaded(Object entity, String attributeName) {
@Override
public boolean isLoaded(Object entity) {
Objects.requireNonNull(entity);
- // Since we do not support getReference yet, all EAGER attributes are always loaded for managed instances
return em.stream().anyMatch(emi -> emi.isLoaded(entity));
}
diff --git a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/model/EntityManagerImpl.java b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/model/EntityManagerImpl.java
index 719c27e43..ceb0aa1ab 100644
--- a/jopa-impl/src/main/java/cz/cvut/kbss/jopa/model/EntityManagerImpl.java
+++ b/jopa-impl/src/main/java/cz/cvut/kbss/jopa/model/EntityManagerImpl.java
@@ -26,20 +26,27 @@
import cz.cvut.kbss.jopa.model.metamodel.FieldSpecification;
import cz.cvut.kbss.jopa.model.metamodel.Metamodel;
import cz.cvut.kbss.jopa.model.query.TypedQuery;
+import cz.cvut.kbss.jopa.model.query.criteria.CriteriaBuilder;
import cz.cvut.kbss.jopa.model.query.criteria.CriteriaQuery;
import cz.cvut.kbss.jopa.query.criteria.CriteriaParameterFiller;
-import cz.cvut.kbss.jopa.sessions.CriteriaBuilder;
import cz.cvut.kbss.jopa.sessions.ServerSession;
-import cz.cvut.kbss.jopa.sessions.UnitOfWorkImpl;
+import cz.cvut.kbss.jopa.sessions.UnitOfWork;
import cz.cvut.kbss.jopa.transactions.EntityTransaction;
import cz.cvut.kbss.jopa.transactions.EntityTransactionWrapper;
-import cz.cvut.kbss.jopa.transactions.TransactionWrapper;
-import cz.cvut.kbss.jopa.utils.*;
+import cz.cvut.kbss.jopa.utils.CollectionFactory;
+import cz.cvut.kbss.jopa.utils.Configuration;
+import cz.cvut.kbss.jopa.utils.EntityPropertiesUtils;
+import cz.cvut.kbss.jopa.utils.Wrapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.URI;
-import java.util.*;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.IdentityHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
public class EntityManagerImpl implements AbstractEntityManager, Wrapper {
@@ -52,8 +59,8 @@ public class EntityManagerImpl implements AbstractEntityManager, Wrapper {
private boolean open;
- private TransactionWrapper transaction;
- private UnitOfWorkImpl persistenceContext;
+ private final EntityTransactionWrapper transaction;
+ private UnitOfWork persistenceContext;
private final Configuration configuration;
private Map