Skip to content

Commit

Permalink
Merge pull request #296 from kbss-cvut/development
Browse files Browse the repository at this point in the history
[2.2.1] Release
  • Loading branch information
ledsoft authored Dec 12, 2024
2 parents 2c27c7d + 3d6c4d2 commit ba97d62
Show file tree
Hide file tree
Showing 108 changed files with 418 additions and 513 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# JOPA - Change Log

## 2.2.1 - 2024-12-12
- Rename `MultilingualString` in OntoDriver to `Translations` to prevent confusion with `MultilingualString` from JOPA (GH #288).
- Fix a SPARQL query parsing issue (Bug #294).

## 2.2.0 - 2024-11-22
- Treat any non-entity type as immutable w.r.t. to change tracking so that we do not have to explicitly list them in code (GH #278).
- Allow projecting entity attributes from SOQL/Criteria API queries (Enhancement #277).
Expand Down
2 changes: 1 addition & 1 deletion datatype/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<artifactId>jopa-all</artifactId>
<groupId>cz.cvut.kbss.jopa</groupId>
<version>2.2.0</version>
<version>2.2.1</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,49 +60,25 @@ public Optional<Object> map(Literal literal) {
Objects.requireNonNull(literal);
final String value = literal.getLexicalForm();
try {
switch (literal.getDatatype()) {
case XSD.BOOLEAN:
return Optional.of(Boolean.parseBoolean(value));
case XSD.BYTE:
return Optional.of(Byte.parseByte(value));
case XSD.SHORT:
case XSD.UNSIGNED_BYTE:
return Optional.of(Short.parseShort(value));
case XSD.INT:
case XSD.UNSIGNED_SHORT:
return Optional.of(Integer.parseInt(value));
case XSD.LONG:
case XSD.UNSIGNED_INT:
return Optional.of(Long.parseLong(value));
case XSD.FLOAT:
return Optional.of(toFloat(value));
case XSD.DOUBLE:
return Optional.of(toDouble(value));
case XSD.STRING:
case XSD.NORMALIZED_STRING:
return Optional.of(value);
case XSD.DATETIME:
return Optional.of(XsdDateTimeMapper.map(value));
case XSD.DATE:
return Optional.of(XsdDateMapper.map(value));
case XSD.TIME:
return Optional.of(XsdTimeMapper.map(value));
case XSD.DURATION:
return Optional.of(XsdDurationMapper.map(value));
case XSD.INTEGER:
case XSD.NON_NEGATIVE_INTEGER:
case XSD.NON_POSITIVE_INTEGER:
case XSD.NEGATIVE_INTEGER:
case XSD.POSITIVE_INTEGER:
case XSD.UNSIGNED_LONG:
return Optional.of(new BigInteger(value));
case XSD.DECIMAL:
return Optional.of(new BigDecimal(value));
case XSD.ANY_URI:
return Optional.of(URI.create(value));
default:
return Optional.empty();
}
return switch (literal.getDatatype()) {
case XSD.BOOLEAN -> Optional.of(Boolean.parseBoolean(value));
case XSD.BYTE -> Optional.of(Byte.parseByte(value));
case XSD.SHORT, XSD.UNSIGNED_BYTE -> Optional.of(Short.parseShort(value));
case XSD.INT, XSD.UNSIGNED_SHORT -> Optional.of(Integer.parseInt(value));
case XSD.LONG, XSD.UNSIGNED_INT -> Optional.of(Long.parseLong(value));
case XSD.FLOAT -> Optional.of(toFloat(value));
case XSD.DOUBLE -> Optional.of(toDouble(value));
case XSD.STRING, XSD.NORMALIZED_STRING -> Optional.of(value);
case XSD.DATETIME -> Optional.of(XsdDateTimeMapper.map(value));
case XSD.DATE -> Optional.of(XsdDateMapper.map(value));
case XSD.TIME -> Optional.of(XsdTimeMapper.map(value));
case XSD.DURATION -> Optional.of(XsdDurationMapper.map(value));
case XSD.INTEGER, XSD.NON_NEGATIVE_INTEGER, XSD.NON_POSITIVE_INTEGER, XSD.NEGATIVE_INTEGER,
XSD.POSITIVE_INTEGER, XSD.UNSIGNED_LONG -> Optional.of(new BigInteger(value));
case XSD.DECIMAL -> Optional.of(new BigDecimal(value));
case XSD.ANY_URI -> Optional.of(URI.create(value));
default -> Optional.empty();
};
} catch (IllegalArgumentException e) {
throw new DatatypeMappingException("Unable to map literal " + literal, e);
}
Expand Down
2 changes: 1 addition & 1 deletion jopa-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>cz.cvut.kbss.jopa</groupId>
<artifactId>jopa-all</artifactId>
<version>2.2.0</version>
<version>2.2.1</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
3 changes: 1 addition & 2 deletions jopa-api/src/main/java/cz/cvut/kbss/jopa/model/IRI.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,9 @@ public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof IRI)) {
if (!(o instanceof IRI iri)) {
return false;
}
IRI iri = (IRI) o;
return value.equals(iri.value);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,10 +187,9 @@ public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof MultilingualString)) {
if (!(o instanceof MultilingualString that)) {
return false;
}
MultilingualString that = (MultilingualString) o;
return value.equals(that.getValue());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,12 +143,10 @@ public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof AbstractDescriptor)) {
if (!(o instanceof AbstractDescriptor that)) {
return false;
}

AbstractDescriptor that = (AbstractDescriptor) o;

if (hasLanguage != that.hasLanguage) {
return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,7 @@ public Collection<Descriptor> getAttributeDescriptors() {

private AbstractDescriptor createDescriptor(FieldSpecification<?, ?> att, Set<URI> contexts) {
final AbstractDescriptor result;
if (att instanceof Attribute) {
final Attribute<?, ?> attSpec = (Attribute<?, ?>) att;
if (att instanceof Attribute<?, ?> attSpec) {
if (attSpec.getPersistentAttributeType() == PersistentAttributeType.OBJECT) {
if (attSpec.isCollection()) {
result = new ObjectPropertyCollectionDescriptor(contexts, att);
Expand All @@ -161,15 +160,13 @@ public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof EntityDescriptor)) {
if (!(o instanceof EntityDescriptor that)) {
return false;
}
if (!super.equals(o)) {
return false;
}

EntityDescriptor that = (EntityDescriptor) o;

if (fieldDescriptors.size() != that.fieldDescriptors.size()) {
return false;
}
Expand Down
2 changes: 1 addition & 1 deletion jopa-distribution/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>cz.cvut.kbss.jopa</groupId>
<artifactId>jopa-all</artifactId>
<version>2.2.0</version>
<version>2.2.1</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion jopa-impl/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>cz.cvut.kbss.jopa</groupId>
<artifactId>jopa-all</artifactId>
<version>2.2.0</version>
<version>2.2.1</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -461,7 +461,7 @@ public <T> TypedQuery<T> createQuery(CriteriaQuery<T> criteriaQuery) {
CriteriaQueryImpl<T> query = (CriteriaQueryImpl<T>) criteriaQuery;
CriteriaParameterFiller parameterFiller = new CriteriaParameterFiller();
String soqlQuery = query.translateQuery(parameterFiller);
LOG.debug("CriteriaQuery translate to SOQL query: " + soqlQuery);
LOG.debug("CriteriaQuery translate to SOQL query: {}", soqlQuery);
final TypedQueryImpl<T> q = getCurrentPersistenceContext().sparqlQueryFactory().createQuery(soqlQuery, query.getResultType());
q.setRollbackOnlyMarker(this::markTransactionForRollback);
q.setEnsureOpenProcedure(this::ensureOpen);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
import java.util.Collections;
import java.util.Objects;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ private Assertion propertyToAssertion(Object property) {

private static Set<Value<?>> objectsToValues(Collection<?> strValues) {
final Set<Value<?>> ontoValues = new HashSet<>(strValues.size());
ontoValues.addAll(strValues.stream().filter(Objects::nonNull).map(Value::new).collect(Collectors.toList()));
ontoValues.addAll(strValues.stream().filter(Objects::nonNull).map(Value::new).toList());
return ontoValues;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ void buildAxiomValuesFromInstance(X instance, AxiomValueGatherer valueBuilder) {
valueCollection.stream()
.filter(Objects::nonNull)
.map(converter::convertToAxiomValue)
.forEach(v -> valueDescriptor.addValue(v));
.forEach(valueDescriptor::addValue);
valueBuilder.addContainerValues(valueDescriptor);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,7 @@ public Object convertToAxiomValue(Object value) {
public Object convertToAttribute(Object value) {
if (value instanceof NamedResource) {
return ((NamedResource) value).getIdentifier();
} else if (value instanceof LangString) {
final LangString ls = (LangString) value;
} else if (value instanceof LangString ls) {
if (preferMultilingualString) {
final MultilingualString ms = new MultilingualString();
ms.set(ls.getLanguage().orElse(null), ls.getValue());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

import cz.cvut.kbss.jopa.model.MultilingualString;
import cz.cvut.kbss.ontodriver.model.LangString;
import cz.cvut.kbss.ontodriver.model.Translations;

/**
* Supports mapping selected value types to multilingual strings.
Expand All @@ -30,17 +31,16 @@ public class ToMultilingualStringConverter implements ConverterWrapper<Multiling

@Override
public Object convertToAxiomValue(MultilingualString value) {
return new cz.cvut.kbss.ontodriver.model.MultilingualString(value.getValue());
return new Translations(value.getValue());
}

@Override
public MultilingualString convertToAttribute(Object value) {
final Class<?> type = value.getClass();
assert supportsAxiomValueType(type);
if (value instanceof cz.cvut.kbss.ontodriver.model.MultilingualString) {
return new MultilingualString(((cz.cvut.kbss.ontodriver.model.MultilingualString) value).getValue());
} else if (value instanceof LangString) {
final LangString ls = (LangString) value;
if (value instanceof Translations translations) {
return new MultilingualString(translations.getValue());
} else if (value instanceof LangString ls) {
return MultilingualString.create(ls.getValue(), ls.getLanguage().orElse(null));
} else {
return MultilingualString.create(value.toString(), null);
Expand All @@ -49,7 +49,7 @@ public MultilingualString convertToAttribute(Object value) {

@Override
public boolean supportsAxiomValueType(Class<?> type) {
return cz.cvut.kbss.ontodriver.model.MultilingualString.class.isAssignableFrom(type)
return Translations.class.isAssignableFrom(type)
|| LangString.class.isAssignableFrom(type)
|| String.class.isAssignableFrom(type);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

public class CompoundedPredicateImpl extends AbstractPredicate {

protected List<Expression<Boolean>> expressions;
protected final List<Expression<Boolean>> expressions;

public CompoundedPredicateImpl(BooleanOperator booleanOperator, List<Expression<Boolean>> expressions,
CriteriaBuilder cb) {
Expand All @@ -39,11 +39,6 @@ public List<Expression<Boolean>> getExpressions() {
return expressions;
}

@Override
public BooleanOperator getOperator() {
return this.booleanOperator;
}

@Override
public Predicate not() {
for (Expression<Boolean> expression : expressions) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@

public class PathImpl<X> extends AbstractPathExpression<X> implements Path<X> {

protected String attributeName;
protected FieldSpecification<?, ?> attribute;
protected final String attributeName;
protected final FieldSpecification<?, ?> attribute;

public PathImpl(Metamodel metamodel, AbstractPathExpression pathSource, FieldSpecification<?, ?> attribute,
CriteriaBuilder cb) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

public class SimplePredicateImpl extends AbstractPredicate{

protected Expression<Boolean> expression;
protected final Expression<Boolean> expression;

public SimplePredicateImpl(BooleanOperator booleanOperator, Expression<Boolean> expression, CriteriaBuilder cb) {
super(booleanOperator, cb);
Expand All @@ -44,11 +44,6 @@ public List<Expression<Boolean>> getExpressions(){
return Collections.singletonList(expression);
}

@Override
public BooleanOperator getOperator() {
return this.booleanOperator;
}

@Override
public Predicate not() {
((AbstractExpression)expression).negate();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@

public abstract class AbstractComparisonExpression extends AbstractExpression<Boolean> {

protected AbstractExpression<?> right;
protected AbstractExpression<?> left;
protected final AbstractExpression<?> right;
protected final AbstractExpression<?> left;

public AbstractComparisonExpression(AbstractExpression<?> left, AbstractExpression<?> right, CriteriaBuilder cb) {
super(Boolean.class, cb);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

public abstract class AbstractFunctionExpression<X> extends AbstractExpression<X> {

protected AbstractPathExpression argumentExpression;
protected final AbstractPathExpression argumentExpression;

public AbstractFunctionExpression(Class<X> type, AbstractPathExpression argumentExpression, CriteriaBuilder cb) {
super(type, cb);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@

public abstract class AbstractPathExpression<X> extends AbstractExpression<X> implements Path<X> {

protected AbstractPathExpression pathSource;
protected final AbstractPathExpression pathSource;
protected final Metamodel metamodel;

public AbstractPathExpression(Class<X> type, AbstractPathExpression pathSource, Metamodel metamodel,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,9 @@ public SparqlQueryHolder parseQuery(String query) {
break;
case '>':
this.inUri = false;
if(inParam) {
parameterEnd(i);
}
wordEnd();
break;
case '\n':
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
*/
abstract class AbstractSession implements MetamodelProvider, ConfigurationHolder {

protected Configuration configuration;
protected final Configuration configuration;

protected AbstractSession(Configuration configuration) {
this.configuration = Objects.requireNonNull(configuration);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
*/
package cz.cvut.kbss.jopa.sessions;

import cz.cvut.kbss.jopa.model.metamodel.EntityType;
import cz.cvut.kbss.jopa.model.metamodel.IdentifiableEntityType;
import cz.cvut.kbss.jopa.sessions.util.CloneConfiguration;
import cz.cvut.kbss.jopa.utils.ReflectionUtils;
Expand All @@ -41,9 +40,9 @@ public class ManagedInstanceBuilder extends DefaultInstanceBuilder {
@Override
Object buildClone(Object cloneOwner, Field field, Object original, CloneConfiguration config) {
assert uow.isEntityType(original.getClass());
final EntityType<?> et = uow.getMetamodel().entity(original.getClass());
final IdentifiableEntityType<?> et = uow.getMetamodel().entity(original.getClass());
assert et != null;
final Class<?> cls = config.isForPersistenceContext() ? ((IdentifiableEntityType<?>) et).getInstantiableJavaType() : et.getJavaType();
final Class<?> cls = config.isForPersistenceContext() ? et.getInstantiableJavaType() : et.getJavaType();
return ReflectionUtils.instantiateUsingDefaultConstructor(cls);
}
}
Loading

0 comments on commit ba97d62

Please sign in to comment.